[
  {
    "uri": "features/untrusted_partitions.feature",
    "id": "untrusted-partitions",
    "keyword": "Feature",
    "name": "Untrusted partitions",
    "description": "  As a Tails user\n  I don't want to touch other media than the one Tails runs from",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "untrusted-partitions;tails-ignores-a-swap-volume-and-another-tails-that-are-on-an-internal-hard-drive",
        "keyword": "Scenario",
        "name": "Tails ignores a swap volume and another Tails that are on an internal hard drive",
        "description": "",
        "line": 6,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 21410
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 35235573
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 7,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 1015482176
            }
          },
          {
            "keyword": "And ",
            "name": "I temporarily create a 100 MiB disk named \"swap\"",
            "line": 8,
            "match": {
              "location": "features/step_definitions/common_steps.rb:114"
            },
            "result": {
              "status": "passed",
              "duration": 109185858
            }
          },
          {
            "keyword": "And ",
            "name": "I create a gpt swap partition on disk \"swap\"",
            "line": 9,
            "match": {
              "location": "features/step_definitions/untrusted_partitions.rb:1"
            },
            "result": {
              "status": "passed",
              "duration": 4637625428
            }
          },
          {
            "keyword": "And ",
            "name": "I plug SATA drive \"swap\"",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:126"
            },
            "result": {
              "status": "passed",
              "duration": 1031022530
            }
          },
          {
            "keyword": "And ",
            "name": "I temporarily create a 7200 MiB disk named \"live_hd\"",
            "line": 11,
            "match": {
              "location": "features/step_definitions/common_steps.rb:114"
            },
            "result": {
              "status": "passed",
              "duration": 29875401
            }
          },
          {
            "keyword": "And ",
            "name": "I write the Tails USB image to disk \"live_hd\"",
            "line": 12,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1794"
            },
            "result": {
              "status": "passed",
              "duration": 12445579980
            }
          },
          {
            "keyword": "And ",
            "name": "I plug SATA drive \"live_hd\"",
            "line": 13,
            "match": {
              "location": "features/step_definitions/common_steps.rb:126"
            },
            "result": {
              "status": "passed",
              "duration": 1034488509
            }
          },
          {
            "keyword": "When ",
            "name": "I start Tails with network unplugged and I login",
            "line": 14,
            "match": {
              "location": "features/step_definitions/common_steps.rb:214"
            },
            "result": {
              "status": "passed",
              "duration": 43536633704
            }
          },
          {
            "keyword": "Then ",
            "name": "a \"swap\" partition was detected by Tails on drive \"swap\"",
            "line": 15,
            "match": {
              "location": "features/step_definitions/untrusted_partitions.rb:5"
            },
            "result": {
              "status": "passed",
              "duration": 56628337
            }
          },
          {
            "keyword": "And ",
            "name": "drive \"live_hd\" is detected by Tails",
            "line": 16,
            "match": {
              "location": "features/step_definitions/common_steps.rb:132"
            },
            "result": {
              "status": "passed",
              "duration": 43945088
            }
          },
          {
            "keyword": "But ",
            "name": "Tails has no disk swap enabled",
            "line": 17,
            "match": {
              "location": "features/step_definitions/untrusted_partitions.rb:13"
            },
            "result": {
              "status": "passed",
              "duration": 46156776
            }
          },
          {
            "keyword": "And ",
            "name": "drive \"live_hd\" is not mounted",
            "line": 18,
            "match": {
              "location": "features/step_definitions/untrusted_partitions.rb:32"
            },
            "result": {
              "status": "passed",
              "duration": 37744426
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 815902683
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 104854524
            }
          }
        ]
      },
      {
        "id": "untrusted-partitions;the-welcome-screen-ignores-persistent-storage-stored-on-a-non-removable-usb-drive",
        "keyword": "Scenario",
        "name": "The Welcome Screen ignores Persistent Storage stored on a non-removable USB drive",
        "description": "",
        "line": 20,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 13546
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 1161286
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 21,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 74960979
            }
          },
          {
            "keyword": "And ",
            "name": "I temporarily create a 100 MiB disk named \"fake_TailsData\"",
            "line": 22,
            "match": {
              "location": "features/step_definitions/common_steps.rb:114"
            },
            "result": {
              "status": "passed",
              "duration": 19389243
            }
          },
          {
            "keyword": "And ",
            "name": "I create a gpt partition labeled \"TailsData\" with an ext4 filesystem encrypted with password \"asdf\" on disk \"fake_TailsData\"",
            "line": 23,
            "match": {
              "location": "features/step_definitions/untrusted_partitions.rb:23"
            },
            "result": {
              "status": "passed",
              "duration": 16734250407
            }
          },
          {
            "keyword": "And ",
            "name": "I plug non-removable USB drive \"fake_TailsData\"",
            "line": 24,
            "match": {
              "location": "features/step_definitions/common_steps.rb:126"
            },
            "result": {
              "status": "passed",
              "duration": 1031082911
            }
          },
          {
            "keyword": "When ",
            "name": "I start the computer",
            "line": 25,
            "match": {
              "location": "features/step_definitions/common_steps.rb:205"
            },
            "result": {
              "status": "passed",
              "duration": 633961804
            }
          },
          {
            "keyword": "And ",
            "name": "the computer boots Tails",
            "line": 26,
            "match": {
              "location": "features/step_definitions/common_steps.rb:405"
            },
            "result": {
              "status": "passed",
              "duration": 28884304979
            }
          },
          {
            "keyword": "Then ",
            "name": "drive \"fake_TailsData\" is detected by Tails",
            "line": 27,
            "match": {
              "location": "features/step_definitions/common_steps.rb:132"
            },
            "result": {
              "status": "passed",
              "duration": 50621828
            }
          },
          {
            "keyword": "And ",
            "name": "Tails Greeter has not detected a persistence partition",
            "line": 28,
            "match": {
              "location": "features/step_definitions/untrusted_partitions.rb:38"
            },
            "result": {
              "status": "passed",
              "duration": 13802554496
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 1042449183
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 6684395
            }
          }
        ]
      },
      {
        "id": "untrusted-partitions;the-welcome-screen-ignores-persistent-storage-stored-on-an-internal-hard-drive",
        "keyword": "Scenario",
        "name": "The Welcome Screen ignores Persistent Storage stored on an internal hard drive",
        "description": "",
        "line": 30,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 12844
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 1986477
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 31,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 73335965
            }
          },
          {
            "keyword": "And ",
            "name": "I temporarily create a 100 MiB disk named \"fake_TailsData\"",
            "line": 32,
            "match": {
              "location": "features/step_definitions/common_steps.rb:114"
            },
            "result": {
              "status": "passed",
              "duration": 18506075
            }
          },
          {
            "keyword": "And ",
            "name": "I create a gpt partition labeled \"TailsData\" with an ext4 filesystem encrypted with password \"asdf\" on disk \"fake_TailsData\"",
            "line": 33,
            "match": {
              "location": "features/step_definitions/untrusted_partitions.rb:23"
            },
            "result": {
              "status": "passed",
              "duration": 17139992215
            }
          },
          {
            "keyword": "And ",
            "name": "I plug SATA drive \"fake_TailsData\"",
            "line": 34,
            "match": {
              "location": "features/step_definitions/common_steps.rb:126"
            },
            "result": {
              "status": "passed",
              "duration": 1028332298
            }
          },
          {
            "keyword": "When ",
            "name": "I start the computer",
            "line": 35,
            "match": {
              "location": "features/step_definitions/common_steps.rb:205"
            },
            "result": {
              "status": "passed",
              "duration": 636853535
            }
          },
          {
            "keyword": "And ",
            "name": "the computer boots Tails",
            "line": 36,
            "match": {
              "location": "features/step_definitions/common_steps.rb:405"
            },
            "result": {
              "status": "passed",
              "duration": 28486901912
            }
          },
          {
            "keyword": "Then ",
            "name": "drive \"fake_TailsData\" is detected by Tails",
            "line": 37,
            "match": {
              "location": "features/step_definitions/common_steps.rb:132"
            },
            "result": {
              "status": "passed",
              "duration": 50412851
            }
          },
          {
            "keyword": "And ",
            "name": "Tails Greeter has not detected a persistence partition",
            "line": 38,
            "match": {
              "location": "features/step_definitions/untrusted_partitions.rb:38"
            },
            "result": {
              "status": "passed",
              "duration": 13643078272
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 697332723
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 27095969
            }
          }
        ]
      },
      {
        "id": "untrusted-partitions;booting-tails-does-not-automount-untrusted-partitions",
        "keyword": "Scenario",
        "name": "Booting Tails does not automount untrusted partitions",
        "description": "",
        "line": 40,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 9708
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 1263016
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 41,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 72882114
            }
          },
          {
            "keyword": "And ",
            "name": "I temporarily create a 100 MiB disk named \"gpt_ext2\"",
            "line": 42,
            "match": {
              "location": "features/step_definitions/common_steps.rb:114"
            },
            "result": {
              "status": "passed",
              "duration": 19614265
            }
          },
          {
            "keyword": "And ",
            "name": "I create a gpt partition with an ext2 filesystem on disk \"gpt_ext2\"",
            "line": 43,
            "match": {
              "location": "features/step_definitions/untrusted_partitions.rb:23"
            },
            "result": {
              "status": "passed",
              "duration": 2691786793
            }
          },
          {
            "keyword": "And ",
            "name": "I plug SATA drive \"gpt_ext2\"",
            "line": 44,
            "match": {
              "location": "features/step_definitions/common_steps.rb:126"
            },
            "result": {
              "status": "passed",
              "duration": 1020739360
            }
          },
          {
            "keyword": "And ",
            "name": "I temporarily create a 100 MiB disk named \"msdos_fat32\"",
            "line": 45,
            "match": {
              "location": "features/step_definitions/common_steps.rb:114"
            },
            "result": {
              "status": "passed",
              "duration": 30970169
            }
          },
          {
            "keyword": "And ",
            "name": "I create an msdos partition with a vfat filesystem on disk \"msdos_fat32\"",
            "line": 46,
            "match": {
              "location": "features/step_definitions/untrusted_partitions.rb:23"
            },
            "result": {
              "status": "passed",
              "duration": 2726749111
            }
          },
          {
            "keyword": "And ",
            "name": "I plug SATA drive \"msdos_fat32\"",
            "line": 47,
            "match": {
              "location": "features/step_definitions/common_steps.rb:126"
            },
            "result": {
              "status": "passed",
              "duration": 1032705029
            }
          },
          {
            "keyword": "And ",
            "name": "I start Tails from DVD with network unplugged and I login",
            "line": 48,
            "match": {
              "location": "features/step_definitions/common_steps.rb:214"
            },
            "result": {
              "status": "passed",
              "duration": 43243279976
            }
          },
          {
            "keyword": "Then ",
            "name": "drive \"gpt_ext2\" is detected by Tails",
            "line": 49,
            "match": {
              "location": "features/step_definitions/common_steps.rb:132"
            },
            "result": {
              "status": "passed",
              "duration": 56578008
            }
          },
          {
            "keyword": "And ",
            "name": "drive \"gpt_ext2\" is not mounted",
            "line": 50,
            "match": {
              "location": "features/step_definitions/untrusted_partitions.rb:32"
            },
            "result": {
              "status": "passed",
              "duration": 39078239
            }
          },
          {
            "keyword": "And ",
            "name": "drive \"msdos_fat32\" is detected by Tails",
            "line": 51,
            "match": {
              "location": "features/step_definitions/common_steps.rb:132"
            },
            "result": {
              "status": "passed",
              "duration": 45436866
            }
          },
          {
            "keyword": "And ",
            "name": "drive \"msdos_fat32\" is not mounted",
            "line": 52,
            "match": {
              "location": "features/step_definitions/untrusted_partitions.rb:32"
            },
            "result": {
              "status": "passed",
              "duration": 47580998
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 571152879
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 5593359
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/flatpak.feature",
    "id": "installing-and-running-flatpak-apps-in-tails",
    "keyword": "Feature",
    "name": "Installing and running Flatpak apps in Tails",
    "description": "  As a Tails user\n  I may want to install and run software not shipped in Tails or Debian\n  And keep them up-to-date",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "installing-and-running-flatpak-apps-in-tails;gnome-software-does-not-have-the-debian-plugin",
        "keyword": "Scenario",
        "name": "GNOME Software does not have the Debian plugin",
        "description": "",
        "line": 7,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 10690
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 995919
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have the build manifest for the image under test",
            "line": 8,
            "match": {
              "location": "features/step_definitions/needed_package_updates.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 44342
            }
          },
          {
            "keyword": "Then ",
            "name": "Debian package gnome-software-plugin-deb is not installed",
            "line": 9,
            "match": {
              "location": "features/step_definitions/needed_package_updates.rb:13"
            },
            "result": {
              "status": "passed",
              "duration": 36004433
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 638197563
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 18524
            }
          }
        ]
      },
      {
        "id": "installing-and-running-flatpak-apps-in-tails;gnome-software-does-not-start-until-tor-is-ready",
        "keyword": "Scenario",
        "name": "GNOME Software does not start until Tor is ready",
        "description": "",
        "line": 12,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 11
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 37039
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 18500407
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 11236470
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network with the Flatpak feature from a USB drive with a persistent partition enabled and logged in",
            "line": 13,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 173382869995
            }
          },
          {
            "keyword": "Then ",
            "name": "process \"gnome-software\" is not running",
            "line": 14,
            "match": {
              "location": "features/step_definitions/common_steps.rb:861"
            },
            "result": {
              "status": "passed",
              "duration": 43792797
            }
          },
          {
            "keyword": "When ",
            "name": "I try to start GNOME Software",
            "line": 15,
            "match": {
              "location": "features/step_definitions/flatpak.rb:7"
            },
            "result": {
              "status": "passed",
              "duration": 43265702
            }
          },
          {
            "keyword": "Then ",
            "name": "I see an error about GNOME Software requiring Tor to be ready",
            "line": 16,
            "match": {
              "location": "features/step_definitions/flatpak.rb:11"
            },
            "result": {
              "status": "passed",
              "duration": 586216396
            }
          },
          {
            "keyword": "And ",
            "name": "I close the \"zenity\" window",
            "line": 17,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1243"
            },
            "result": {
              "status": "passed",
              "duration": 1136423865
            }
          },
          {
            "keyword": "And ",
            "name": "process \"gnome-software\" is not running",
            "line": 18,
            "match": {
              "location": "features/step_definitions/common_steps.rb:861"
            },
            "result": {
              "status": "passed",
              "duration": 41689761
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 19,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 22191209
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 20,
            "match": {
              "location": "features/step_definitions/common_steps.rb:655"
            },
            "result": {
              "status": "passed",
              "duration": 12395457995
            }
          },
          {
            "keyword": "Then ",
            "name": "process \"gnome-software\" is running within 10 seconds",
            "line": 21,
            "match": {
              "location": "features/step_definitions/common_steps.rb:869"
            },
            "result": {
              "status": "passed",
              "duration": 46468411
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:535"
            },
            "result": {
              "status": "passed",
              "duration": 486666874
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 630374406
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 32409790
            }
          }
        ]
      },
      {
        "id": "installing-and-running-flatpak-apps-in-tails;installing,-starting-and-uninstalling-a-flatpak",
        "keyword": "Scenario",
        "name": "Installing, starting and uninstalling a Flatpak",
        "description": "",
        "line": 24,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 23
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 11221
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 1312910
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 1087830
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails with the Flatpak feature from a USB drive with a persistent partition enabled and logged in and the network is connected",
            "line": 25,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 200538377296
            }
          },
          {
            "keyword": "When ",
            "name": "I start GNOME Software",
            "line": 26,
            "match": {
              "location": "features/step_definitions/flatpak.rb:1"
            },
            "result": {
              "status": "passed",
              "duration": 2410081864
            }
          },
          {
            "keyword": "And ",
            "name": "I install Signal Desktop using GNOME Software",
            "line": 27,
            "match": {
              "location": "features/step_definitions/flatpak.rb:20"
            },
            "result": {
              "status": "passed",
              "duration": 8423845663
            }
          },
          {
            "keyword": "Then ",
            "name": "the org.signal.Signal Flatpak is installed after at most 600 seconds",
            "line": 28,
            "match": {
              "location": "features/step_definitions/flatpak.rb:55"
            },
            "result": {
              "status": "passed",
              "duration": 58833308661
            }
          },
          {
            "keyword": "When ",
            "name": "I start the org.signal.Signal Flatpak",
            "line": 29,
            "match": {
              "location": "features/step_definitions/flatpak.rb:61"
            },
            "result": {
              "status": "passed",
              "duration": 59443811
            }
          },
          {
            "keyword": "Then ",
            "name": "the org.signal.Signal Flatpak is running",
            "line": 30,
            "match": {
              "location": "features/step_definitions/flatpak.rb:71"
            },
            "result": {
              "status": "passed",
              "duration": 2278306127
            }
          },
          {
            "keyword": "Given ",
            "name": "I kill the org.signal.Signal Flatpak",
            "line": 31,
            "match": {
              "location": "features/step_definitions/flatpak.rb:77"
            },
            "result": {
              "status": "passed",
              "duration": 3362042459
            }
          },
          {
            "keyword": "And ",
            "name": "I go to the main screen of GNOME Software",
            "line": 32,
            "match": {
              "location": "features/step_definitions/flatpak.rb:45"
            },
            "result": {
              "status": "passed",
              "duration": 92167057
            }
          },
          {
            "keyword": "When ",
            "name": "I uninstall Signal Desktop using GNOME Software",
            "line": 33,
            "match": {
              "location": "features/step_definitions/flatpak.rb:31"
            },
            "result": {
              "status": "passed",
              "duration": 7055246170
            }
          },
          {
            "keyword": "Then ",
            "name": "the org.signal.Signal Flatpak is uninstalled after at most 60 seconds",
            "line": 34,
            "match": {
              "location": "features/step_definitions/flatpak.rb:55"
            },
            "result": {
              "status": "passed",
              "duration": 74316459
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:535"
            },
            "result": {
              "status": "passed",
              "duration": 7369043461
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 1167197661
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 41930782
            }
          }
        ]
      },
      {
        "id": "installing-and-running-flatpak-apps-in-tails;changing-locale-after-installing-a-flatpak",
        "keyword": "Scenario",
        "name": "Changing locale after installing a Flatpak",
        "description": "",
        "line": 37,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 36
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 11422
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 3338222
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 2361718
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails with the Flatpak feature from a USB drive with a persistent partition enabled and logged in and the network is connected",
            "line": 38,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 38427870443
            }
          },
          {
            "keyword": "When ",
            "name": "I start GNOME Software",
            "line": 39,
            "match": {
              "location": "features/step_definitions/flatpak.rb:1"
            },
            "result": {
              "status": "passed",
              "duration": 6638481442
            }
          },
          {
            "keyword": "And ",
            "name": "I install Thunderbird using GNOME Software",
            "line": 40,
            "match": {
              "location": "features/step_definitions/flatpak.rb:20"
            },
            "result": {
              "status": "passed",
              "duration": 8346584170
            }
          },
          {
            "keyword": "Then ",
            "name": "the org.mozilla.thunderbird Flatpak is installed after at most 600 seconds",
            "line": 41,
            "match": {
              "location": "features/step_definitions/flatpak.rb:55"
            },
            "result": {
              "status": "passed",
              "duration": 48599806431
            }
          },
          {
            "keyword": "And ",
            "name": "the \"de\" locale is not present in the org.mozilla.thunderbird.Locale Flatpak extension",
            "line": 42,
            "match": {
              "location": "features/step_definitions/flatpak.rb:84"
            },
            "result": {
              "status": "passed",
              "duration": 284755356
            }
          },
          {
            "keyword": "Given ",
            "name": "I set Tails to boot with options \"flatpak\"",
            "line": 43,
            "match": {
              "location": "features/step_definitions/common_steps.rb:197"
            },
            "result": {
              "status": "passed",
              "duration": 39114
            }
          },
          {
            "keyword": "When ",
            "name": "I cold reboot the computer",
            "line": 44,
            "match": {
              "location": "features/step_definitions/common_steps.rb:282"
            },
            "result": {
              "status": "passed",
              "duration": 4685334000
            }
          },
          {
            "keyword": "Then ",
            "name": "the computer boots Tails",
            "line": 45,
            "match": {
              "location": "features/step_definitions/common_steps.rb:405"
            },
            "result": {
              "status": "passed",
              "duration": 32309593866
            }
          },
          {
            "keyword": "When ",
            "name": "I enable persistence",
            "line": 46,
            "match": {
              "location": "features/step_definitions/usb.rb:728"
            },
            "result": {
              "status": "passed",
              "duration": 12916156959
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session in German (de)",
            "line": 47,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 21067548666
            }
          },
          {
            "keyword": "Given ",
            "name": "it has been 3 days since GNOME Software checked for updates",
            "line": 48,
            "match": {
              "location": "features/step_definitions/flatpak.rb:102"
            },
            "result": {
              "status": "passed",
              "duration": 121096548
            }
          },
          {
            "keyword": "And ",
            "name": "GNOME Software thinks it is after 06:00 but before 23:00",
            "line": 49,
            "match": {
              "location": "features/step_definitions/flatpak.rb:122"
            },
            "result": {
              "status": "passed",
              "duration": 247756981
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 50,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 26946606
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 51,
            "match": {
              "location": "features/step_definitions/common_steps.rb:655"
            },
            "result": {
              "status": "passed",
              "duration": 10733952625
            }
          },
          {
            "keyword": "Then ",
            "name": "the \"de\" locale is present in the org.mozilla.thunderbird.Locale Flatpak extension after at most 600 seconds",
            "line": 52,
            "match": {
              "location": "features/step_definitions/flatpak.rb:93"
            },
            "result": {
              "status": "passed",
              "duration": 64534549862
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:535"
            },
            "result": {
              "status": "passed",
              "duration": 6492406472
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 865518921
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 47035693
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/root_access_control.feature",
    "id": "root-access-control-enforcement",
    "keyword": "Feature",
    "name": "Root access control enforcement",
    "description": "  As a Tails user, I can perform administrative tasks only by using\n  the password I have optionally set up in the Welcome Screen",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "root-access-control-enforcement;i-can-perform-administrative-tasks-if-i-have-set-up-an-administration-password-in-the-welcome-screen",
        "keyword": "Scenario",
        "name": "I can perform administrative tasks if I have set up an administration password in the Welcome Screen",
        "description": "",
        "line": 6,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 16971
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 3790125
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in with an administration password",
            "line": 7,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 76362518324
            }
          },
          {
            "keyword": "And ",
            "name": "running a command as root with pkexec requires PolicyKit administrator privileges",
            "line": 8,
            "match": {
              "location": "features/step_definitions/root_access_control.rb:36"
            },
            "result": {
              "status": "passed",
              "duration": 62373071
            }
          },
          {
            "keyword": "Then ",
            "name": "I can run a command as root with sudo",
            "line": 9,
            "match": {
              "location": "features/step_definitions/root_access_control.rb:1"
            },
            "result": {
              "status": "passed",
              "duration": 78732946
            }
          },
          {
            "keyword": "Then ",
            "name": "I can run a command as root with pkexec",
            "line": 10,
            "match": {
              "location": "features/step_definitions/root_access_control.rb:48"
            },
            "result": {
              "status": "passed",
              "duration": 5807639954
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 1043434468
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 6611810
            }
          }
        ]
      },
      {
        "id": "root-access-control-enforcement;i-cannot-perform-administrative-tasks-unless-i-have-set-up-an-administration-password-in-the-welcome-screen",
        "keyword": "Scenario",
        "name": "I cannot perform administrative tasks unless I have set up an administration password in the Welcome Screen",
        "description": "",
        "line": 12,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 12483
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 3358199
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 13,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 34602703647
            }
          },
          {
            "keyword": "And ",
            "name": "running a command as root with pkexec requires PolicyKit administrator privileges",
            "line": 14,
            "match": {
              "location": "features/step_definitions/root_access_control.rb:36"
            },
            "result": {
              "status": "passed",
              "duration": 68683939
            }
          },
          {
            "keyword": "Then ",
            "name": "I cannot run a command as root with sudo and the standard passwords",
            "line": 15,
            "match": {
              "location": "features/step_definitions/root_access_control.rb:8"
            },
            "result": {
              "status": "passed",
              "duration": 149245757
            }
          },
          {
            "keyword": "And ",
            "name": "I cannot run a command as root with pkexec and the standard passwords",
            "line": 16,
            "match": {
              "location": "features/step_definitions/root_access_control.rb:56"
            },
            "result": {
              "status": "passed",
              "duration": 16796404797
            }
          },
          {
            "keyword": "Then ",
            "name": "I cannot login as root using su with the standard passwords",
            "line": 17,
            "match": {
              "location": "features/step_definitions/root_access_control.rb:18"
            },
            "result": {
              "status": "passed",
              "duration": 26927222191
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 625381675
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 22833
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/time_syncing.feature",
    "id": "time-syncing",
    "keyword": "Feature",
    "name": "Time syncing",
    "description": "  As a Tails user\n  I want Tor to work properly\n  And for that I need a reasonably accurate system clock",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      },
      {
        "name": "@check_tor_leaks",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "time-syncing;clock-with-host's-time",
        "keyword": "Scenario",
        "name": "Clock with host's time",
        "description": "",
        "line": 7,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 16410
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2714588
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 1812554
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6456522642
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 33996926
            }
          },
          {
            "keyword": "And ",
            "name": "I successfully configure Tor",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:680"
            },
            "result": {
              "status": "passed",
              "duration": 12178736661
            }
          },
          {
            "keyword": "Then ",
            "name": "the system clock is less than 5 minutes incorrect",
            "line": 11,
            "match": {
              "location": "features/step_definitions/time_syncing.rb:87"
            },
            "result": {
              "status": "passed",
              "duration": 37170399
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:535"
            },
            "result": {
              "status": "passed",
              "duration": 217102772
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 726756821
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 81481
            }
          }
        ]
      },
      {
        "id": "time-syncing;clock-with-host's-time-while-using-bridges",
        "keyword": "Scenario",
        "name": "Clock with host's time while using bridges",
        "description": "",
        "line": 13,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 11240
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2189377
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 1368103
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 14,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6392260237
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 15,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 31793763
            }
          },
          {
            "keyword": "And ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 16,
            "match": {
              "location": "features/step_definitions/tor.rb:409"
            },
            "result": {
              "status": "passed",
              "duration": 1785351376
            }
          },
          {
            "keyword": "And ",
            "name": "I configure some normal bridges in the Tor Connection Assistant",
            "line": 17,
            "match": {
              "location": "features/step_definitions/tor.rb:655"
            },
            "result": {
              "status": "passed",
              "duration": 10244938801
            }
          },
          {
            "keyword": "And ",
            "name": "I wait until Tor is ready",
            "line": 18,
            "match": {
              "location": "features/step_definitions/common_steps.rb:710"
            },
            "result": {
              "status": "passed",
              "duration": 2022895765
            }
          },
          {
            "keyword": "Then ",
            "name": "the system clock is less than 5 minutes incorrect",
            "line": 19,
            "match": {
              "location": "features/step_definitions/time_syncing.rb:87"
            },
            "result": {
              "status": "passed",
              "duration": 87269659
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:535"
            },
            "result": {
              "status": "passed",
              "duration": 205420338
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 1020358519
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 75561
            }
          }
        ]
      },
      {
        "id": "time-syncing;clock-is-one-day-in-the-future-while-using-obfs4-bridges",
        "keyword": "Scenario",
        "name": "Clock is one day in the future while using obfs4 bridges",
        "description": "",
        "line": 21,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 13947
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 1905127
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 1446751
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 22,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6262337988
            }
          },
          {
            "keyword": "When ",
            "name": "I bump the system time with \"+1 day\"",
            "line": 23,
            "match": {
              "location": "features/step_definitions/time_syncing.rb:20"
            },
            "result": {
              "status": "passed",
              "duration": 195842640
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 24,
            "match": {
              "location": "features/step_definitions/common_steps.rb:188"
            },
            "result": {
              "status": "passed",
              "duration": 2410940
            }
          },
          {
            "keyword": "And ",
            "name": "the network is plugged",
            "line": 25,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 42636912
            }
          },
          {
            "keyword": "And ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 26,
            "match": {
              "location": "features/step_definitions/tor.rb:409"
            },
            "result": {
              "status": "passed",
              "duration": 1795050130
            }
          },
          {
            "keyword": "And ",
            "name": "I configure some obfs4 bridges in the Tor Connection Assistant in easy mode",
            "line": 27,
            "match": {
              "location": "features/step_definitions/tor.rb:655"
            },
            "result": {
              "status": "passed",
              "duration": 10493639978
            }
          },
          {
            "keyword": "And ",
            "name": "I wait until Tor is ready",
            "line": 28,
            "match": {
              "location": "features/step_definitions/common_steps.rb:710"
            },
            "result": {
              "status": "passed",
              "duration": 1711734404
            }
          },
          {
            "keyword": "Then ",
            "name": "the system clock is less than 5 minutes incorrect",
            "line": 29,
            "match": {
              "location": "features/step_definitions/time_syncing.rb:87"
            },
            "result": {
              "status": "passed",
              "duration": 42026650
            }
          },
          {
            "keyword": "And ",
            "name": "all Internet traffic has only flowed through the configured bridges or connectivity check service",
            "line": 30,
            "output": [
              "Warning: these queries were allowed but not needed: [\"fedoraproject.org.\"]"
            ],
            "match": {
              "location": "features/step_definitions/tor.rb:1059"
            },
            "result": {
              "status": "passed",
              "duration": 341766437
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:535"
            },
            "result": {
              "status": "passed",
              "duration": 223095264
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 570149902
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 37840678
            }
          }
        ]
      },
      {
        "id": "time-syncing;the-system-time-is-not-synced-to-the-hardware-clock",
        "keyword": "Scenario",
        "name": "The system time is not synced to the hardware clock",
        "description": "",
        "line": 33,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 32
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 15680
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2101282
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 1710012
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 34,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6134773035
            }
          },
          {
            "keyword": "When ",
            "name": "I bump the system time with \"-15 days\"",
            "line": 35,
            "match": {
              "location": "features/step_definitions/time_syncing.rb:20"
            },
            "result": {
              "status": "passed",
              "duration": 166332360
            }
          },
          {
            "keyword": "And ",
            "name": "I warm reboot the computer",
            "line": 36,
            "match": {
              "location": "features/step_definitions/common_steps.rb:952"
            },
            "result": {
              "status": "passed",
              "duration": 9692350
            }
          },
          {
            "keyword": "And ",
            "name": "the computer reboots Tails",
            "line": 37,
            "match": {
              "location": "features/step_definitions/common_steps.rb:405"
            },
            "result": {
              "status": "passed",
              "duration": 41005006224
            }
          },
          {
            "keyword": "Then ",
            "name": "Tails' hardware clock is close to the host system's time",
            "line": 38,
            "match": {
              "location": "features/step_definitions/time_syncing.rb:149"
            },
            "result": {
              "status": "passed",
              "duration": 399507686
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:535"
            },
            "result": {
              "status": "passed",
              "duration": 207194916
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 713339573
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 30363622
            }
          }
        ]
      },
      {
        "id": "time-syncing;anti-test:-changes-to-the-hardware-clock-are-kept-when-rebooting",
        "keyword": "Scenario",
        "name": "Anti-test: Changes to the hardware clock are kept when rebooting",
        "description": "",
        "line": 41,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 40
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 15208
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 1645490
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 1856185
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 42,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6130270086
            }
          },
          {
            "keyword": "When ",
            "name": "I bump the hardware clock's time with \"-15 days\"",
            "line": 43,
            "match": {
              "location": "features/step_definitions/time_syncing.rb:20"
            },
            "result": {
              "status": "passed",
              "duration": 1910428510
            }
          },
          {
            "keyword": "And ",
            "name": "I warm reboot the computer",
            "line": 44,
            "match": {
              "location": "features/step_definitions/common_steps.rb:952"
            },
            "result": {
              "status": "passed",
              "duration": 4361449
            }
          },
          {
            "keyword": "And ",
            "name": "the computer reboots Tails",
            "line": 45,
            "match": {
              "location": "features/step_definitions/common_steps.rb:405"
            },
            "result": {
              "status": "passed",
              "duration": 41169459430
            }
          },
          {
            "keyword": "Then ",
            "name": "the hardware clock is still off by \"-15 days\"",
            "line": 46,
            "match": {
              "location": "features/step_definitions/time_syncing.rb:157"
            },
            "result": {
              "status": "passed",
              "duration": 815913651
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:535"
            },
            "result": {
              "status": "passed",
              "duration": 230174215
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 844974040
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 85580240
            }
          }
        ]
      },
      {
        "id": "time-syncing;the-clock-is-set-to-the-source-date-when-the-hardware-clock-is-way-in-the-past",
        "keyword": "Scenario",
        "name": "The clock is set to the source date when the hardware clock is way in the past",
        "description": "",
        "line": 48,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 13124
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 1427024
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 3770898
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 49,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 96794129
            }
          },
          {
            "keyword": "And ",
            "name": "the hardware clock is set to \"01 Jan 2000 12:34:56\"",
            "line": 50,
            "match": {
              "location": "features/step_definitions/common_steps.rb:176"
            },
            "result": {
              "status": "passed",
              "duration": 11265315
            }
          },
          {
            "keyword": "And ",
            "name": "I start the computer",
            "line": 51,
            "match": {
              "location": "features/step_definitions/common_steps.rb:205"
            },
            "result": {
              "status": "passed",
              "duration": 646545896
            }
          },
          {
            "keyword": "And ",
            "name": "the computer boots Tails",
            "line": 52,
            "match": {
              "location": "features/step_definitions/common_steps.rb:405"
            },
            "result": {
              "status": "passed",
              "duration": 29035703041
            }
          },
          {
            "keyword": "Then ",
            "name": "the system clock is just past Tails' source date",
            "line": 53,
            "match": {
              "location": "features/step_definitions/time_syncing.rb:116"
            },
            "result": {
              "status": "passed",
              "duration": 42418510
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:535"
            },
            "result": {
              "status": "passed",
              "duration": 205873274
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 596560949
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 5047992
            }
          }
        ]
      },
      {
        "id": "time-syncing;on-a-clock-with-host's-time,-tor-connection-works-even-if-time-sync-fails",
        "keyword": "Scenario",
        "name": "On a clock with host's time, Tor Connection works even if time sync fails",
        "description": "",
        "line": 55,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 12652
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 1332326
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 1454174
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 56,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6151712876
            }
          },
          {
            "keyword": "And ",
            "name": "I make sure time sync before Tor connects times out",
            "line": 57,
            "match": {
              "location": "features/step_definitions/time_syncing.rb:54"
            },
            "result": {
              "status": "passed",
              "duration": 1065451644
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 58,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 50942210
            }
          },
          {
            "keyword": "And ",
            "name": "I successfully configure Tor",
            "line": 59,
            "match": {
              "location": "features/step_definitions/common_steps.rb:680"
            },
            "result": {
              "status": "passed",
              "duration": 16844143250
            }
          },
          {
            "keyword": "Then ",
            "name": "the system clock is less than 5 minutes incorrect",
            "line": 60,
            "match": {
              "location": "features/step_definitions/time_syncing.rb:87"
            },
            "result": {
              "status": "passed",
              "duration": 19798251
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:535"
            },
            "result": {
              "status": "passed",
              "duration": 304379808
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 680746745
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 592194
            }
          }
        ]
      },
      {
        "id": "time-syncing;i-can-manually-recover-from-time-sync-failure-when-connecting-automatically-to-obfs4-bridges-with-a-clock-east-of-utc",
        "keyword": "Scenario",
        "name": "I can manually recover from time sync failure when connecting automatically to obfs4 bridges with a clock East of UTC",
        "description": "",
        "line": 62,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 13685
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2043484
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 1715151
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 63,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6411745493
            }
          },
          {
            "keyword": "When ",
            "name": "I bump the system time with \"+8 hours +15 minutes\"",
            "line": 64,
            "match": {
              "location": "features/step_definitions/time_syncing.rb:20"
            },
            "result": {
              "status": "passed",
              "duration": 142985831
            }
          },
          {
            "keyword": "And ",
            "name": "all notifications have disappeared",
            "line": 65,
            "match": {
              "location": "features/step_definitions/common_steps.rb:767"
            },
            "result": {
              "status": "passed",
              "duration": 3319550830
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 66,
            "match": {
              "location": "features/step_definitions/common_steps.rb:188"
            },
            "result": {
              "status": "passed",
              "duration": 2473487
            }
          },
          {
            "keyword": "And ",
            "name": "I make sure time sync before Tor connects fails",
            "line": 67,
            "match": {
              "location": "features/step_definitions/time_syncing.rb:54"
            },
            "result": {
              "status": "passed",
              "duration": 52433393
            }
          },
          {
            "keyword": "And ",
            "name": "the network is plugged",
            "line": 68,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 33503693
            }
          },
          {
            "keyword": "And ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 69,
            "match": {
              "location": "features/step_definitions/tor.rb:409"
            },
            "result": {
              "status": "passed",
              "duration": 1730550617
            }
          },
          {
            "keyword": "When ",
            "name": "I configure the default bridges in the Tor Connection Assistant in easy mode without connecting",
            "line": 70,
            "match": {
              "location": "features/step_definitions/tor.rb:655"
            },
            "result": {
              "status": "passed",
              "duration": 4598765385
            }
          },
          {
            "keyword": "And ",
            "name": "I click \"Connect to Tor\"",
            "line": 71,
            "match": {
              "location": "features/step_definitions/tor.rb:961"
            },
            "result": {
              "status": "passed",
              "duration": 1251851315
            }
          },
          {
            "keyword": "And ",
            "name": "the Tor Connection Assistant fails to connect to Tor",
            "line": 72,
            "match": {
              "location": "features/step_definitions/tor.rb:462"
            },
            "result": {
              "status": "passed",
              "duration": 15688051959
            }
          },
          {
            "keyword": "Then ",
            "name": "I set the time zone in Tor Connection to \"Asia/Shanghai\"",
            "line": 74,
            "comments": [
              {
                "value": "# The \"Fix Clock\" button allows users to recover from this bug",
                "line": 73
              }
            ],
            "match": {
              "location": "features/step_definitions/tor.rb:970"
            },
            "result": {
              "status": "passed",
              "duration": 15008736862
            }
          },
          {
            "keyword": "Then ",
            "name": "the system clock is less than 20 minutes incorrect",
            "line": 75,
            "match": {
              "location": "features/step_definitions/time_syncing.rb:87"
            },
            "result": {
              "status": "passed",
              "duration": 312911763
            }
          },
          {
            "keyword": "When ",
            "name": "I click \"Connect to Tor\"",
            "line": 76,
            "match": {
              "location": "features/step_definitions/tor.rb:961"
            },
            "result": {
              "status": "passed",
              "duration": 1086841374
            }
          },
          {
            "keyword": "Then ",
            "name": "I wait until Tor is ready",
            "line": 77,
            "match": {
              "location": "features/step_definitions/common_steps.rb:710"
            },
            "result": {
              "status": "passed",
              "duration": 6907095661
            }
          },
          {
            "keyword": "And ",
            "name": "all Internet traffic has only flowed through the default bridges or fake connectivity check service",
            "line": 78,
            "match": {
              "location": "features/step_definitions/tor.rb:1059"
            },
            "result": {
              "status": "passed",
              "duration": 303429996
            }
          },
          {
            "keyword": "And ",
            "name": "the system clock is less than 5 minutes incorrect",
            "line": 80,
            "comments": [
              {
                "value": "# check that htpdate has done its job",
                "line": 79
              }
            ],
            "match": {
              "location": "features/step_definitions/time_syncing.rb:87"
            },
            "result": {
              "status": "passed",
              "duration": 39438689
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:535"
            },
            "result": {
              "status": "passed",
              "duration": 200996883
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 535781059
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 40478169
            }
          }
        ]
      },
      {
        "id": "time-syncing;i-can-connect-to-obfs4-bridges-having-a-clock-east-of-utc-while-hiding-that-i-am-using-tor",
        "keyword": "Scenario",
        "name": "I can connect to obfs4 bridges having a clock East of UTC while hiding that I am using Tor",
        "description": "",
        "line": 82,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 12274
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 1827249
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 1397259
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 83,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6183922751
            }
          },
          {
            "keyword": "When ",
            "name": "I bump the system time with \"+8 hours +15 minutes\"",
            "line": 84,
            "match": {
              "location": "features/step_definitions/time_syncing.rb:20"
            },
            "result": {
              "status": "passed",
              "duration": 136455713
            }
          },
          {
            "keyword": "And ",
            "name": "all notifications have disappeared",
            "line": 85,
            "match": {
              "location": "features/step_definitions/common_steps.rb:767"
            },
            "result": {
              "status": "passed",
              "duration": 3752599190
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 86,
            "match": {
              "location": "features/step_definitions/common_steps.rb:188"
            },
            "result": {
              "status": "passed",
              "duration": 2564918
            }
          },
          {
            "keyword": "And ",
            "name": "the network is plugged",
            "line": 87,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 39080119
            }
          },
          {
            "keyword": "And ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 88,
            "match": {
              "location": "features/step_definitions/tor.rb:409"
            },
            "result": {
              "status": "passed",
              "duration": 1698258230
            }
          },
          {
            "keyword": "And ",
            "name": "I configure some obfs4 bridges in the Tor Connection Assistant in hide mode without connecting",
            "line": 90,
            "comments": [
              {
                "value": "# Anti-test: Users east of UTC can't connect to obfs4 bridges",
                "line": 89
              }
            ],
            "match": {
              "location": "features/step_definitions/tor.rb:655"
            },
            "result": {
              "status": "passed",
              "duration": 4016420477
            }
          },
          {
            "keyword": "And ",
            "name": "I click \"Connect to Tor\"",
            "line": 91,
            "match": {
              "location": "features/step_definitions/tor.rb:961"
            },
            "result": {
              "status": "passed",
              "duration": 1161814716
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant reports that it failed to connect",
            "line": 92,
            "match": {
              "location": "features/step_definitions/tor.rb:914"
            },
            "result": {
              "status": "passed",
              "duration": 11475803016
            }
          },
          {
            "keyword": "When ",
            "name": "I set the time zone in Tor Connection to \"Asia/Shanghai\"",
            "line": 94,
            "comments": [
              {
                "value": "# The \"Fix Clock\" button allows users to recover from this bug",
                "line": 93
              }
            ],
            "match": {
              "location": "features/step_definitions/tor.rb:970"
            },
            "result": {
              "status": "passed",
              "duration": 14715915665
            }
          },
          {
            "keyword": "Then ",
            "name": "the system clock is less than 20 minutes incorrect",
            "line": 95,
            "match": {
              "location": "features/step_definitions/time_syncing.rb:87"
            },
            "result": {
              "status": "passed",
              "duration": 333030412
            }
          },
          {
            "keyword": "And ",
            "name": "the displayed clock is less than 20 minutes incorrect in \"+08:00\"",
            "line": 97,
            "comments": [
              {
                "value": "# \"Asia/Shanghai\" is UTC+08:00 all year long (no DST)",
                "line": 96
              }
            ],
            "match": {
              "location": "features/step_definitions/time_syncing.rb:105"
            },
            "result": {
              "status": "passed",
              "duration": 282528024
            }
          },
          {
            "keyword": "When ",
            "name": "I click \"Connect to Tor\"",
            "line": 98,
            "match": {
              "location": "features/step_definitions/tor.rb:961"
            },
            "result": {
              "status": "passed",
              "duration": 1084341573
            }
          },
          {
            "keyword": "Then ",
            "name": "I wait until Tor is ready",
            "line": 99,
            "match": {
              "location": "features/step_definitions/common_steps.rb:710"
            },
            "result": {
              "status": "passed",
              "duration": 5790056807
            }
          },
          {
            "keyword": "And ",
            "name": "all Internet traffic has only flowed through the configured bridges",
            "line": 100,
            "match": {
              "location": "features/step_definitions/tor.rb:1059"
            },
            "result": {
              "status": "passed",
              "duration": 309099750
            }
          },
          {
            "keyword": "And ",
            "name": "the system clock is less than 5 minutes incorrect",
            "line": 102,
            "comments": [
              {
                "value": "# check that htpdate has done its job",
                "line": 101
              }
            ],
            "match": {
              "location": "features/step_definitions/time_syncing.rb:87"
            },
            "result": {
              "status": "passed",
              "duration": 34592061
            }
          },
          {
            "keyword": "And ",
            "name": "the displayed clock is less than 5 minutes incorrect in \"+08:00\"",
            "line": 103,
            "match": {
              "location": "features/step_definitions/time_syncing.rb:105"
            },
            "result": {
              "status": "passed",
              "duration": 282590374
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:535"
            },
            "result": {
              "status": "passed",
              "duration": 203401106
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 628227407
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 65899453
            }
          }
        ]
      },
      {
        "id": "time-syncing;time-sync-before-tor-connects-sets-the-same-headers-as-the-networkmanager-connectivity-check",
        "keyword": "Scenario",
        "name": "Time sync before Tor connects sets the same headers as the NetworkManager connectivity check",
        "description": "",
        "line": 105,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 9497
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2774738
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 2487964
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 106,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6203978978
            }
          },
          {
            "keyword": "And ",
            "name": "I make sure time sync before Tor connects uses a fake connectivity check service",
            "line": 107,
            "match": {
              "location": "features/step_definitions/time_syncing.rb:54"
            },
            "result": {
              "status": "passed",
              "duration": 1060767965
            }
          },
          {
            "keyword": "And ",
            "name": "the network is plugged",
            "line": 108,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 38024097
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 109,
            "match": {
              "location": "features/step_definitions/common_steps.rb:655"
            },
            "result": {
              "status": "passed",
              "duration": 6706428213
            }
          },
          {
            "keyword": "Then ",
            "name": "the fake connectivity check service has received a new HTTP request",
            "line": 110,
            "match": {
              "location": "features/step_definitions/time_syncing.rb:207"
            },
            "result": {
              "status": "passed",
              "duration": 156061
            }
          },
          {
            "keyword": "When ",
            "name": "I make NetworkManager perform a connectivity check",
            "line": 111,
            "match": {
              "location": "features/step_definitions/time_syncing.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 423218350
            }
          },
          {
            "keyword": "Then ",
            "name": "the fake connectivity check service has received a new HTTP request",
            "line": 112,
            "match": {
              "location": "features/step_definitions/time_syncing.rb:207"
            },
            "result": {
              "status": "passed",
              "duration": 2261180
            }
          },
          {
            "keyword": "And ",
            "name": "the HTTP requests received by the fake connectivity check service are identical",
            "line": 113,
            "match": {
              "location": "features/step_definitions/time_syncing.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 8444191
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:535"
            },
            "result": {
              "status": "passed",
              "duration": 247538112
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 1119935536
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 681041
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/tor_bridges.feature",
    "id": "using-tor-bridges-and-pluggable-transports",
    "keyword": "Feature",
    "name": "Using Tor bridges and pluggable transports",
    "description": "  As a Tails user\n  I want to circumvent censorship of Tor by using Tor bridges and pluggable transports\n  And avoid connecting directly to the Tor Network",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 12143
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 1928710
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6173359009
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:188"
            },
            "result": {
              "status": "passed",
              "duration": 2404438
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 35272021
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 11,
            "match": {
              "location": "features/step_definitions/tor.rb:409"
            },
            "result": {
              "status": "passed",
              "duration": 1806469104
            }
          }
        ]
      },
      {
        "id": "using-tor-bridges-and-pluggable-transports;using-normal-bridges",
        "keyword": "Scenario",
        "name": "Using normal bridges",
        "description": "",
        "line": 13,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "When ",
            "name": "I configure some normal bridges in the Tor Connection Assistant",
            "line": 14,
            "match": {
              "location": "features/step_definitions/tor.rb:655"
            },
            "result": {
              "status": "passed",
              "duration": 12106911244
            }
          },
          {
            "keyword": "Then ",
            "name": "I wait until Tor is ready",
            "line": 15,
            "match": {
              "location": "features/step_definitions/common_steps.rb:710"
            },
            "result": {
              "status": "passed",
              "duration": 821720000
            }
          },
          {
            "keyword": "And ",
            "name": "tca.conf includes the configured bridges",
            "line": 16,
            "match": {
              "location": "features/step_definitions/tor.rb:1200"
            },
            "result": {
              "status": "passed",
              "duration": 4143512
            }
          },
          {
            "keyword": "And ",
            "name": "available upgrades have been checked",
            "line": 17,
            "match": {
              "location": "features/step_definitions/common_steps.rb:763"
            },
            "result": {
              "status": "passed",
              "duration": 24286219
            }
          },
          {
            "keyword": "And ",
            "name": "all Internet traffic has only flowed through the configured bridges or connectivity check service",
            "line": 18,
            "output": [
              "Warning: these queries were allowed but not needed: [\"fedoraproject.org.\"]"
            ],
            "match": {
              "location": "features/step_definitions/tor.rb:1059"
            },
            "result": {
              "status": "passed",
              "duration": 308507205
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 904597813
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 48190753
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 37459
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 6602604
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6151116749
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:188"
            },
            "result": {
              "status": "passed",
              "duration": 3048159
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 45657523
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 11,
            "match": {
              "location": "features/step_definitions/tor.rb:409"
            },
            "result": {
              "status": "passed",
              "duration": 1748702073
            }
          }
        ]
      },
      {
        "id": "using-tor-bridges-and-pluggable-transports;using-obfs4-pluggable-transports",
        "keyword": "Scenario",
        "name": "Using obfs4 pluggable transports",
        "description": "",
        "line": 20,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "When ",
            "name": "I configure some obfs4 bridges in the Tor Connection Assistant in hide mode",
            "line": 21,
            "match": {
              "location": "features/step_definitions/tor.rb:655"
            },
            "result": {
              "status": "passed",
              "duration": 9872864744
            }
          },
          {
            "keyword": "Then ",
            "name": "I wait until Tor is ready",
            "line": 22,
            "match": {
              "location": "features/step_definitions/common_steps.rb:710"
            },
            "result": {
              "status": "passed",
              "duration": 816675647
            }
          },
          {
            "keyword": "And ",
            "name": "tca.conf includes the configured bridges",
            "line": 23,
            "match": {
              "location": "features/step_definitions/tor.rb:1200"
            },
            "result": {
              "status": "passed",
              "duration": 4488208
            }
          },
          {
            "keyword": "And ",
            "name": "available upgrades have been checked",
            "line": 24,
            "match": {
              "location": "features/step_definitions/common_steps.rb:763"
            },
            "result": {
              "status": "passed",
              "duration": 29022956
            }
          },
          {
            "keyword": "And ",
            "name": "all Internet traffic has only flowed through the configured bridges",
            "line": 25,
            "match": {
              "location": "features/step_definitions/tor.rb:1059"
            },
            "result": {
              "status": "passed",
              "duration": 309408011
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 729018476
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 65188193
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 16020
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2081404
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 17871494118
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:188"
            },
            "result": {
              "status": "passed",
              "duration": 6016759
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 58496215
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 11,
            "match": {
              "location": "features/step_definitions/tor.rb:409"
            },
            "result": {
              "status": "passed",
              "duration": 1796058419
            }
          }
        ]
      },
      {
        "id": "using-tor-bridges-and-pluggable-transports;using-obfs4-pluggable-transports-from-a-qr-code",
        "keyword": "Scenario",
        "name": "Using obfs4 pluggable transports from a QR code",
        "description": "",
        "line": 27,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "When ",
            "name": "I configure some obfs4 bridges from a QR code in the Tor Connection Assistant in hide mode",
            "line": 28,
            "match": {
              "location": "features/step_definitions/tor.rb:655"
            },
            "result": {
              "status": "passed",
              "duration": 28346394702
            }
          },
          {
            "keyword": "Then ",
            "name": "I wait until Tor is ready",
            "line": 29,
            "match": {
              "location": "features/step_definitions/common_steps.rb:710"
            },
            "result": {
              "status": "passed",
              "duration": 957784461
            }
          },
          {
            "keyword": "And ",
            "name": "tca.conf includes the configured bridges",
            "line": 30,
            "match": {
              "location": "features/step_definitions/tor.rb:1200"
            },
            "result": {
              "status": "passed",
              "duration": 6124049
            }
          },
          {
            "keyword": "And ",
            "name": "available upgrades have been checked",
            "line": 31,
            "match": {
              "location": "features/step_definitions/common_steps.rb:763"
            },
            "result": {
              "status": "passed",
              "duration": 39838373
            }
          },
          {
            "keyword": "And ",
            "name": "all Internet traffic has only flowed through the configured bridges",
            "line": 32,
            "match": {
              "location": "features/step_definitions/tor.rb:1059"
            },
            "result": {
              "status": "passed",
              "duration": 297211626
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 736503208
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 57006676
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 16150
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2201548
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6165373214
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:188"
            },
            "result": {
              "status": "passed",
              "duration": 2407433
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 28245297
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 11,
            "match": {
              "location": "features/step_definitions/tor.rb:409"
            },
            "result": {
              "status": "passed",
              "duration": 1702712613
            }
          }
        ]
      },
      {
        "id": "using-tor-bridges-and-pluggable-transports;default-tor-bridges",
        "keyword": "Scenario",
        "name": "Default Tor bridges",
        "description": "",
        "line": 35,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@supports_real_tor",
            "line": 34
          }
        ],
        "steps": [
          {
            "keyword": "When ",
            "name": "I configure the default bridges in the Tor Connection Assistant",
            "line": 36,
            "match": {
              "location": "features/step_definitions/tor.rb:655"
            },
            "result": {
              "status": "passed",
              "duration": 10389580902
            }
          },
          {
            "keyword": "Then ",
            "name": "I wait until Tor is ready",
            "line": 37,
            "match": {
              "location": "features/step_definitions/common_steps.rb:710"
            },
            "result": {
              "status": "passed",
              "duration": 1048501215
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is configured to use the default bridges",
            "line": 38,
            "match": {
              "location": "features/step_definitions/tor.rb:1159"
            },
            "result": {
              "status": "passed",
              "duration": 266819727
            }
          },
          {
            "keyword": "And ",
            "name": "tca.conf includes no bridge",
            "line": 39,
            "match": {
              "location": "features/step_definitions/tor.rb:1196"
            },
            "result": {
              "status": "passed",
              "duration": 4752911
            }
          },
          {
            "keyword": "And ",
            "name": "available upgrades have been checked",
            "line": 40,
            "match": {
              "location": "features/step_definitions/common_steps.rb:763"
            },
            "result": {
              "status": "passed",
              "duration": 52011821
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is configured to use the default bridges",
            "line": 41,
            "match": {
              "location": "features/step_definitions/tor.rb:1159"
            },
            "result": {
              "status": "passed",
              "duration": 240101512
            }
          },
          {
            "keyword": "And ",
            "name": "all Internet traffic has only flowed through the default bridges or connectivity check service",
            "line": 42,
            "output": [
              "Warning: these queries were allowed but not needed: [\"fedoraproject.org.\"]"
            ],
            "match": {
              "location": "features/step_definitions/tor.rb:1059"
            },
            "result": {
              "status": "passed",
              "duration": 314795275
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 923130354
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 39508647
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 17843
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2128011
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6257441959
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:188"
            },
            "result": {
              "status": "passed",
              "duration": 2641631
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 24280485
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 11,
            "match": {
              "location": "features/step_definitions/tor.rb:409"
            },
            "result": {
              "status": "passed",
              "duration": 1917045055
            }
          }
        ]
      },
      {
        "id": "using-tor-bridges-and-pluggable-transports;fall-back-to-default-bridges-if-failing-to-connect-directly-to-the-tor-network",
        "keyword": "Scenario",
        "name": "Fall back to default bridges if failing to connect directly to the Tor network",
        "description": "",
        "line": 44,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "the Tor network is blocked",
            "line": 45,
            "match": {
              "location": "features/step_definitions/tor.rb:1120"
            },
            "result": {
              "status": "passed",
              "duration": 974355527
            }
          },
          {
            "keyword": "When ",
            "name": "I configure a direct connection in the Tor Connection Assistant",
            "line": 46,
            "match": {
              "location": "features/step_definitions/tor.rb:552"
            },
            "result": {
              "status": "passed",
              "duration": 19600677026
            }
          },
          {
            "keyword": "Then ",
            "name": "I wait until Tor is ready",
            "line": 47,
            "match": {
              "location": "features/step_definitions/common_steps.rb:710"
            },
            "result": {
              "status": "passed",
              "duration": 2838279071
            }
          },
          {
            "keyword": "And ",
            "name": "tca.conf includes no bridge",
            "line": 48,
            "match": {
              "location": "features/step_definitions/tor.rb:1196"
            },
            "result": {
              "status": "passed",
              "duration": 6531590
            }
          },
          {
            "keyword": "And ",
            "name": "available upgrades have been checked",
            "line": 49,
            "match": {
              "location": "features/step_definitions/common_steps.rb:763"
            },
            "result": {
              "status": "passed",
              "duration": 33144508
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is configured to use the default bridges",
            "line": 50,
            "match": {
              "location": "features/step_definitions/tor.rb:1159"
            },
            "result": {
              "status": "passed",
              "duration": 296702028
            }
          },
          {
            "keyword": "And ",
            "name": "all Internet traffic has only flowed through the default bridges or connectivity check service",
            "line": 51,
            "output": [
              "Warning: these queries were allowed but not needed: [\"fedoraproject.org.\"]"
            ],
            "match": {
              "location": "features/step_definitions/tor.rb:1059"
            },
            "result": {
              "status": "passed",
              "duration": 325240469
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 817637003
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 53328137
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 14688
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 1996476
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6142648977
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:188"
            },
            "result": {
              "status": "passed",
              "duration": 2362579
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 36247079
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 11,
            "match": {
              "location": "features/step_definitions/tor.rb:409"
            },
            "result": {
              "status": "passed",
              "duration": 1798677575
            }
          }
        ]
      },
      {
        "id": "using-tor-bridges-and-pluggable-transports;tca-can-reconnect-after-a-connection-failure",
        "keyword": "Scenario",
        "name": "TCA can reconnect after a connection failure",
        "description": "",
        "line": 53,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "the Tor network and default bridges are blocked",
            "line": 54,
            "match": {
              "location": "features/step_definitions/tor.rb:1120"
            },
            "result": {
              "status": "passed",
              "duration": 1170847444
            }
          },
          {
            "keyword": "When ",
            "name": "I unsuccessfully configure a direct connection in the Tor Connection Assistant",
            "line": 55,
            "match": {
              "location": "features/step_definitions/tor.rb:789"
            },
            "result": {
              "status": "passed",
              "duration": 28812120013
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant reports that it failed to connect",
            "line": 56,
            "match": {
              "location": "features/step_definitions/tor.rb:914"
            },
            "result": {
              "status": "passed",
              "duration": 63564980
            }
          },
          {
            "keyword": "And ",
            "name": "tca.conf is empty",
            "line": 57,
            "match": {
              "location": "features/step_definitions/tor.rb:1188"
            },
            "result": {
              "status": "passed",
              "duration": 277129198
            }
          },
          {
            "keyword": "Given ",
            "name": "the Tor network and default bridges are unblocked",
            "line": 58,
            "match": {
              "location": "features/step_definitions/tor.rb:1120"
            },
            "result": {
              "status": "passed",
              "duration": 752422088
            }
          },
          {
            "keyword": "When ",
            "name": "I retry connecting to Tor",
            "line": 59,
            "match": {
              "location": "features/step_definitions/tor.rb:961"
            },
            "result": {
              "status": "passed",
              "duration": 1127644438
            }
          },
          {
            "keyword": "Then ",
            "name": "I wait until Tor is ready",
            "line": 60,
            "match": {
              "location": "features/step_definitions/common_steps.rb:710"
            },
            "result": {
              "status": "passed",
              "duration": 4961399605
            }
          },
          {
            "keyword": "And ",
            "name": "tca.conf includes no bridge",
            "line": 61,
            "match": {
              "location": "features/step_definitions/tor.rb:1196"
            },
            "result": {
              "status": "passed",
              "duration": 5650917
            }
          },
          {
            "keyword": "And ",
            "name": "available upgrades have been checked",
            "line": 62,
            "match": {
              "location": "features/step_definitions/common_steps.rb:763"
            },
            "result": {
              "status": "passed",
              "duration": 1098355144
            }
          },
          {
            "keyword": "And ",
            "name": "all Internet traffic has only flowed through Tor or connectivity check service",
            "line": 63,
            "output": [
              "Warning: these queries were allowed but not needed: [\"fedoraproject.org.\"]"
            ],
            "match": {
              "location": "features/step_definitions/tor.rb:1059"
            },
            "result": {
              "status": "passed",
              "duration": 371409052
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 553935381
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 54745832
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 12684
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2013527
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6208071623
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:188"
            },
            "result": {
              "status": "passed",
              "duration": 2508532
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 35960214
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 11,
            "match": {
              "location": "features/step_definitions/tor.rb:409"
            },
            "result": {
              "status": "passed",
              "duration": 1852998326
            }
          }
        ]
      },
      {
        "id": "using-tor-bridges-and-pluggable-transports;normal-bridges-are-not-allowed-in-\"hide\"-mode",
        "keyword": "Scenario",
        "name": "Normal bridges are not allowed in \"Hide\" mode",
        "description": "",
        "line": 66,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@supports_real_tor",
            "line": 65
          }
        ],
        "steps": [
          {
            "keyword": "When ",
            "name": "I try to configure some normal bridges in the Tor Connection Assistant in hide mode",
            "line": 67,
            "match": {
              "location": "features/step_definitions/tor.rb:801"
            },
            "result": {
              "status": "passed",
              "duration": 3811182440
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant complains that normal bridges are not allowed",
            "line": 68,
            "match": {
              "location": "features/step_definitions/tor.rb:939"
            },
            "result": {
              "status": "passed",
              "duration": 118925751
            }
          },
          {
            "keyword": "And ",
            "name": "I cannot click the \"Connect to Tor\" button",
            "line": 69,
            "match": {
              "location": "features/step_definitions/tor.rb:965"
            },
            "result": {
              "status": "passed",
              "duration": 113000033
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 504823214
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 51802700
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 27031
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 6241399
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6133376741
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:188"
            },
            "result": {
              "status": "passed",
              "duration": 2963170
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 36713970
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 11,
            "match": {
              "location": "features/step_definitions/tor.rb:409"
            },
            "result": {
              "status": "passed",
              "duration": 1847679861
            }
          }
        ]
      },
      {
        "id": "using-tor-bridges-and-pluggable-transports;the-same-tor-configuration-is-applied-when-the-network-is-reconnected",
        "keyword": "Scenario",
        "name": "The same Tor configuration is applied when the network is reconnected",
        "description": "",
        "line": 71,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I configure a direct connection in the Tor Connection Assistant",
            "line": 72,
            "match": {
              "location": "features/step_definitions/tor.rb:552"
            },
            "result": {
              "status": "passed",
              "duration": 6854510170
            }
          },
          {
            "keyword": "And ",
            "name": "I wait until Tor is ready",
            "line": 73,
            "match": {
              "location": "features/step_definitions/common_steps.rb:710"
            },
            "result": {
              "status": "passed",
              "duration": 573509103
            }
          },
          {
            "keyword": "When ",
            "name": "I disconnect the network through GNOME",
            "line": 74,
            "match": {
              "location": "features/step_definitions/common_steps.rb:158"
            },
            "result": {
              "status": "passed",
              "duration": 10375199456
            }
          },
          {
            "keyword": "And ",
            "name": "I connect the network through GNOME",
            "line": 75,
            "match": {
              "location": "features/step_definitions/common_steps.rb:158"
            },
            "result": {
              "status": "passed",
              "duration": 9558648638
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 76,
            "match": {
              "location": "features/step_definitions/tor.rb:409"
            },
            "result": {
              "status": "passed",
              "duration": 79236085
            }
          },
          {
            "keyword": "And ",
            "name": "the Tor Connection Assistant connects to Tor",
            "line": 77,
            "match": {
              "location": "features/step_definitions/tor.rb:430"
            },
            "result": {
              "status": "passed",
              "duration": 145099474
            }
          },
          {
            "keyword": "And ",
            "name": "I wait until Tor is ready",
            "line": 78,
            "match": {
              "location": "features/step_definitions/common_steps.rb:710"
            },
            "result": {
              "status": "passed",
              "duration": 738895360
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is using the same configuration as before",
            "line": 79,
            "match": {
              "location": "features/step_definitions/tor.rb:1178"
            },
            "result": {
              "status": "passed",
              "duration": 44824
            }
          },
          {
            "keyword": "And ",
            "name": "available upgrades have been checked",
            "line": 80,
            "match": {
              "location": "features/step_definitions/common_steps.rb:763"
            },
            "result": {
              "status": "passed",
              "duration": 28616596
            }
          },
          {
            "keyword": "And ",
            "name": "all Internet traffic has only flowed through Tor or connectivity check service",
            "line": 81,
            "output": [
              "Warning: these queries were allowed but not needed: [\"fedoraproject.org.\"]"
            ],
            "match": {
              "location": "features/step_definitions/tor.rb:1059"
            },
            "result": {
              "status": "passed",
              "duration": 378614827
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 906214695
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 48854927
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 13206
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 1946924
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 18026587585
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:188"
            },
            "result": {
              "status": "passed",
              "duration": 2999377
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 39641623
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 11,
            "match": {
              "location": "features/step_definitions/tor.rb:409"
            },
            "result": {
              "status": "passed",
              "duration": 1857828492
            }
          }
        ]
      },
      {
        "id": "using-tor-bridges-and-pluggable-transports;reconnecting-from-an-unblocked-network-to-a-blocked-network-displays-an-error",
        "keyword": "Scenario",
        "name": "Reconnecting from an unblocked network to a blocked network displays an error",
        "description": "",
        "line": 83,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I configure a direct connection in the Tor Connection Assistant",
            "line": 84,
            "match": {
              "location": "features/step_definitions/tor.rb:552"
            },
            "result": {
              "status": "passed",
              "duration": 5432560956
            }
          },
          {
            "keyword": "And ",
            "name": "I wait until Tor is ready",
            "line": 85,
            "match": {
              "location": "features/step_definitions/common_steps.rb:710"
            },
            "result": {
              "status": "passed",
              "duration": 543620993
            }
          },
          {
            "keyword": "And ",
            "name": "I disconnect the network through GNOME",
            "line": 86,
            "match": {
              "location": "features/step_definitions/common_steps.rb:158"
            },
            "result": {
              "status": "passed",
              "duration": 10178127109
            }
          },
          {
            "keyword": "And ",
            "name": "the Tor network and default bridges are blocked",
            "line": 87,
            "match": {
              "location": "features/step_definitions/tor.rb:1120"
            },
            "result": {
              "status": "passed",
              "duration": 1150480140
            }
          },
          {
            "keyword": "When ",
            "name": "I connect the network through GNOME",
            "line": 88,
            "match": {
              "location": "features/step_definitions/common_steps.rb:158"
            },
            "result": {
              "status": "passed",
              "duration": 9655706023
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant reports that it failed to connect",
            "line": 89,
            "match": {
              "location": "features/step_definitions/tor.rb:914"
            },
            "result": {
              "status": "passed",
              "duration": 22800684130
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 1090544789
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 54081752
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 11542
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2166524
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6453216320
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:188"
            },
            "result": {
              "status": "passed",
              "duration": 2701862
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 45355296
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 11,
            "match": {
              "location": "features/step_definitions/tor.rb:409"
            },
            "result": {
              "status": "passed",
              "duration": 1857468550
            }
          }
        ]
      },
      {
        "id": "using-tor-bridges-and-pluggable-transports;tor-connection-honors-my-choice-of-using-default-bridges-on-retry,-too",
        "keyword": "Scenario",
        "name": "Tor Connection honors my choice of using default bridges on retry, too",
        "description": "",
        "line": 91,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "the Tor network and default bridges are blocked",
            "line": 92,
            "match": {
              "location": "features/step_definitions/tor.rb:1120"
            },
            "result": {
              "status": "passed",
              "duration": 916287146
            }
          },
          {
            "keyword": "When ",
            "name": "I unsuccessfully configure some default bridges in the Tor Connection Assistant",
            "line": 93,
            "match": {
              "location": "features/step_definitions/tor.rb:789"
            },
            "result": {
              "status": "passed",
              "duration": 21335690620
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant reports that it failed to connect",
            "line": 94,
            "match": {
              "location": "features/step_definitions/tor.rb:914"
            },
            "result": {
              "status": "passed",
              "duration": 77240493
            }
          },
          {
            "keyword": "Given ",
            "name": "the Tor network and default bridges are unblocked",
            "line": 95,
            "match": {
              "location": "features/step_definitions/tor.rb:1120"
            },
            "result": {
              "status": "passed",
              "duration": 956722000
            }
          },
          {
            "keyword": "When ",
            "name": "I retry connecting to Tor",
            "line": 96,
            "match": {
              "location": "features/step_definitions/tor.rb:961"
            },
            "result": {
              "status": "passed",
              "duration": 1119042545
            }
          },
          {
            "keyword": "Then ",
            "name": "I wait until Tor is ready",
            "line": 97,
            "match": {
              "location": "features/step_definitions/common_steps.rb:710"
            },
            "result": {
              "status": "passed",
              "duration": 6065870539
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is configured to use the default bridges",
            "line": 98,
            "match": {
              "location": "features/step_definitions/tor.rb:1159"
            },
            "result": {
              "status": "passed",
              "duration": 281381115
            }
          },
          {
            "keyword": "And ",
            "name": "all Internet traffic has only flowed through the default bridges or connectivity check service",
            "line": 99,
            "output": [
              "Warning: these queries were allowed but not needed: [\"fedoraproject.org.\"]"
            ],
            "match": {
              "location": "features/step_definitions/tor.rb:1059"
            },
            "result": {
              "status": "passed",
              "duration": 322190346
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 750237602
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 51322141
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 17684
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2484728
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6308629326
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:188"
            },
            "result": {
              "status": "passed",
              "duration": 2992635
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 36996817
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 11,
            "match": {
              "location": "features/step_definitions/tor.rb:409"
            },
            "result": {
              "status": "passed",
              "duration": 1836411483
            }
          }
        ]
      },
      {
        "id": "using-tor-bridges-and-pluggable-transports;asking-for-mocked-bridge-settings-with-automatic-region-detection-in-tor-connection",
        "keyword": "Scenario",
        "name": "Asking for mocked bridge settings with automatic region-detection in Tor Connection",
        "description": "",
        "line": 101,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "the Moat distributor responds with the default bridges",
            "line": 102,
            "match": {
              "location": "features/step_definitions/tor.rb:823"
            },
            "result": {
              "status": "passed",
              "duration": 63362342
            }
          },
          {
            "keyword": "When ",
            "name": "I configure Tor Connection to ask for bridge settings based on my location",
            "line": 103,
            "match": {
              "location": "features/step_definitions/tor.rb:855"
            },
            "result": {
              "status": "passed",
              "duration": 5684773237
            }
          },
          {
            "keyword": "And ",
            "name": "I wait until Tor is ready",
            "line": 104,
            "match": {
              "location": "features/step_definitions/common_steps.rb:710"
            },
            "result": {
              "status": "passed",
              "duration": 5964431007
            }
          },
          {
            "keyword": "And ",
            "name": "available upgrades have been checked",
            "line": 105,
            "match": {
              "location": "features/step_definitions/common_steps.rb:763"
            },
            "result": {
              "status": "passed",
              "duration": 83521233
            }
          },
          {
            "keyword": "Then ",
            "name": "Tor is configured to use the default bridges",
            "line": 106,
            "match": {
              "location": "features/step_definitions/tor.rb:1159"
            },
            "result": {
              "status": "passed",
              "duration": 273948190
            }
          },
          {
            "keyword": "And ",
            "name": "all Internet traffic has only flowed through the default bridges or connectivity check service",
            "line": 107,
            "output": [
              "Warning: these queries were allowed but not needed: [\"fedoraproject.org.\"]"
            ],
            "match": {
              "location": "features/step_definitions/tor.rb:1059"
            },
            "result": {
              "status": "passed",
              "duration": 349833972
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 553037283
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 68426261
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 13294
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2318147
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6263031535
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:188"
            },
            "result": {
              "status": "passed",
              "duration": 2993186
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 41274688
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 11,
            "match": {
              "location": "features/step_definitions/tor.rb:409"
            },
            "result": {
              "status": "passed",
              "duration": 1817570008
            }
          }
        ]
      },
      {
        "id": "using-tor-bridges-and-pluggable-transports;asking-for-bridge-settings-but-receiving-a-mocked-api-error-in-tor-connection",
        "keyword": "Scenario",
        "name": "Asking for bridge settings but receiving a mocked API error in Tor Connection",
        "description": "",
        "line": 109,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "the Moat distributor responds with an API error",
            "line": 110,
            "match": {
              "location": "features/step_definitions/tor.rb:843"
            },
            "result": {
              "status": "passed",
              "duration": 13717390
            }
          },
          {
            "keyword": "When ",
            "name": "I configure Tor Connection to ask for bridge settings based on my location",
            "line": 111,
            "match": {
              "location": "features/step_definitions/tor.rb:855"
            },
            "result": {
              "status": "passed",
              "duration": 5782897676
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant reports that it failed to connect",
            "line": 112,
            "match": {
              "location": "features/step_definitions/tor.rb:914"
            },
            "result": {
              "status": "passed",
              "duration": 80228878
            }
          },
          {
            "keyword": "And ",
            "name": "the Tor Connection Assistant reports the Moat API error",
            "line": 113,
            "match": {
              "location": "features/step_definitions/tor.rb:922"
            },
            "result": {
              "status": "passed",
              "duration": 2322247888
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 1015528846
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 49761479
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 13225
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2251722
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 18002849493
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:188"
            },
            "result": {
              "status": "passed",
              "duration": 2223300
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 23384812
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 11,
            "match": {
              "location": "features/step_definitions/tor.rb:409"
            },
            "result": {
              "status": "passed",
              "duration": 1798124968
            }
          }
        ]
      },
      {
        "id": "using-tor-bridges-and-pluggable-transports;asking-for-real-bridge-settings-for-the-usa-in-tor-connection",
        "keyword": "Scenario",
        "name": "Asking for real bridge settings for the USA in Tor Connection",
        "description": "",
        "line": 115,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "no bridges are configured in torrc",
            "line": 116,
            "match": {
              "location": "features/step_definitions/tor.rb:1285"
            },
            "result": {
              "status": "passed",
              "duration": 7595545
            }
          },
          {
            "keyword": "When ",
            "name": "I configure Tor Connection to ask for bridge settings for \"United States of America\"",
            "line": 117,
            "match": {
              "location": "features/step_definitions/tor.rb:855"
            },
            "result": {
              "status": "passed",
              "duration": 6007325974
            }
          },
          {
            "keyword": "Then ",
            "name": "some real world bridges are eventually configured in torrc",
            "line": 118,
            "match": {
              "location": "features/step_definitions/tor.rb:1289"
            },
            "result": {
              "status": "passed",
              "duration": 1266244747
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 605266753
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 40984908
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/erase_memory.feature",
    "id": "system-memory-erasure-on-shutdown",
    "keyword": "Feature",
    "name": "System memory erasure on shutdown",
    "description": "  As a Tails user\n  when I shutdown Tails\n  I want the system memory to be free from sensitive data.",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      },
      {
        "name": "@slow",
        "line": 1
      },
      {
        "name": "@not_release_blocker",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "system-memory-erasure-on-shutdown;erasure-of-memory-freed-by-killed-userspace-processes",
        "keyword": "Scenario",
        "name": "Erasure of memory freed by killed userspace processes",
        "description": "",
        "line": 13,
        "type": "scenario",
        "comments": [
          {
            "value": "# These tests rely on the Linux kernel's memory poisoning features.",
            "line": 7
          },
          {
            "value": "# The feature is called \"on shutdown\" as this is the security guarantee",
            "line": 8
          },
          {
            "value": "# we document, but in practice we test that some important bits of memory",
            "line": 9
          },
          {
            "value": "# are erased _before_ shutdown, while for some others we really test",
            "line": 10
          },
          {
            "value": "# behavior at shutdown time.",
            "line": 11
          }
        ],
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@slow",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 9948
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 1924121
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 14,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6175149320
            }
          },
          {
            "keyword": "And ",
            "name": "I prepare Tails for memory erasure tests",
            "line": 15,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:66"
            },
            "result": {
              "status": "passed",
              "duration": 277609725
            }
          },
          {
            "keyword": "When ",
            "name": "I start a process allocating 128 MiB of memory with a known pattern",
            "line": 16,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:84"
            },
            "result": {
              "status": "passed",
              "duration": 2184648332
            }
          },
          {
            "keyword": "Then ",
            "name": "patterns cover at least 127 MiB in the guest's memory",
            "line": 18,
            "comments": [
              {
                "value": "# Since Debian Trixie we only get 99.610% coverage (tails#21012)",
                "line": 17
              }
            ],
            "output": [
              "Pattern coverage: 100.395% (127 MiB out of 127 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:182"
            },
            "result": {
              "status": "passed",
              "duration": 2896118440
            }
          },
          {
            "keyword": "When ",
            "name": "I kill the allocating process",
            "line": 19,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:103"
            },
            "result": {
              "status": "passed",
              "duration": 201793962
            }
          },
          {
            "keyword": "Then ",
            "name": "I find very few patterns in the guest's memory after 5 seconds",
            "line": 20,
            "output": [
              "Pattern coverage: 0.000% (0 MiB out of 1390 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:214"
            },
            "result": {
              "status": "passed",
              "duration": 7615078041
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 834533367
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 20749
            }
          }
        ]
      },
      {
        "id": "system-memory-erasure-on-shutdown;erasure-of-tmpfs-data-on-unmount",
        "keyword": "Scenario",
        "name": "Erasure of tmpfs data on unmount",
        "description": "",
        "line": 22,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@slow",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 10319
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 1847648
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 23,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6188407574
            }
          },
          {
            "keyword": "And ",
            "name": "I prepare Tails for memory erasure tests",
            "line": 24,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:66"
            },
            "result": {
              "status": "passed",
              "duration": 322469317
            }
          },
          {
            "keyword": "And ",
            "name": "I find very few patterns in the guest's memory",
            "line": 25,
            "output": [
              "Pattern coverage: 0.000% (0 MiB out of 1402 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:214"
            },
            "result": {
              "status": "passed",
              "duration": 2590158184
            }
          },
          {
            "keyword": "When ",
            "name": "I mount a 128 MiB tmpfs on \"/mnt\" and fill it with a known pattern",
            "line": 26,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:149"
            },
            "result": {
              "status": "passed",
              "duration": 1429671828
            }
          },
          {
            "keyword": "Then ",
            "name": "patterns cover at least 99% of the test FS size in the guest's memory",
            "line": 27,
            "output": [
              "Pattern coverage: 100.000% (128 MiB out of 128 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:166"
            },
            "result": {
              "status": "passed",
              "duration": 2864869992
            }
          },
          {
            "keyword": "When ",
            "name": "I umount \"/mnt\"",
            "line": 28,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:210"
            },
            "result": {
              "status": "passed",
              "duration": 423698177
            }
          },
          {
            "keyword": "Then ",
            "name": "I find very few patterns in the guest's memory after 3 seconds",
            "line": 29,
            "output": [
              "Pattern coverage: 0.000% (0 MiB out of 1402 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:214"
            },
            "result": {
              "status": "passed",
              "duration": 5510994204
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 866454251
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 20257
            }
          }
        ]
      },
      {
        "id": "system-memory-erasure-on-shutdown;erasure-of-read-and-write-disk-caches-on-unmount:-vfat",
        "keyword": "Scenario",
        "name": "Erasure of read and write disk caches on unmount: vfat",
        "description": "",
        "line": 31,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@slow",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 9829
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 1792736
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 32,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6260060048
            }
          },
          {
            "keyword": "And ",
            "name": "I prepare Tails for memory erasure tests",
            "line": 33,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:66"
            },
            "result": {
              "status": "passed",
              "duration": 294311196
            }
          },
          {
            "keyword": "When ",
            "name": "I plug and mount a 128 MiB USB drive with a vfat filesystem",
            "line": 34,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1570"
            },
            "result": {
              "status": "passed",
              "duration": 5225132399
            }
          },
          {
            "keyword": "Then ",
            "name": "I find very few patterns in the guest's memory",
            "line": 35,
            "output": [
              "Pattern coverage: 0.000% (0 MiB out of 1386 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:214"
            },
            "result": {
              "status": "passed",
              "duration": 3049805775
            }
          },
          {
            "keyword": "When ",
            "name": "I fill the USB drive with a known pattern",
            "line": 37,
            "comments": [
              {
                "value": "# write cache",
                "line": 36
              }
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:158"
            },
            "result": {
              "status": "passed",
              "duration": 2324946779
            }
          },
          {
            "keyword": "Then ",
            "name": "patterns cover at least 75% of the test FS size in the guest's memory",
            "line": 38,
            "output": [
              "Pattern coverage: 100.000% (127 MiB out of 127 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:166"
            },
            "result": {
              "status": "passed",
              "duration": 3049192530
            }
          },
          {
            "keyword": "When ",
            "name": "I umount the USB drive",
            "line": 39,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1608"
            },
            "result": {
              "status": "passed",
              "duration": 646984551
            }
          },
          {
            "keyword": "Then ",
            "name": "I find very few patterns in the guest's memory after 3 seconds",
            "line": 40,
            "output": [
              "Pattern coverage: 0.000% (0 MiB out of 1386 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:214"
            },
            "result": {
              "status": "passed",
              "duration": 5574205246
            }
          },
          {
            "keyword": "When ",
            "name": "I mount the USB drive again",
            "line": 42,
            "comments": [
              {
                "value": "# read cache",
                "line": 41
              }
            ],
            "match": {
              "location": "features/step_definitions/common_steps.rb:1603"
            },
            "result": {
              "status": "passed",
              "duration": 174844196
            }
          },
          {
            "keyword": "And ",
            "name": "I read the content of the test FS",
            "line": 43,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:162"
            },
            "result": {
              "status": "passed",
              "duration": 582301213
            }
          },
          {
            "keyword": "Then ",
            "name": "patterns cover at least 99% of the test FS size in the guest's memory",
            "line": 44,
            "output": [
              "Pattern coverage: 100.000% (127 MiB out of 127 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:166"
            },
            "result": {
              "status": "passed",
              "duration": 2821497237
            }
          },
          {
            "keyword": "When ",
            "name": "I umount the USB drive",
            "line": 45,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1608"
            },
            "result": {
              "status": "passed",
              "duration": 365222285
            }
          },
          {
            "keyword": "Then ",
            "name": "I find very few patterns in the guest's memory after 3 seconds",
            "line": 46,
            "output": [
              "Pattern coverage: 0.000% (0 MiB out of 1386 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:214"
            },
            "result": {
              "status": "passed",
              "duration": 5696379857
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 654107184
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 324165
            }
          }
        ]
      },
      {
        "id": "system-memory-erasure-on-shutdown;erasure-of-read-and-write-disk-caches-on-unmount:-luks-encrypted-ext4",
        "keyword": "Scenario",
        "name": "Erasure of read and write disk caches on unmount: LUKS-encrypted ext4",
        "description": "",
        "line": 48,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@slow",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 11602
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 1868698
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 49,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6218748210
            }
          },
          {
            "keyword": "And ",
            "name": "I prepare Tails for memory erasure tests",
            "line": 50,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:66"
            },
            "result": {
              "status": "passed",
              "duration": 274320868
            }
          },
          {
            "keyword": "When ",
            "name": "I plug and mount a 128 MiB USB drive with an ext4 filesystem encrypted with password \"asdf\"",
            "line": 51,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1570"
            },
            "result": {
              "status": "passed",
              "duration": 26829272163
            }
          },
          {
            "keyword": "Then ",
            "name": "I find very few patterns in the guest's memory",
            "line": 52,
            "output": [
              "Pattern coverage: 0.000% (0 MiB out of 1393 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:214"
            },
            "result": {
              "status": "passed",
              "duration": 2529334108
            }
          },
          {
            "keyword": "When ",
            "name": "I fill the USB drive with a known pattern",
            "line": 54,
            "comments": [
              {
                "value": "# write cache",
                "line": 53
              }
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:158"
            },
            "result": {
              "status": "passed",
              "duration": 1311991378
            }
          },
          {
            "keyword": "Then ",
            "name": "patterns cover at least 99% of the test FS size in the guest's memory",
            "line": 55,
            "output": [
              "Pattern coverage: 106.115% (97 MiB out of 91 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:166"
            },
            "result": {
              "status": "passed",
              "duration": 2817304475
            }
          },
          {
            "keyword": "When ",
            "name": "I umount the USB drive",
            "line": 56,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1608"
            },
            "result": {
              "status": "passed",
              "duration": 530817935
            }
          },
          {
            "keyword": "Then ",
            "name": "I find very few patterns in the guest's memory after 3 seconds",
            "line": 57,
            "output": [
              "Pattern coverage: 0.000% (0 MiB out of 1393 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:214"
            },
            "result": {
              "status": "passed",
              "duration": 5564340465
            }
          },
          {
            "keyword": "When ",
            "name": "I mount the USB drive again",
            "line": 59,
            "comments": [
              {
                "value": "# read cache",
                "line": 58
              }
            ],
            "match": {
              "location": "features/step_definitions/common_steps.rb:1603"
            },
            "result": {
              "status": "passed",
              "duration": 3621701184
            }
          },
          {
            "keyword": "And ",
            "name": "I read the content of the test FS",
            "line": 60,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:162"
            },
            "result": {
              "status": "passed",
              "duration": 330839463
            }
          },
          {
            "keyword": "Then ",
            "name": "patterns cover at least 99% of the test FS size in the guest's memory",
            "line": 61,
            "output": [
              "Pattern coverage: 106.115% (97 MiB out of 91 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:166"
            },
            "result": {
              "status": "passed",
              "duration": 2504248305
            }
          },
          {
            "keyword": "When ",
            "name": "I umount the USB drive",
            "line": 62,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1608"
            },
            "result": {
              "status": "passed",
              "duration": 451596195
            }
          },
          {
            "keyword": "Then ",
            "name": "I find very few patterns in the guest's memory after 3 seconds",
            "line": 63,
            "output": [
              "Pattern coverage: 0.000% (0 MiB out of 1393 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:214"
            },
            "result": {
              "status": "passed",
              "duration": 5955992637
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 777617642
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 325277
            }
          }
        ]
      },
      {
        "id": "system-memory-erasure-on-shutdown;erasure-of-the-overlayfs-read-write-branch-on-shutdown",
        "keyword": "Scenario",
        "name": "Erasure of the overlayfs read-write branch on shutdown",
        "description": "",
        "line": 65,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@slow",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 13435
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2418442
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 66,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6243003959
            }
          },
          {
            "keyword": "And ",
            "name": "I prepare Tails for memory erasure tests",
            "line": 67,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:66"
            },
            "result": {
              "status": "passed",
              "duration": 269230569
            }
          },
          {
            "keyword": "When ",
            "name": "I fill a 128 MiB file with a known pattern on the root filesystem",
            "line": 68,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:235"
            },
            "result": {
              "status": "passed",
              "duration": 13912904918
            }
          },
          {
            "keyword": "And ",
            "name": "I drop all kernel caches",
            "line": 70,
            "comments": [
              {
                "value": "# ensure the pattern is in memory due to tmpfs, not to disk cache",
                "line": 69
              }
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:251"
            },
            "result": {
              "status": "passed",
              "duration": 1587672491
            }
          },
          {
            "keyword": "Then ",
            "name": "patterns cover at least 128 MiB in the guest's memory",
            "line": 71,
            "output": [
              "Pattern coverage: 100.000% (128 MiB out of 128 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:182"
            },
            "result": {
              "status": "passed",
              "duration": 2185594508
            }
          },
          {
            "keyword": "When ",
            "name": "I trigger shutdown",
            "line": 72,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:255"
            },
            "result": {
              "status": "passed",
              "duration": 4720510
            }
          },
          {
            "keyword": "Then ",
            "name": "I find very few patterns in the guest's memory after 20 seconds",
            "line": 73,
            "output": [
              "Pattern coverage: 0.000% (0 MiB out of 1402 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:214"
            },
            "result": {
              "status": "passed",
              "duration": 20716690499
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 3609658121
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 20608
            }
          }
        ]
      },
      {
        "id": "system-memory-erasure-on-shutdown;erasure-of-read-and-write-disk-caches-of-persistent-data-on-shutdown",
        "keyword": "Scenario",
        "name": "Erasure of read and write disk caches of persistent data on shutdown",
        "description": "",
        "line": 75,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@slow",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 11000
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 1886391
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition enabled and logged in",
            "line": 76,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 214508085241
            }
          },
          {
            "keyword": "And ",
            "name": "I prepare Tails for memory erasure tests",
            "line": 77,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:66"
            },
            "result": {
              "status": "passed",
              "duration": 292337309
            }
          },
          {
            "keyword": "When ",
            "name": "I fill a 128 MiB file with a known pattern on the persistent filesystem",
            "line": 78,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:235"
            },
            "result": {
              "status": "passed",
              "duration": 11149133010
            }
          },
          {
            "keyword": "When ",
            "name": "I trigger shutdown",
            "line": 79,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:255"
            },
            "result": {
              "status": "passed",
              "duration": 5313537
            }
          },
          {
            "keyword": "Then ",
            "name": "I find very few patterns in the guest's memory after 20 seconds",
            "line": 80,
            "output": [
              "Pattern coverage: 0.000% (0 MiB out of 1451 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:214"
            },
            "result": {
              "status": "passed",
              "duration": 21071281136
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 3581658062
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 39591310
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/usb_install.feature",
    "id": "installing-tails-to-a-usb-drive",
    "keyword": "Feature",
    "name": "Installing Tails to a USB drive",
    "description": "  As a Tails user\n  I want to install Tails to a suitable USB drive",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "installing-tails-to-a-usb-drive;try-installing-tails-to-a-too-small-usb-drive-with-gpt-and-a-fat-partition",
        "keyword": "Scenario",
        "name": "Try installing Tails to a too small USB drive with GPT and a FAT partition",
        "description": "",
        "line": 7,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 6
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 13674
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 1266133
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6185712838
            }
          },
          {
            "keyword": "And ",
            "name": "I temporarily create a 4 GiB disk named \"gptfat\"",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:114"
            },
            "result": {
              "status": "passed",
              "duration": 51458169
            }
          },
          {
            "keyword": "And ",
            "name": "I create a gpt partition with a vfat filesystem on disk \"gptfat\"",
            "line": 10,
            "match": {
              "location": "features/step_definitions/untrusted_partitions.rb:23"
            },
            "result": {
              "status": "passed",
              "duration": 2736729994
            }
          },
          {
            "keyword": "And ",
            "name": "I plug USB drive \"gptfat\"",
            "line": 11,
            "match": {
              "location": "features/step_definitions/common_steps.rb:126"
            },
            "result": {
              "status": "passed",
              "duration": 2193108995
            }
          },
          {
            "keyword": "When ",
            "name": "I start Tails Installer",
            "line": 12,
            "match": {
              "location": "features/step_definitions/usb.rb:151"
            },
            "result": {
              "status": "passed",
              "duration": 8316423248
            }
          },
          {
            "keyword": "Then ",
            "name": "I am told by Tails Installer that the destination device \"is too small\"",
            "line": 13,
            "match": {
              "location": "features/step_definitions/usb.rb:167"
            },
            "result": {
              "status": "passed",
              "duration": 19391229
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 602102935
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 823989
            }
          }
        ]
      },
      {
        "id": "installing-tails-to-a-usb-drive;detecting-when-a-target-usb-drive-is-inserted-or-removed",
        "keyword": "Scenario",
        "name": "Detecting when a target USB drive is inserted or removed",
        "description": "",
        "line": 15,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 10880
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2068110
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 16,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6230550792
            }
          },
          {
            "keyword": "And ",
            "name": "I temporarily create a 7200 MiB disk named \"temp\"",
            "line": 17,
            "match": {
              "location": "features/step_definitions/common_steps.rb:114"
            },
            "result": {
              "status": "passed",
              "duration": 33440139
            }
          },
          {
            "keyword": "And ",
            "name": "I start Tails Installer",
            "line": 18,
            "match": {
              "location": "features/step_definitions/usb.rb:151"
            },
            "result": {
              "status": "passed",
              "duration": 8305809338
            }
          },
          {
            "keyword": "But ",
            "name": "a suitable USB device is not found",
            "line": 19,
            "match": {
              "location": "features/step_definitions/usb.rb:173"
            },
            "result": {
              "status": "passed",
              "duration": 20691297
            }
          },
          {
            "keyword": "When ",
            "name": "I plug USB drive \"temp\"",
            "line": 20,
            "match": {
              "location": "features/step_definitions/common_steps.rb:126"
            },
            "result": {
              "status": "passed",
              "duration": 2178197485
            }
          },
          {
            "keyword": "Then ",
            "name": "the \"temp\" USB drive is selected",
            "line": 21,
            "match": {
              "location": "features/step_definitions/usb.rb:179"
            },
            "result": {
              "status": "passed",
              "duration": 53331484
            }
          },
          {
            "keyword": "When ",
            "name": "I unplug USB drive \"temp\"",
            "line": 22,
            "match": {
              "location": "features/step_definitions/usb.rb:128"
            },
            "result": {
              "status": "passed",
              "duration": 177083426
            }
          },
          {
            "keyword": "Then ",
            "name": "a suitable USB device is not found",
            "line": 23,
            "match": {
              "location": "features/step_definitions/usb.rb:173"
            },
            "result": {
              "status": "passed",
              "duration": 38731687
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 652965904
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 223377
            }
          }
        ]
      },
      {
        "id": "installing-tails-to-a-usb-drive;installing-tails-with-tails-installer-to-a-used-usb-drive",
        "keyword": "Scenario",
        "name": "Installing Tails with Tails Installer to a used USB drive",
        "description": "",
        "line": 25,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 15509
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2048903
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 26,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6243909433
            }
          },
          {
            "keyword": "And ",
            "name": "I temporarily create a 7200 MiB disk named \"install\"",
            "line": 27,
            "match": {
              "location": "features/step_definitions/common_steps.rb:114"
            },
            "result": {
              "status": "passed",
              "duration": 24572901
            }
          },
          {
            "keyword": "And ",
            "name": "I create a gpt partition with a vfat filesystem on disk \"install\"",
            "line": 28,
            "match": {
              "location": "features/step_definitions/untrusted_partitions.rb:23"
            },
            "result": {
              "status": "passed",
              "duration": 2960690930
            }
          },
          {
            "keyword": "And ",
            "name": "I plug USB drive \"install\"",
            "line": 29,
            "match": {
              "location": "features/step_definitions/common_steps.rb:126"
            },
            "result": {
              "status": "passed",
              "duration": 2183793718
            }
          },
          {
            "keyword": "And ",
            "name": "I install Tails to USB drive \"install\" by cloning",
            "line": 30,
            "match": {
              "location": "features/step_definitions/usb.rb:194"
            },
            "result": {
              "status": "passed",
              "duration": 94798351379
            }
          },
          {
            "keyword": "Then ",
            "name": "the running Tails is installed on USB drive \"install\"",
            "line": 31,
            "match": {
              "location": "features/step_definitions/usb.rb:608"
            },
            "result": {
              "status": "passed",
              "duration": 14213721393
            }
          },
          {
            "keyword": "And ",
            "name": "there is a random seed on USB drive \"install\"",
            "line": 32,
            "match": {
              "location": "features/step_definitions/random_seed.rb:31"
            },
            "result": {
              "status": "passed",
              "duration": 2752118206
            }
          },
          {
            "keyword": "But ",
            "name": "there is no persistence partition on USB drive \"install\"",
            "line": 33,
            "match": {
              "location": "features/step_definitions/usb.rb:613"
            },
            "result": {
              "status": "passed",
              "duration": 45966130
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 978610705
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 113664303
            }
          }
        ]
      },
      {
        "id": "installing-tails-to-a-usb-drive;installing-tails-with-tails-installer-to-a-pristine-usb-drive",
        "keyword": "Scenario",
        "name": "Installing Tails with Tails Installer to a pristine USB drive",
        "description": "",
        "line": 35,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 17192
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2343584
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 36,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6311628987
            }
          },
          {
            "keyword": "And ",
            "name": "I temporarily create a 7200 MiB disk named \"install\"",
            "line": 37,
            "match": {
              "location": "features/step_definitions/common_steps.rb:114"
            },
            "result": {
              "status": "passed",
              "duration": 26431621
            }
          },
          {
            "keyword": "And ",
            "name": "I plug USB drive \"install\"",
            "line": 38,
            "match": {
              "location": "features/step_definitions/common_steps.rb:126"
            },
            "result": {
              "status": "passed",
              "duration": 2199656989
            }
          },
          {
            "keyword": "And ",
            "name": "I install Tails to USB drive \"install\" by cloning",
            "line": 39,
            "match": {
              "location": "features/step_definitions/usb.rb:194"
            },
            "result": {
              "status": "passed",
              "duration": 99992014227
            }
          },
          {
            "keyword": "Then ",
            "name": "the running Tails is installed on USB drive \"install\"",
            "line": 40,
            "match": {
              "location": "features/step_definitions/usb.rb:608"
            },
            "result": {
              "status": "passed",
              "duration": 14195885086
            }
          },
          {
            "keyword": "And ",
            "name": "there is a random seed on USB drive \"install\"",
            "line": 41,
            "match": {
              "location": "features/step_definitions/random_seed.rb:31"
            },
            "result": {
              "status": "passed",
              "duration": 2557944147
            }
          },
          {
            "keyword": "But ",
            "name": "there is no persistence partition on USB drive \"install\"",
            "line": 42,
            "match": {
              "location": "features/step_definitions/usb.rb:613"
            },
            "result": {
              "status": "passed",
              "duration": 35533273
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 891729723
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 113145793
            }
          }
        ]
      },
      {
        "id": "installing-tails-to-a-usb-drive;installing-tails-with-tails-installer-to-a-used-usb-drive,-cloning-the-persistent-storage",
        "keyword": "Scenario",
        "name": "Installing Tails with Tails Installer to a used USB drive, cloning the Persistent Storage",
        "description": "",
        "line": 44,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 15419
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2303760
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition enabled and logged in",
            "line": 45,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 7834354315
            }
          },
          {
            "keyword": "And ",
            "name": "I create a file in the Persistent directory",
            "line": 46,
            "match": {
              "location": "features/step_definitions/usb.rb:1719"
            },
            "result": {
              "status": "passed",
              "duration": 53668371
            }
          },
          {
            "keyword": "And ",
            "name": "I temporarily create a 7200 MiB disk named \"install\"",
            "line": 47,
            "match": {
              "location": "features/step_definitions/common_steps.rb:114"
            },
            "result": {
              "status": "passed",
              "duration": 35273828
            }
          },
          {
            "keyword": "And ",
            "name": "I create a gpt partition with a vfat filesystem on disk \"install\"",
            "line": 48,
            "match": {
              "location": "features/step_definitions/untrusted_partitions.rb:23"
            },
            "result": {
              "status": "passed",
              "duration": 2989254560
            }
          },
          {
            "keyword": "And ",
            "name": "I plug USB drive \"install\"",
            "line": 49,
            "match": {
              "location": "features/step_definitions/common_steps.rb:126"
            },
            "result": {
              "status": "passed",
              "duration": 2212548395
            }
          },
          {
            "keyword": "And ",
            "name": "I install Tails with Persistent Storage to USB drive \"install\" by cloning",
            "line": 50,
            "match": {
              "location": "features/step_definitions/usb.rb:194"
            },
            "result": {
              "status": "passed",
              "duration": 114074105711
            }
          },
          {
            "keyword": "Then ",
            "name": "the running Tails is installed on USB drive \"install\"",
            "line": 51,
            "match": {
              "location": "features/step_definitions/usb.rb:608"
            },
            "result": {
              "status": "passed",
              "duration": 17929884231
            }
          },
          {
            "keyword": "And ",
            "name": "there is a random seed on USB drive \"install\"",
            "line": 52,
            "match": {
              "location": "features/step_definitions/random_seed.rb:31"
            },
            "result": {
              "status": "passed",
              "duration": 2503546753
            }
          },
          {
            "keyword": "And ",
            "name": "there is a persistence partition on USB drive \"install\"",
            "line": 53,
            "match": {
              "location": "features/step_definitions/usb.rb:619"
            },
            "result": {
              "status": "passed",
              "duration": 47309098
            }
          },
          {
            "keyword": "And ",
            "name": "the USB drive \"install\" contains the same files as my persistent storage",
            "line": 54,
            "match": {
              "location": "features/step_definitions/backup.rb:22"
            },
            "result": {
              "status": "passed",
              "duration": 2184092911
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 874542115
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 120825605
            }
          }
        ]
      },
      {
        "id": "installing-tails-to-a-usb-drive;installing-tails-with-tails-installer-to-a-pristine-usb-drive,-without-cloning-the-persistent-storage",
        "keyword": "Scenario",
        "name": "Installing Tails with Tails Installer to a pristine USB drive, without cloning the Persistent Storage",
        "description": "",
        "line": 56,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 13294
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2611684
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition enabled and logged in",
            "line": 57,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 7809828912
            }
          },
          {
            "keyword": "And ",
            "name": "I temporarily create a 7200 MiB disk named \"install\"",
            "line": 58,
            "match": {
              "location": "features/step_definitions/common_steps.rb:114"
            },
            "result": {
              "status": "passed",
              "duration": 31339863
            }
          },
          {
            "keyword": "And ",
            "name": "I plug USB drive \"install\"",
            "line": 59,
            "match": {
              "location": "features/step_definitions/common_steps.rb:126"
            },
            "result": {
              "status": "passed",
              "duration": 2193420443
            }
          },
          {
            "keyword": "And ",
            "name": "I install Tails to USB drive \"install\" by cloning",
            "line": 60,
            "match": {
              "location": "features/step_definitions/usb.rb:194"
            },
            "result": {
              "status": "passed",
              "duration": 111638940436
            }
          },
          {
            "keyword": "Then ",
            "name": "the running Tails is installed on USB drive \"install\"",
            "line": 61,
            "match": {
              "location": "features/step_definitions/usb.rb:608"
            },
            "result": {
              "status": "passed",
              "duration": 17581077895
            }
          },
          {
            "keyword": "And ",
            "name": "there is a random seed on USB drive \"install\"",
            "line": 62,
            "match": {
              "location": "features/step_definitions/random_seed.rb:31"
            },
            "result": {
              "status": "passed",
              "duration": 2620245288
            }
          },
          {
            "keyword": "And ",
            "name": "there is no persistence partition on USB drive \"install\"",
            "line": 63,
            "match": {
              "location": "features/step_definitions/usb.rb:613"
            },
            "result": {
              "status": "passed",
              "duration": 40931445
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 894130377
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 110951159
            }
          }
        ]
      },
      {
        "id": "installing-tails-to-a-usb-drive;re-installing-tails-over-an-existing-usb-installation-with-a-persistent-partition",
        "keyword": "Scenario",
        "name": "Re-installing Tails over an existing USB installation with a persistent partition",
        "description": "",
        "line": 65,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 14847
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2624898
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition enabled and logged in",
            "line": 70,
            "comments": [
              {
                "value": "# We reach this first checkpoint only to ensure that the ' __internal' disk has reached the state (Tails installed + persistent partition set up) we need before we clone it below.",
                "line": 66
              },
              {
                "value": "# This first part is done without Tails Installer (install from Tails USB image)",
                "line": 67
              },
              {
                "value": "# Note: the \"__internal\" disk will keep its state across scenarios",
                "line": 68
              },
              {
                "value": "# and features until one of its snapshots is restored.",
                "line": 69
              }
            ],
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 7766003706
            }
          },
          {
            "keyword": "And ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 71,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6470841725
            }
          },
          {
            "keyword": "And ",
            "name": "I clone USB drive \"__internal\" to a temporary USB drive \"install\"",
            "line": 72,
            "match": {
              "location": "features/step_definitions/usb.rb:121"
            },
            "result": {
              "status": "passed",
              "duration": 575789194
            }
          },
          {
            "keyword": "And ",
            "name": "I plug USB drive \"install\"",
            "line": 73,
            "match": {
              "location": "features/step_definitions/common_steps.rb:126"
            },
            "result": {
              "status": "passed",
              "duration": 2200398927
            }
          },
          {
            "keyword": "When ",
            "name": "I reinstall Tails to USB drive \"install\" by cloning",
            "line": 75,
            "comments": [
              {
                "value": "# This second part is done with Tails Installer, that's what this scenario is about",
                "line": 74
              }
            ],
            "match": {
              "location": "features/step_definitions/usb.rb:194"
            },
            "result": {
              "status": "passed",
              "duration": 95115667459
            }
          },
          {
            "keyword": "Then ",
            "name": "the running Tails is installed on USB drive \"install\"",
            "line": 76,
            "match": {
              "location": "features/step_definitions/usb.rb:608"
            },
            "result": {
              "status": "passed",
              "duration": 14670670087
            }
          },
          {
            "keyword": "And ",
            "name": "there is a random seed on USB drive \"install\"",
            "line": 77,
            "match": {
              "location": "features/step_definitions/random_seed.rb:31"
            },
            "result": {
              "status": "passed",
              "duration": 2706880989
            }
          },
          {
            "keyword": "And ",
            "name": "there is no persistence partition on USB drive \"install\"",
            "line": 78,
            "match": {
              "location": "features/step_definitions/usb.rb:613"
            },
            "result": {
              "status": "passed",
              "duration": 39593697
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 649308274
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 131498398
            }
          }
        ]
      },
      {
        "id": "installing-tails-to-a-usb-drive;booting-tails-from-a-usb-drive-in-uefi-mode",
        "keyword": "Scenario",
        "name": "Booting Tails from a USB drive in UEFI mode",
        "description": "",
        "line": 81,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@uefi",
            "line": 80
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 17263
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2282000
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive without a persistent partition and stopped at Tails Greeter's login screen",
            "line": 82,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 8027938693
            }
          },
          {
            "keyword": "And ",
            "name": "I power off the computer",
            "line": 83,
            "match": {
              "location": "features/step_definitions/common_steps.rb:276"
            },
            "result": {
              "status": "passed",
              "duration": 245702066
            }
          },
          {
            "keyword": "And ",
            "name": "the computer is set to boot in UEFI mode",
            "line": 84,
            "match": {
              "location": "features/step_definitions/usb.rb:132"
            },
            "result": {
              "status": "passed",
              "duration": 14637309
            }
          },
          {
            "keyword": "When ",
            "name": "I start Tails from USB drive \"__internal\" with network unplugged and I login",
            "line": 85,
            "match": {
              "location": "features/step_definitions/common_steps.rb:235"
            },
            "result": {
              "status": "passed",
              "duration": 56595300951
            }
          },
          {
            "keyword": "Then ",
            "name": "Tails is running from USB drive \"__internal\"",
            "line": 86,
            "match": {
              "location": "features/step_definitions/usb.rb:942"
            },
            "result": {
              "status": "passed",
              "duration": 334054405
            }
          },
          {
            "keyword": "And ",
            "name": "the boot device has safe access rights",
            "line": 87,
            "match": {
              "location": "features/step_definitions/usb.rb:956"
            },
            "result": {
              "status": "passed",
              "duration": 1894363476
            }
          },
          {
            "keyword": "And ",
            "name": "Tails has started in UEFI mode",
            "line": 88,
            "match": {
              "location": "features/step_definitions/usb.rb:1220"
            },
            "result": {
              "status": "passed",
              "duration": 32012417
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 514098927
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 5452435
            }
          }
        ]
      },
      {
        "id": "installing-tails-to-a-usb-drive;installing-tails-with-gnome-disks-from-a-usb-image",
        "keyword": "Scenario",
        "name": "Installing Tails with GNOME Disks from a USB image",
        "description": "",
        "line": 90,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 12343
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 1484660
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 91,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6226482717
            }
          },
          {
            "keyword": "And ",
            "name": "I plug and mount a USB drive containing a Tails USB image",
            "line": 92,
            "match": {
              "location": "features/step_definitions/usb.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 21958135482
            }
          },
          {
            "keyword": "And ",
            "name": "I create a 7200 MiB disk named \"usbimage\"",
            "line": 93,
            "match": {
              "location": "features/step_definitions/common_steps.rb:114"
            },
            "result": {
              "status": "passed",
              "duration": 24769310
            }
          },
          {
            "keyword": "And ",
            "name": "I plug USB drive \"usbimage\"",
            "line": 94,
            "match": {
              "location": "features/step_definitions/common_steps.rb:126"
            },
            "result": {
              "status": "passed",
              "duration": 2167271357
            }
          },
          {
            "keyword": "And ",
            "name": "I install a Tails USB image to the 7200 MiB disk with GNOME Disks",
            "line": 95,
            "match": {
              "location": "features/step_definitions/usb.rb:1559"
            },
            "result": {
              "status": "passed",
              "duration": 27835436399
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 1274410281
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 115048480
            }
          }
        ]
      },
      {
        "id": "installing-tails-to-a-usb-drive;the-system-partition-is-updated-when-booting-from-a-usb-drive-where-a-tails-usb-image-was-copied",
        "keyword": "Scenario",
        "name": "The system partition is updated when booting from a USB drive where a Tails USB image was copied",
        "description": "",
        "line": 98,
        "type": "scenario",
        "comments": [
          {
            "value": "# Depends on scenario: Installing Tails with GNOME Disks from a USB image",
            "line": 97
          }
        ],
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 28483
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 10844250
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 99,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 83090402
            }
          },
          {
            "keyword": "And ",
            "name": "I start Tails from USB drive \"usbimage\" with network unplugged and I login",
            "line": 100,
            "match": {
              "location": "features/step_definitions/common_steps.rb:235"
            },
            "result": {
              "status": "passed",
              "duration": 53583459890
            }
          },
          {
            "keyword": "Then ",
            "name": "Tails is running from USB drive \"usbimage\"",
            "line": 101,
            "match": {
              "location": "features/step_definitions/usb.rb:942"
            },
            "result": {
              "status": "passed",
              "duration": 206645103
            }
          },
          {
            "keyword": "And ",
            "name": "the label of the system partition on \"usbimage\" is \"Tails\"",
            "line": 102,
            "match": {
              "location": "features/step_definitions/usb.rb:1460"
            },
            "result": {
              "status": "passed",
              "duration": 154535112
            }
          },
          {
            "keyword": "And ",
            "name": "the system partition on \"usbimage\" is an EFI system partition",
            "line": 103,
            "match": {
              "location": "features/step_definitions/usb.rb:1468"
            },
            "result": {
              "status": "passed",
              "duration": 155838665
            }
          },
          {
            "keyword": "And ",
            "name": "the FAT filesystem on the system partition on \"usbimage\" is at least 4000M large",
            "line": 104,
            "match": {
              "location": "features/step_definitions/usb.rb:1477"
            },
            "result": {
              "status": "passed",
              "duration": 144321098
            }
          },
          {
            "keyword": "And ",
            "name": "the UUID of the FAT filesystem on the system partition on \"usbimage\" was randomized",
            "line": 105,
            "match": {
              "location": "features/step_definitions/usb.rb:1505"
            },
            "result": {
              "status": "passed",
              "duration": 54130612
            }
          },
          {
            "keyword": "And ",
            "name": "the label of the FAT filesystem on the system partition on \"usbimage\" is \"TAILS\"",
            "line": 106,
            "match": {
              "location": "features/step_definitions/usb.rb:1522"
            },
            "result": {
              "status": "passed",
              "duration": 45357497
            }
          },
          {
            "keyword": "And ",
            "name": "the system partition on \"usbimage\" has the expected flags",
            "line": 107,
            "match": {
              "location": "features/step_definitions/usb.rb:1539"
            },
            "result": {
              "status": "passed",
              "duration": 67573634
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 696951125
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 24998218
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/additional_software_packages.feature",
    "id": "additional-software",
    "keyword": "Feature",
    "name": "Additional software",
    "description": "  As a Tails user\n  I may want to install software not shipped in Tails\n  And have them installed automatically when I enable persistence in the Greeter",
    "line": 3,
    "tags": [
      {
        "name": "@product",
        "line": 1
      },
      {
        "name": "@check_tor_leaks",
        "line": 1
      },
      {
        "name": "@slow",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "additional-software;i-set-up-additional-software-when-installing-a-package-without-persistent-partition-and-the-package-is-installed-next-time-i-start-tails",
        "keyword": "Scenario",
        "name": "I set up Additional Software when installing a package without persistent partition and the package is installed next time I start Tails",
        "description": "",
        "line": 27,
        "type": "scenario",
        "comments": [
          {
            "value": "# Here we install the popularity-contest package to test if debconf does not prevent",
            "line": 21
          },
          {
            "value": "# Additional Software from automatically installing packages.",
            "line": 22
          },
          {
            "value": "# This scenario also sets up the \"__internal\" drive that the following",
            "line": 23
          },
          {
            "value": "# scenarios will reuse.",
            "line": 24
          },
          {
            "value": "# Note: the \"__internal\" drive will keep its state across scenarios",
            "line": 25
          },
          {
            "value": "# and features until one of its snapshots is restored.",
            "line": 26
          }
        ],
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 1
          },
          {
            "name": "@slow",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 17332
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2288471
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 1623229
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I start Tails from a freshly installed USB drive with an administration password and the network is plugged and I login",
            "line": 28,
            "match": {
              "location": "features/step_definitions/common_steps.rb:264"
            },
            "result": {
              "status": "passed",
              "duration": 44160955227
            }
          },
          {
            "keyword": "And ",
            "name": "I update the APT lists using apt",
            "line": 29,
            "match": {
              "location": "features/step_definitions/apt.rb:54"
            },
            "result": {
              "status": "passed",
              "duration": 35162629581
            }
          },
          {
            "keyword": "And ",
            "name": "I install \"popularity-contest\" using apt",
            "line": 30,
            "match": {
              "location": "features/step_definitions/apt.rb:76"
            },
            "result": {
              "status": "passed",
              "duration": 3486433232
            }
          },
          {
            "keyword": "Then ",
            "name": "I am proposed to add the \"popularity-contest\" package to my Additional Software",
            "line": 31,
            "match": {
              "location": "features/step_definitions/additional_software_packages.rb:25"
            },
            "result": {
              "status": "passed",
              "duration": 2469465414
            }
          },
          {
            "keyword": "When ",
            "name": "I create a persistent storage and activate the Additional Software feature",
            "line": 32,
            "match": {
              "location": "features/step_definitions/additional_software_packages.rb:38"
            },
            "result": {
              "status": "passed",
              "duration": 13137874510
            }
          },
          {
            "keyword": "Then ",
            "name": "Additional Software is correctly configured for package \"popularity-contest\"",
            "line": 33,
            "match": {
              "location": "features/step_definitions/additional_software_packages.rb:53"
            },
            "result": {
              "status": "passed",
              "duration": 1479496372
            }
          },
          {
            "keyword": "When ",
            "name": "I shutdown Tails and wait for the computer to power off",
            "line": 34,
            "match": {
              "location": "features/step_definitions/common_steps.rb:908"
            },
            "result": {
              "status": "passed",
              "duration": 3903516792
            }
          },
          {
            "keyword": "And ",
            "name": "I start Tails from USB drive \"__internal\" with network unplugged",
            "line": 35,
            "match": {
              "location": "features/step_definitions/common_steps.rb:235"
            },
            "result": {
              "status": "passed",
              "duration": 31897143803
            }
          },
          {
            "keyword": "And ",
            "name": "I enable persistence",
            "line": 36,
            "match": {
              "location": "features/step_definitions/usb.rb:728"
            },
            "result": {
              "status": "passed",
              "duration": 16825274900
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session",
            "line": 37,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 6768681795
            }
          },
          {
            "keyword": "And ",
            "name": "the Additional Software installation service has started",
            "line": 38,
            "match": {
              "location": "features/step_definitions/additional_software_packages.rb:1"
            },
            "result": {
              "status": "passed",
              "duration": 10092087026
            }
          },
          {
            "keyword": "Then ",
            "name": "I am notified that the installation succeeded",
            "line": 39,
            "match": {
              "location": "features/step_definitions/additional_software_packages.rb:20"
            },
            "result": {
              "status": "passed",
              "duration": 1445271055
            }
          },
          {
            "keyword": "And ",
            "name": "Additional Software is correctly configured for package \"popularity-contest\"",
            "line": 40,
            "match": {
              "location": "features/step_definitions/additional_software_packages.rb:53"
            },
            "result": {
              "status": "passed",
              "duration": 484132374
            }
          },
          {
            "keyword": "And ",
            "name": "the package \"popularity-contest\" is installed after Additional Software has been installed",
            "line": 41,
            "match": {
              "location": "features/step_definitions/common_steps.rb:956"
            },
            "result": {
              "status": "passed",
              "duration": 106947297
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:535"
            },
            "result": {
              "status": "passed",
              "duration": 665474657
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 621284086
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 8678278
            }
          }
        ]
      },
      {
        "id": "additional-software;the-additional-software-dpkg-hook-notices-when-persistence-is-locked-down-while-installing-a-package",
        "keyword": "Scenario",
        "name": "The Additional Software dpkg hook notices when persistence is locked down while installing a package",
        "description": "",
        "line": 44,
        "type": "scenario",
        "comments": [
          {
            "value": "# Depends on scenario: I set up Additional Software when installing a package without persistent partition and the package is installed next time I start Tails",
            "line": 43
          }
        ],
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 1
          },
          {
            "name": "@slow",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 13595
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 1504157
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 1556054
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 45,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 71561821
            }
          },
          {
            "keyword": "And ",
            "name": "I start Tails from USB drive \"__internal\" and I login with an administration password",
            "line": 46,
            "match": {
              "location": "features/step_definitions/common_steps.rb:235"
            },
            "result": {
              "status": "passed",
              "duration": 61219115861
            }
          },
          {
            "keyword": "And ",
            "name": "I update the APT lists using apt",
            "line": 47,
            "match": {
              "location": "features/step_definitions/apt.rb:54"
            },
            "result": {
              "status": "passed",
              "duration": 34798945115
            }
          },
          {
            "keyword": "When ",
            "name": "I install \"ripgrep\" using apt",
            "line": 48,
            "match": {
              "location": "features/step_definitions/apt.rb:76"
            },
            "result": {
              "status": "passed",
              "duration": 3363437915
            }
          },
          {
            "keyword": "Then ",
            "name": "the Additional Software dpkg hook has been run for package \"ripgrep\" and notices the persistence is locked",
            "line": 49,
            "match": {
              "location": "features/step_definitions/additional_software_packages.rb:144"
            },
            "result": {
              "status": "passed",
              "duration": 2123146102
            }
          },
          {
            "keyword": "And ",
            "name": "the package \"ripgrep\" is installed",
            "line": 50,
            "match": {
              "location": "features/step_definitions/common_steps.rb:956"
            },
            "result": {
              "status": "passed",
              "duration": 54403245
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:535"
            },
            "result": {
              "status": "passed",
              "duration": 705989932
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 864303984
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 9042288
            }
          }
        ]
      },
      {
        "id": "additional-software;my-additional-software-list-is-configurable-through-a-gui-or-through-notifications-when-i-install-or-remove-packages-with-apt-or-synaptic",
        "keyword": "Scenario",
        "name": "My Additional Software list is configurable through a GUI or through notifications when I install or remove packages with APT or Synaptic",
        "description": "",
        "line": 53,
        "type": "scenario",
        "comments": [
          {
            "value": "# Depends on scenario: I set up Additional Software when installing a package without persistent partition and the package is installed next time I start Tails",
            "line": 52
          }
        ],
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 1
          },
          {
            "name": "@slow",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 14245
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 1380917
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 4451198
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 54,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 72573633
            }
          },
          {
            "keyword": "And ",
            "name": "I start Tails from USB drive \"__internal\" and I login with persistence enabled and an administration password",
            "line": 55,
            "match": {
              "location": "features/step_definitions/common_steps.rb:235"
            },
            "result": {
              "status": "passed",
              "duration": 83672345153
            }
          },
          {
            "keyword": "When ",
            "name": "I uninstall \"popularity-contest\" using apt",
            "line": 56,
            "match": {
              "location": "features/step_definitions/apt.rb:101"
            },
            "result": {
              "status": "passed",
              "duration": 3130555612
            }
          },
          {
            "keyword": "And ",
            "name": "I accept removing \"popularity-contest\" from Additional Software",
            "line": 57,
            "match": {
              "location": "features/step_definitions/additional_software_packages.rb:79"
            },
            "result": {
              "status": "passed",
              "duration": 2318704990
            }
          },
          {
            "keyword": "Then ",
            "name": "\"popularity-contest\" is not in the list of Additional Software",
            "line": 58,
            "match": {
              "location": "features/step_definitions/additional_software_packages.rb:71"
            },
            "result": {
              "status": "passed",
              "duration": 435458586
            }
          },
          {
            "keyword": "When ",
            "name": "I start Synaptic",
            "line": 59,
            "match": {
              "location": "features/step_definitions/apt.rb:136"
            },
            "result": {
              "status": "passed",
              "duration": 11667145183
            }
          },
          {
            "keyword": "And ",
            "name": "I update the APT lists using Synaptic",
            "line": 60,
            "match": {
              "location": "features/step_definitions/apt.rb:142"
            },
            "result": {
              "status": "passed",
              "duration": 20887543575
            }
          },
          {
            "keyword": "And ",
            "name": "I install \"cowsay\" using Synaptic",
            "line": 61,
            "match": {
              "location": "features/step_definitions/apt.rb:164"
            },
            "result": {
              "status": "passed",
              "duration": 7407648854
            }
          },
          {
            "keyword": "And ",
            "name": "I accept adding \"cowsay\" to Additional Software",
            "line": 62,
            "match": {
              "location": "features/step_definitions/additional_software_packages.rb:79"
            },
            "result": {
              "status": "passed",
              "duration": 2487184771
            }
          },
          {
            "keyword": "Then ",
            "name": "Additional Software is correctly configured for package \"cowsay\"",
            "line": 63,
            "match": {
              "location": "features/step_definitions/additional_software_packages.rb:53"
            },
            "result": {
              "status": "passed",
              "duration": 484691193
            }
          },
          {
            "keyword": "When ",
            "name": "I uninstall \"cowsay\" using apt",
            "line": 64,
            "match": {
              "location": "features/step_definitions/apt.rb:101"
            },
            "result": {
              "status": "passed",
              "duration": 3140562741
            }
          },
          {
            "keyword": "And ",
            "name": "I refuse removing \"cowsay\" from Additional Software",
            "line": 65,
            "match": {
              "location": "features/step_definitions/additional_software_packages.rb:79"
            },
            "result": {
              "status": "passed",
              "duration": 2468962929
            }
          },
          {
            "keyword": "Then ",
            "name": "Additional Software is correctly configured for package \"cowsay\"",
            "line": 66,
            "match": {
              "location": "features/step_definitions/additional_software_packages.rb:53"
            },
            "result": {
              "status": "passed",
              "duration": 473817966
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Additional Software\" via GNOME Activities Overview",
            "line": 67,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1205"
            },
            "result": {
              "status": "passed",
              "duration": 9314858753
            }
          },
          {
            "keyword": "And ",
            "name": "I remove \"cowsay\" from the list of Additional Software using Additional Software GUI",
            "line": 68,
            "match": {
              "location": "features/step_definitions/additional_software_packages.rb:102"
            },
            "result": {
              "status": "passed",
              "duration": 2692875789
            }
          },
          {
            "keyword": "Then ",
            "name": "\"cowsay\" is not in the list of Additional Software",
            "line": 69,
            "match": {
              "location": "features/step_definitions/additional_software_packages.rb:71"
            },
            "result": {
              "status": "passed",
              "duration": 632912711
            }
          },
          {
            "keyword": "When ",
            "name": "I install \"cowsay\" using apt",
            "line": 70,
            "match": {
              "location": "features/step_definitions/apt.rb:76"
            },
            "result": {
              "status": "passed",
              "duration": 3128265678
            }
          },
          {
            "keyword": "And ",
            "name": "I refuse adding \"cowsay\" to Additional Software",
            "line": 71,
            "match": {
              "location": "features/step_definitions/additional_software_packages.rb:79"
            },
            "result": {
              "status": "passed",
              "duration": 1457459285
            }
          },
          {
            "keyword": "Then ",
            "name": "\"cowsay\" is not in the list of Additional Software",
            "line": 72,
            "match": {
              "location": "features/step_definitions/additional_software_packages.rb:71"
            },
            "result": {
              "status": "passed",
              "duration": 373495692
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:535"
            },
            "result": {
              "status": "passed",
              "duration": 232380845
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 694524212
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 5254338
            }
          }
        ]
      },
      {
        "id": "additional-software;recovering-in-offline-mode-after-additional-software-previously-failed-to-upgrade-and-then-succeed-to-upgrade-when-online",
        "keyword": "Scenario",
        "name": "Recovering in offline mode after Additional Software previously failed to upgrade and then succeed to upgrade when online",
        "description": "",
        "line": 77,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 1
          },
          {
            "name": "@slow",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 76
          }
        ],
        "comments": [
          {
            "value": "# Depends on scenario: My Additional Software list is configurable through a GUI or through notifications when I install or remove packages with APT or Synaptic",
            "line": 74
          },
          {
            "value": "# See https://tails.net/blueprint/additional_software_packages/offline_mode/#incomplete-online-upgrade for high level logic",
            "line": 75
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 13514
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 1578005
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 1575920
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 78,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 72376342
            }
          },
          {
            "keyword": "And ",
            "name": "I start Tails from USB drive \"__internal\" and I login with persistence enabled and an administration password",
            "line": 79,
            "match": {
              "location": "features/step_definitions/common_steps.rb:235"
            },
            "result": {
              "status": "passed",
              "duration": 71716405973
            }
          },
          {
            "keyword": "And ",
            "name": "I configure APT to prefer an old version of cowsay",
            "line": 80,
            "match": {
              "location": "features/step_definitions/apt.rb:106"
            },
            "result": {
              "status": "passed",
              "duration": 4891601
            }
          },
          {
            "keyword": "When ",
            "name": "I install an old version \"3.03+dfsg2-1\" of the cowsay package using apt",
            "line": 81,
            "match": {
              "location": "features/step_definitions/apt.rb:112"
            },
            "result": {
              "status": "passed",
              "duration": 5771508354
            }
          },
          {
            "keyword": "And ",
            "name": "I accept adding \"cowsay\" to Additional Software",
            "line": 82,
            "match": {
              "location": "features/step_definitions/additional_software_packages.rb:79"
            },
            "result": {
              "status": "passed",
              "duration": 4063137252
            }
          },
          {
            "keyword": "And ",
            "name": "Additional Software is correctly configured for package \"cowsay\"",
            "line": 83,
            "match": {
              "location": "features/step_definitions/additional_software_packages.rb:53"
            },
            "result": {
              "status": "passed",
              "duration": 489128443
            }
          },
          {
            "keyword": "And ",
            "name": "I shutdown Tails and wait for the computer to power off",
            "line": 84,
            "match": {
              "location": "features/step_definitions/common_steps.rb:908"
            },
            "result": {
              "status": "passed",
              "duration": 3924339717
            }
          },
          {
            "keyword": "And ",
            "name": "I start Tails from USB drive \"__internal\" with network unplugged",
            "line": 85,
            "match": {
              "location": "features/step_definitions/common_steps.rb:235"
            },
            "result": {
              "status": "passed",
              "duration": 32426367951
            }
          },
          {
            "keyword": "And ",
            "name": "I enable persistence",
            "line": 86,
            "match": {
              "location": "features/step_definitions/usb.rb:728"
            },
            "result": {
              "status": "passed",
              "duration": 9865744369
            }
          },
          {
            "keyword": "And ",
            "name": "I configure APT to prefer an old version of cowsay",
            "line": 89,
            "comments": [
              {
                "value": "# We need to add back this custom APT source for the Additional Software",
                "line": 87
              },
              {
                "value": "# install step, as it was not saved in persistence",
                "line": 88
              }
            ],
            "match": {
              "location": "features/step_definitions/apt.rb:106"
            },
            "result": {
              "status": "passed",
              "duration": 4649809
            }
          },
          {
            "keyword": "And ",
            "name": "I disable the tails-virt-notify-user.service user unit",
            "line": 92,
            "comments": [
              {
                "value": "# Prevent the \"Warning: virtual machine detected!\" notification from racing",
                "line": 90
              },
              {
                "value": "# with the one we'll be interacting with below.",
                "line": 91
              }
            ],
            "match": {
              "location": "features/step_definitions/common_steps.rb:1703"
            },
            "result": {
              "status": "passed",
              "duration": 37832113
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session",
            "line": 93,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 7423297826
            }
          },
          {
            "keyword": "And ",
            "name": "the installed version of package \"cowsay\" is \"3.03+dfsg2-1\" after Additional Software has been installed",
            "line": 94,
            "match": {
              "location": "features/step_definitions/apt.rb:124"
            },
            "result": {
              "status": "passed",
              "duration": 10150122688
            }
          },
          {
            "keyword": "And ",
            "name": "I revert the APT tweaks that made it prefer an old version of cowsay",
            "line": 95,
            "match": {
              "location": "features/step_definitions/apt.rb:118"
            },
            "result": {
              "status": "passed",
              "duration": 34532775
            }
          },
          {
            "keyword": "And ",
            "name": "I prepare the Additional Software upgrade process to fail",
            "line": 98,
            "comments": [
              {
                "value": "# We remove the newest package after it has been downloaded and before",
                "line": 96
              },
              {
                "value": "# it is installed, so that the upgrade process fails",
                "line": 97
              }
            ],
            "match": {
              "location": "features/step_definitions/additional_software_packages.rb:115"
            },
            "result": {
              "status": "passed",
              "duration": 40874091
            }
          },
          {
            "keyword": "And ",
            "name": "the network is plugged",
            "line": 99,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 26569961
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 100,
            "match": {
              "location": "features/step_definitions/common_steps.rb:655"
            },
            "result": {
              "status": "passed",
              "duration": 10758792722
            }
          },
          {
            "keyword": "And ",
            "name": "available upgrades have been checked",
            "line": 101,
            "match": {
              "location": "features/step_definitions/common_steps.rb:763"
            },
            "result": {
              "status": "passed",
              "duration": 47743042
            }
          },
          {
            "keyword": "And ",
            "name": "I see the \"The upgrade of your additional software failed\" notification after at most 300 seconds",
            "line": 102,
            "match": {
              "location": "features/step_definitions/common_steps.rb:631"
            },
            "result": {
              "status": "passed",
              "duration": 2325061306
            }
          },
          {
            "keyword": "And ",
            "name": "I can open the Additional Software configuration window from the notification",
            "line": 103,
            "match": {
              "location": "features/step_definitions/additional_software_packages.rb:159"
            },
            "result": {
              "status": "passed",
              "duration": 2381052794
            }
          },
          {
            "keyword": "And ",
            "name": "I shutdown Tails and wait for the computer to power off",
            "line": 104,
            "match": {
              "location": "features/step_definitions/common_steps.rb:908"
            },
            "result": {
              "status": "passed",
              "duration": 12516638848
            }
          },
          {
            "keyword": "And ",
            "name": "I start Tails from USB drive \"__internal\" with network unplugged",
            "line": 105,
            "match": {
              "location": "features/step_definitions/common_steps.rb:235"
            },
            "result": {
              "status": "passed",
              "duration": 31703304957
            }
          },
          {
            "keyword": "And ",
            "name": "I enable persistence",
            "line": 106,
            "match": {
              "location": "features/step_definitions/usb.rb:728"
            },
            "result": {
              "status": "passed",
              "duration": 10770485230
            }
          },
          {
            "keyword": "And ",
            "name": "I configure APT to prefer an old version of cowsay",
            "line": 109,
            "comments": [
              {
                "value": "# We need to add back this custom APT source for the Additional Software",
                "line": 107
              },
              {
                "value": "# install step, as it was not saved in persistence",
                "line": 108
              }
            ],
            "match": {
              "location": "features/step_definitions/apt.rb:106"
            },
            "result": {
              "status": "passed",
              "duration": 4318530
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session",
            "line": 110,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 6505186525
            }
          },
          {
            "keyword": "And ",
            "name": "the installed version of package \"cowsay\" is \"3.03+dfsg2-1\" after Additional Software has been installed",
            "line": 111,
            "match": {
              "location": "features/step_definitions/apt.rb:124"
            },
            "result": {
              "status": "passed",
              "duration": 10139899695
            }
          },
          {
            "keyword": "And ",
            "name": "I revert the APT tweaks that made it prefer an old version of cowsay",
            "line": 112,
            "match": {
              "location": "features/step_definitions/apt.rb:118"
            },
            "result": {
              "status": "passed",
              "duration": 43564473
            }
          },
          {
            "keyword": "And ",
            "name": "the network is plugged",
            "line": 113,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 30064595
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 114,
            "match": {
              "location": "features/step_definitions/common_steps.rb:655"
            },
            "result": {
              "status": "passed",
              "duration": 12580961124
            }
          },
          {
            "keyword": "Then ",
            "name": "the Additional Software upgrade service has started",
            "line": 115,
            "match": {
              "location": "features/step_definitions/additional_software_packages.rb:1"
            },
            "result": {
              "status": "passed",
              "duration": 43332610
            }
          },
          {
            "keyword": "And ",
            "name": "the installed version of package \"cowsay\" is newer than \"3.03+dfsg2-1\"",
            "line": 116,
            "match": {
              "location": "features/step_definitions/apt.rb:124"
            },
            "result": {
              "status": "passed",
              "duration": 47960838
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:535"
            },
            "result": {
              "status": "passed",
              "duration": 297508727
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 754673702
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 12657044
            }
          }
        ]
      },
      {
        "id": "additional-software;i-am-notified-when-additional-software-fails-to-install-a-package",
        "keyword": "Scenario",
        "name": "I am notified when Additional Software fails to install a package",
        "description": "",
        "line": 120,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 1
          },
          {
            "name": "@slow",
            "line": 1
          },
          {
            "name": "@not_release_blocker_inherited",
            "line": 119
          }
        ],
        "comments": [
          {
            "value": "# Depends on scenario: Recovering in offline mode after Additional Software previously failed to upgrade and then succeed to upgrade when online",
            "line": 118
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 14736
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 1431533
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 1649980
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 121,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 76857534
            }
          },
          {
            "keyword": "And ",
            "name": "I start Tails from USB drive \"__internal\" with network unplugged",
            "line": 122,
            "match": {
              "location": "features/step_definitions/common_steps.rb:235"
            },
            "result": {
              "status": "passed",
              "duration": 32757941753
            }
          },
          {
            "keyword": "And ",
            "name": "I enable persistence",
            "line": 123,
            "match": {
              "location": "features/step_definitions/usb.rb:728"
            },
            "result": {
              "status": "passed",
              "duration": 10623702478
            }
          },
          {
            "keyword": "And ",
            "name": "I remove the \"cowsay\" deb files from the APT cache",
            "line": 124,
            "match": {
              "location": "features/step_definitions/additional_software_packages.rb:128"
            },
            "result": {
              "status": "passed",
              "duration": 32935825
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session",
            "line": 125,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 7419243301
            }
          },
          {
            "keyword": "Then ",
            "name": "I see the \"The installation of your additional software failed\" notification after at most 300 seconds",
            "line": 126,
            "match": {
              "location": "features/step_definitions/common_steps.rb:631"
            },
            "result": {
              "status": "passed",
              "duration": 7518118052
            }
          },
          {
            "keyword": "And ",
            "name": "I can open the Additional Software log file from the notification",
            "line": 127,
            "match": {
              "location": "features/step_definitions/additional_software_packages.rb:164"
            },
            "result": {
              "status": "passed",
              "duration": 5693585554
            }
          },
          {
            "keyword": "And ",
            "name": "the package \"cowsay\" is not installed",
            "line": 128,
            "match": {
              "location": "features/step_definitions/common_steps.rb:956"
            },
            "result": {
              "status": "passed",
              "duration": 268095072
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:535"
            },
            "result": {
              "status": "passed",
              "duration": 244961915
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 559051395
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 5169339
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/usb_upgrade.feature",
    "id": "upgrading-an-old-tails-usb-installation",
    "keyword": "Feature",
    "name": "Upgrading an old Tails USB installation",
    "description": "  As a Tails user\n  If I have an old version of Tails installed on a USB device\n  and the USB device has a Persistent Storage\n  I want to upgrade Tails on it\n  and keep my Persistent Storage in the process",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "upgrading-an-old-tails-usb-installation;installing-an-old-version-of-tails-to-a-pristine-usb-drive",
        "keyword": "Scenario",
        "name": "Installing an old version of Tails to a pristine USB drive",
        "description": "",
        "line": 20,
        "type": "scenario",
        "comments": [
          {
            "value": "# An issue with this feature is that scenarios depend on each",
            "line": 9
          },
          {
            "value": "# other. When editing this feature, make sure you understand these",
            "line": 10
          },
          {
            "value": "# dependencies (which are documented below).",
            "line": 11
          },
          {
            "value": "# Installation method inspired by the usb-install-tails-greeter",
            "line": 13
          },
          {
            "value": "# checkpoint, variations are using the old Tails USB image and a",
            "line": 14
          },
          {
            "value": "# different device name (\"old\" instead of \"__internal\")",
            "line": 15
          },
          {
            "value": "#",
            "line": 16
          },
          {
            "value": "# Boot the system to make sure resizing has happened, and to check",
            "line": 17
          },
          {
            "value": "# the system is sane (safe access rights, no persistence, etc.); end",
            "line": 18
          },
          {
            "value": "# with unplugging to get both a clean state and a stopped machine.",
            "line": 19
          }
        ],
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 11471
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 1497244
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 21,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 69803269
            }
          },
          {
            "keyword": "And ",
            "name": "I create a 7200 MiB disk named \"old\"",
            "line": 22,
            "match": {
              "location": "features/step_definitions/common_steps.rb:114"
            },
            "result": {
              "status": "passed",
              "duration": 36208563
            }
          },
          {
            "keyword": "And ",
            "name": "I plug USB drive \"old\"",
            "line": 23,
            "match": {
              "location": "features/step_definitions/common_steps.rb:126"
            },
            "result": {
              "status": "passed",
              "duration": 1025806290
            }
          },
          {
            "keyword": "And ",
            "name": "I write an old version of the Tails USB image to disk \"old\"",
            "line": 24,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1794"
            },
            "result": {
              "status": "passed",
              "duration": 13033733116
            }
          },
          {
            "keyword": "When ",
            "name": "I start Tails from USB drive \"old\" with network unplugged",
            "line": 25,
            "match": {
              "location": "features/step_definitions/common_steps.rb:235"
            },
            "result": {
              "status": "passed",
              "duration": 51475529920
            }
          },
          {
            "keyword": "Then ",
            "name": "the boot device has safe access rights",
            "line": 26,
            "match": {
              "location": "features/step_definitions/usb.rb:956"
            },
            "result": {
              "status": "passed",
              "duration": 1964398121
            }
          },
          {
            "keyword": "And ",
            "name": "Tails is running from USB drive \"old\"",
            "line": 27,
            "match": {
              "location": "features/step_definitions/usb.rb:942"
            },
            "result": {
              "status": "passed",
              "duration": 182301770
            }
          },
          {
            "keyword": "And ",
            "name": "there is no persistence partition on USB drive \"old\"",
            "line": 28,
            "match": {
              "location": "features/step_definitions/usb.rb:613"
            },
            "result": {
              "status": "passed",
              "duration": 41772309
            }
          },
          {
            "keyword": "And ",
            "name": "process \"udev-watchdog\" is running",
            "line": 29,
            "match": {
              "location": "features/step_definitions/common_steps.rb:861"
            },
            "result": {
              "status": "passed",
              "duration": 36667060
            }
          },
          {
            "keyword": "And ",
            "name": "udev-watchdog is monitoring the correct device",
            "line": 30,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:23"
            },
            "result": {
              "status": "passed",
              "duration": 163822447
            }
          },
          {
            "keyword": "And ",
            "name": "I unplug USB drive \"old\"",
            "line": 31,
            "match": {
              "location": "features/step_definitions/usb.rb:128"
            },
            "result": {
              "status": "passed",
              "duration": 106342739
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 3389796000
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 22418725
            }
          }
        ]
      },
      {
        "id": "upgrading-an-old-tails-usb-installation;creating-a-persistent-partition-with-the-old-tails-usb-installation",
        "keyword": "Scenario",
        "name": "Creating a persistent partition with the old Tails USB installation",
        "description": "",
        "line": 34,
        "type": "scenario",
        "comments": [
          {
            "value": "# Depends on scenario: Installing an old version of Tails to a pristine USB drive",
            "line": 33
          }
        ],
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 12053
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 1854351
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 35,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 73707034
            }
          },
          {
            "keyword": "And ",
            "name": "I start Tails from USB drive \"old\" with network unplugged and I login",
            "line": 36,
            "match": {
              "location": "features/step_definitions/common_steps.rb:235"
            },
            "result": {
              "status": "passed",
              "duration": 45470975856
            }
          },
          {
            "keyword": "Then ",
            "name": "Tails is running from USB drive \"old\"",
            "line": 37,
            "match": {
              "location": "features/step_definitions/usb.rb:942"
            },
            "result": {
              "status": "passed",
              "duration": 208626654
            }
          },
          {
            "keyword": "And ",
            "name": "I create a persistent partition",
            "line": 38,
            "match": {
              "location": "features/step_definitions/usb.rb:349"
            },
            "result": {
              "status": "passed",
              "duration": 22637835792
            }
          },
          {
            "keyword": "And ",
            "name": "I take note of which tps features are available",
            "line": 39,
            "match": {
              "location": "features/step_definitions/usb.rb:1122"
            },
            "result": {
              "status": "passed",
              "duration": 6072014051
            }
          },
          {
            "keyword": "Then ",
            "name": "a Tails persistence partition exists on USB drive \"old\"",
            "line": 40,
            "match": {
              "location": "features/step_definitions/usb.rb:655"
            },
            "result": {
              "status": "passed",
              "duration": 453454305
            }
          },
          {
            "keyword": "And ",
            "name": "I shutdown Tails and wait for the computer to power off",
            "line": 41,
            "match": {
              "location": "features/step_definitions/common_steps.rb:908"
            },
            "result": {
              "status": "passed",
              "duration": 2611910585
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 305836512
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 5391893
            }
          }
        ]
      },
      {
        "id": "upgrading-an-old-tails-usb-installation;writing-files-to-a-read/write-enabled-persistent-partition-with-the-old-tails-usb-installation",
        "keyword": "Scenario",
        "name": "Writing files to a read/write-enabled persistent partition with the old Tails USB installation",
        "description": "",
        "line": 44,
        "type": "scenario",
        "comments": [
          {
            "value": "# Depends on scenario: Creating a persistent partition with the old Tails USB installation",
            "line": 43
          }
        ],
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 13735
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 1382431
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 45,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 83055385
            }
          },
          {
            "keyword": "And ",
            "name": "I start Tails from USB drive \"old\" with network unplugged and I login with persistence enabled",
            "line": 46,
            "match": {
              "location": "features/step_definitions/common_steps.rb:235"
            },
            "result": {
              "status": "passed",
              "duration": 57260513965
            }
          },
          {
            "keyword": "Then ",
            "name": "Tails is running from USB drive \"old\"",
            "line": 47,
            "match": {
              "location": "features/step_definitions/usb.rb:942"
            },
            "result": {
              "status": "passed",
              "duration": 314981842
            }
          },
          {
            "keyword": "And ",
            "name": "all tps features are active",
            "line": 48,
            "match": {
              "location": "features/step_definitions/usb.rb:785"
            },
            "result": {
              "status": "passed",
              "duration": 6556319757
            }
          },
          {
            "keyword": "When ",
            "name": "I write some files expected to persist",
            "line": 49,
            "match": {
              "location": "features/step_definitions/usb.rb:1082"
            },
            "result": {
              "status": "passed",
              "duration": 980784639
            }
          },
          {
            "keyword": "And ",
            "name": "all persistent filesystems have safe access rights",
            "line": 51,
            "comments": [
              {
                "value": "# Verify that our baseline for the next scenarios is sane",
                "line": 50
              }
            ],
            "match": {
              "location": "features/step_definitions/usb.rb:999"
            },
            "result": {
              "status": "passed",
              "duration": 137222839
            }
          },
          {
            "keyword": "And ",
            "name": "all persistence configuration files have safe access rights",
            "line": 52,
            "match": {
              "location": "features/step_definitions/usb.rb:1016"
            },
            "result": {
              "status": "passed",
              "duration": 295196092
            }
          },
          {
            "keyword": "And ",
            "name": "all persistent directories from the old Tails version have safe access rights",
            "line": 53,
            "match": {
              "location": "features/step_definitions/usb.rb:1044"
            },
            "result": {
              "status": "passed",
              "duration": 1594235559
            }
          },
          {
            "keyword": "And ",
            "name": "I take note of which tps features are available",
            "line": 54,
            "match": {
              "location": "features/step_definitions/usb.rb:1122"
            },
            "result": {
              "status": "passed",
              "duration": 6088282043
            }
          },
          {
            "keyword": "And ",
            "name": "I shutdown Tails and wait for the computer to power off",
            "line": 55,
            "match": {
              "location": "features/step_definitions/common_steps.rb:908"
            },
            "result": {
              "status": "passed",
              "duration": 2586934655
            }
          },
          {
            "keyword": "Then ",
            "name": "only the expected files are present on the persistence partition on USB drive \"old\"",
            "line": 57,
            "comments": [
              {
                "value": "# XXX: how does guestfs work vs snapshots? (tails/tails#10330)",
                "line": 56
              }
            ],
            "match": {
              "location": "features/step_definitions/usb.rb:1161"
            },
            "result": {
              "status": "passed",
              "duration": 11013780523
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 422333085
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 5757897
            }
          }
        ]
      },
      {
        "id": "upgrading-an-old-tails-usb-installation;upgrading-an-old-tails-usb-installation-from-another-tails-usb-drive",
        "keyword": "Scenario",
        "name": "Upgrading an old Tails USB installation from another Tails USB drive",
        "description": "",
        "line": 60,
        "type": "scenario",
        "comments": [
          {
            "value": "# Depends on scenario: Writing files to a read/write-enabled persistent partition with the old Tails USB installation",
            "line": 59
          }
        ],
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 11571
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 1498767
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive without a persistent partition and stopped at Tails Greeter's login screen",
            "line": 61,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 8467788958
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session",
            "line": 62,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 11342215056
            }
          },
          {
            "keyword": "And ",
            "name": "I clone USB drive \"old\" to a new USB drive \"to_upgrade\"",
            "line": 63,
            "match": {
              "location": "features/step_definitions/usb.rb:121"
            },
            "result": {
              "status": "passed",
              "duration": 581246833
            }
          },
          {
            "keyword": "And ",
            "name": "I plug USB drive \"to_upgrade\"",
            "line": 64,
            "match": {
              "location": "features/step_definitions/common_steps.rb:126"
            },
            "result": {
              "status": "passed",
              "duration": 2236794417
            }
          },
          {
            "keyword": "When ",
            "name": "I upgrade Tails to USB drive \"to_upgrade\" by cloning",
            "line": 65,
            "match": {
              "location": "features/step_definitions/usb.rb:194"
            },
            "result": {
              "status": "passed",
              "duration": 90470572495
            }
          },
          {
            "keyword": "Then ",
            "name": "the running Tails is installed on USB drive \"to_upgrade\"",
            "line": 66,
            "match": {
              "location": "features/step_definitions/usb.rb:608"
            },
            "result": {
              "status": "passed",
              "duration": 17930299809
            }
          },
          {
            "keyword": "And ",
            "name": "I unplug USB drive \"to_upgrade\"",
            "line": 67,
            "match": {
              "location": "features/step_definitions/usb.rb:128"
            },
            "result": {
              "status": "passed",
              "duration": 137035047
            }
          },
          {
            "keyword": "And ",
            "name": "I unplug USB drive \"__internal\"",
            "line": 68,
            "match": {
              "location": "features/step_definitions/usb.rb:128"
            },
            "result": {
              "status": "passed",
              "duration": 123722941
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 1676256448
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 18443
            }
          }
        ]
      },
      {
        "id": "upgrading-an-old-tails-usb-installation;booting-tails-from-a-usb-drive-upgraded-from-usb-with-persistence-enabled",
        "keyword": "Scenario",
        "name": "Booting Tails from a USB drive upgraded from USB with persistence enabled",
        "description": "",
        "line": 71,
        "type": "scenario",
        "comments": [
          {
            "value": "# Depends on scenario: Upgrading an old Tails USB installation from another Tails USB drive",
            "line": 70
          }
        ],
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 10009
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2567321
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 72,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 71532375
            }
          },
          {
            "keyword": "And ",
            "name": "I start Tails from USB drive \"to_upgrade\" with network unplugged and I login with persistence enabled",
            "line": 73,
            "match": {
              "location": "features/step_definitions/common_steps.rb:235"
            },
            "result": {
              "status": "passed",
              "duration": 58584807942
            }
          },
          {
            "keyword": "Then ",
            "name": "all tps features from the old Tails version are active",
            "line": 74,
            "match": {
              "location": "features/step_definitions/usb.rb:785"
            },
            "result": {
              "status": "passed",
              "duration": 963676862
            }
          },
          {
            "keyword": "And ",
            "name": "Tails is running from USB drive \"to_upgrade\"",
            "line": 75,
            "match": {
              "location": "features/step_definitions/usb.rb:942"
            },
            "result": {
              "status": "passed",
              "duration": 180477664
            }
          },
          {
            "keyword": "And ",
            "name": "the boot device has safe access rights",
            "line": 76,
            "match": {
              "location": "features/step_definitions/usb.rb:956"
            },
            "result": {
              "status": "passed",
              "duration": 1906476116
            }
          },
          {
            "keyword": "And ",
            "name": "the expected persistent files created with the old Tails version are present in the filesystem",
            "line": 77,
            "match": {
              "location": "features/step_definitions/usb.rb:1128"
            },
            "result": {
              "status": "passed",
              "duration": 893644766
            }
          },
          {
            "keyword": "And ",
            "name": "all persistent directories from the old Tails version have safe access rights",
            "line": 78,
            "match": {
              "location": "features/step_definitions/usb.rb:1044"
            },
            "result": {
              "status": "passed",
              "duration": 1410125501
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 614477697
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 5925109
            }
          }
        ]
      },
      {
        "id": "upgrading-an-old-tails-usb-installation;upgrading-an-initial-tails-installation-with-an-incremental-upgrade",
        "keyword": "Scenario",
        "name": "Upgrading an initial Tails installation with an incremental upgrade",
        "description": "",
        "line": 81,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@automatic_upgrade",
            "line": 80
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 14086
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 1436872
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition enabled and logged in",
            "line": 82,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 7963389690
            }
          },
          {
            "keyword": "And ",
            "name": "no SquashFS delta is installed",
            "line": 83,
            "match": {
              "location": "features/step_definitions/usb.rb:1450"
            },
            "result": {
              "status": "passed",
              "duration": 83316580
            }
          },
          {
            "keyword": "And ",
            "name": "Tails is fooled to think that version 6.0~testoverlayfs was initially installed",
            "line": 84,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1484"
            },
            "result": {
              "status": "passed",
              "duration": 191602717
            }
          },
          {
            "keyword": "And ",
            "name": "Tails is fooled to think it is running version 6.0~testoverlayfs",
            "line": 85,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1476"
            },
            "result": {
              "status": "passed",
              "duration": 24635102
            }
          },
          {
            "keyword": "And ",
            "name": "the file system changes introduced in version 6.2~testoverlayfs are not present",
            "line": 86,
            "match": {
              "location": "features/step_definitions/usb.rb:1298"
            },
            "result": {
              "status": "passed",
              "duration": 1206486759
            }
          },
          {
            "keyword": "And ",
            "name": "the file system changes introduced in version 6.3~testoverlayfs are not present",
            "line": 87,
            "match": {
              "location": "features/step_definitions/usb.rb:1298"
            },
            "result": {
              "status": "passed",
              "duration": 321024305
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 88,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 36590367
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 89,
            "match": {
              "location": "features/step_definitions/common_steps.rb:655"
            },
            "result": {
              "status": "passed",
              "duration": 13516483720
            }
          },
          {
            "keyword": "Then ",
            "name": "I am proposed to install an incremental upgrade to version 6.2~testoverlayfs",
            "line": 90,
            "match": {
              "location": "features/step_definitions/usb.rb:1334"
            },
            "result": {
              "status": "passed",
              "duration": 318105638
            }
          },
          {
            "keyword": "And ",
            "name": "I can successfully install the incremental upgrade to version 6.2~testoverlayfs",
            "line": 91,
            "match": {
              "location": "features/step_definitions/usb.rb:1353"
            },
            "result": {
              "status": "passed",
              "duration": 5274891835
            }
          },
          {
            "keyword": "Given ",
            "name": "I shutdown Tails and wait for the computer to power off",
            "line": 92,
            "match": {
              "location": "features/step_definitions/common_steps.rb:908"
            },
            "result": {
              "status": "passed",
              "duration": 5299600353
            }
          },
          {
            "keyword": "When ",
            "name": "I start Tails from USB drive \"__internal\" with network unplugged and I login with persistence enabled",
            "line": 93,
            "match": {
              "location": "features/step_definitions/common_steps.rb:235"
            },
            "result": {
              "status": "passed",
              "duration": 61488044239
            }
          },
          {
            "keyword": "Then ",
            "name": "Tails is running version 6.2~testoverlayfs",
            "line": 94,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1507"
            },
            "result": {
              "status": "passed",
              "duration": 5712111
            }
          },
          {
            "keyword": "And ",
            "name": "all tps features are active",
            "line": 95,
            "match": {
              "location": "features/step_definitions/usb.rb:785"
            },
            "result": {
              "status": "passed",
              "duration": 7281847574
            }
          },
          {
            "keyword": "And ",
            "name": "the file system changes introduced in version 6.2~testoverlayfs are present",
            "line": 96,
            "match": {
              "location": "features/step_definitions/usb.rb:1298"
            },
            "result": {
              "status": "passed",
              "duration": 175974959
            }
          },
          {
            "keyword": "And ",
            "name": "only the 6.2~testoverlayfs SquashFS delta is installed",
            "line": 97,
            "match": {
              "location": "features/step_definitions/usb.rb:1450"
            },
            "result": {
              "status": "passed",
              "duration": 37755722
            }
          },
          {
            "keyword": "Given ",
            "name": "Tails system time is magically synchronized",
            "line": 99,
            "comments": [
              {
                "value": "# Our IUK sets a release date that can make Tor bootstrapping impossible",
                "line": 98
              }
            ],
            "match": {
              "location": "features/step_definitions/common_steps.rb:1618"
            },
            "result": {
              "status": "passed",
              "duration": 106936128
            }
          },
          {
            "keyword": "And ",
            "name": "Tails is fooled to think that version 6.1~testoverlayfs was initially installed",
            "line": 103,
            "comments": [
              {
                "value": "# We'll really install Tails_amd64_6.0~testoverlayfs_to_6.3~testoverlayfs.iuk",
                "line": 100
              },
              {
                "value": "# but we need some way to force upgrading a second time in a row",
                "line": 101
              },
              {
                "value": "# even if only the initially installed version is considered",
                "line": 102
              }
            ],
            "match": {
              "location": "features/step_definitions/common_steps.rb:1484"
            },
            "result": {
              "status": "passed",
              "duration": 167561706
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 104,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 34821975
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 105,
            "match": {
              "location": "features/step_definitions/common_steps.rb:655"
            },
            "result": {
              "status": "passed",
              "duration": 10127200233
            }
          },
          {
            "keyword": "Then ",
            "name": "I am proposed to install an incremental upgrade to version 6.3~testoverlayfs",
            "line": 106,
            "match": {
              "location": "features/step_definitions/usb.rb:1334"
            },
            "result": {
              "status": "passed",
              "duration": 830795528
            }
          },
          {
            "keyword": "And ",
            "name": "I can successfully install the incremental upgrade to version 6.3~testoverlayfs",
            "line": 107,
            "match": {
              "location": "features/step_definitions/usb.rb:1353"
            },
            "result": {
              "status": "passed",
              "duration": 3398262368
            }
          },
          {
            "keyword": "Given ",
            "name": "I shutdown Tails and wait for the computer to power off",
            "line": 108,
            "match": {
              "location": "features/step_definitions/common_steps.rb:908"
            },
            "result": {
              "status": "passed",
              "duration": 2547953129
            }
          },
          {
            "keyword": "When ",
            "name": "I start Tails from USB drive \"__internal\" with network unplugged and I login with persistence enabled",
            "line": 109,
            "match": {
              "location": "features/step_definitions/common_steps.rb:235"
            },
            "result": {
              "status": "passed",
              "duration": 60657056893
            }
          },
          {
            "keyword": "Then ",
            "name": "Tails is running version 6.3~testoverlayfs",
            "line": 110,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1507"
            },
            "result": {
              "status": "passed",
              "duration": 5213039
            }
          },
          {
            "keyword": "And ",
            "name": "all tps features are active",
            "line": 111,
            "match": {
              "location": "features/step_definitions/usb.rb:785"
            },
            "result": {
              "status": "passed",
              "duration": 7690390133
            }
          },
          {
            "keyword": "And ",
            "name": "the file system changes introduced in version 6.3~testoverlayfs are present",
            "line": 112,
            "match": {
              "location": "features/step_definitions/usb.rb:1298"
            },
            "result": {
              "status": "passed",
              "duration": 246450112
            }
          },
          {
            "keyword": "And ",
            "name": "only the 6.3~testoverlayfs SquashFS delta is installed",
            "line": 113,
            "match": {
              "location": "features/step_definitions/usb.rb:1450"
            },
            "result": {
              "status": "passed",
              "duration": 63690909
            }
          },
          {
            "keyword": "Given ",
            "name": "Tails system time is magically synchronized",
            "line": 116,
            "comments": [
              {
                "value": "# Regression test for #17425 (i.e. the Upgrader would propose",
                "line": 114
              },
              {
                "value": "# upgrading to the version that's already running)",
                "line": 115
              }
            ],
            "match": {
              "location": "features/step_definitions/common_steps.rb:1618"
            },
            "result": {
              "status": "passed",
              "duration": 153026656
            }
          },
          {
            "keyword": "And ",
            "name": "Tails is fooled to think that version 6.1~testoverlayfs was initially installed",
            "line": 117,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1484"
            },
            "result": {
              "status": "passed",
              "duration": 156636815
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 118,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 36311685
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 119,
            "match": {
              "location": "features/step_definitions/common_steps.rb:655"
            },
            "result": {
              "status": "passed",
              "duration": 19725262021
            }
          },
          {
            "keyword": "Then ",
            "name": "the Upgrader considers the system as up-to-date",
            "line": 120,
            "match": {
              "location": "features/step_definitions/usb.rb:1420"
            },
            "result": {
              "status": "passed",
              "duration": 108979147
            }
          },
          {
            "keyword": "And ",
            "name": "I successfully start the Unsafe Browser",
            "line": 122,
            "comments": [
              {
                "value": "# Regression test on #8158 (i.e. the IUK's filesystem is not part of the Unsafe Browser's chroot)",
                "line": 121
              }
            ],
            "match": {
              "location": "features/step_definitions/browser.rb:110"
            },
            "result": {
              "status": "passed",
              "duration": 3189652140
            }
          },
          {
            "keyword": "And ",
            "name": "the file system changes introduced in version 6.3~testoverlayfs are present in the Unsafe Browser's chroot",
            "line": 123,
            "match": {
              "location": "features/step_definitions/usb.rb:1298"
            },
            "result": {
              "status": "passed",
              "duration": 294995844
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 493658735
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 42661466
            }
          }
        ]
      },
      {
        "id": "upgrading-an-old-tails-usb-installation;upgrading-a-tails-whose-signing-key-is-outdated",
        "keyword": "Scenario",
        "name": "Upgrading a Tails whose signing key is outdated",
        "description": "",
        "line": 126,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@automatic_upgrade",
            "line": 125
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 14215
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 1355218
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition enabled and logged in",
            "line": 127,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 7554742873
            }
          },
          {
            "keyword": "And ",
            "name": "Tails is fooled to think that version 6.0~testoverlayfs was initially installed",
            "line": 128,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1484"
            },
            "result": {
              "status": "passed",
              "duration": 195358172
            }
          },
          {
            "keyword": "And ",
            "name": "Tails is fooled to think it is running version 6.0~testoverlayfs",
            "line": 129,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1476"
            },
            "result": {
              "status": "passed",
              "duration": 54529929
            }
          },
          {
            "keyword": "And ",
            "name": "the signing key used by the Upgrader is outdated",
            "line": 130,
            "match": {
              "location": "features/step_definitions/usb.rb:1433"
            },
            "result": {
              "status": "passed",
              "duration": 49612541
            }
          },
          {
            "keyword": "But ",
            "name": "a current signing key is available on our website",
            "line": 131,
            "match": {
              "location": "features/step_definitions/usb.rb:1444"
            },
            "result": {
              "status": "passed",
              "duration": 20558
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 132,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 32192696
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 133,
            "match": {
              "location": "features/step_definitions/common_steps.rb:655"
            },
            "result": {
              "status": "passed",
              "duration": 8263743018
            }
          },
          {
            "keyword": "Then ",
            "name": "I am proposed to install an incremental upgrade to version 6.2~testoverlayfs",
            "line": 134,
            "match": {
              "location": "features/step_definitions/usb.rb:1334"
            },
            "result": {
              "status": "passed",
              "duration": 1488944878
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 562025390
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 21850
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/emergency_shutdown.feature",
    "id": "emergency-shutdown",
    "keyword": "Feature",
    "name": "Emergency shutdown",
    "description": "  As a Tails user\n  when I unplug my Tails device to trigger emergency shutdown\n  I want the system memory to be free from sensitive data.",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      },
      {
        "name": "@not_release_blocker",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "emergency-shutdown;tails-shuts-down-on-dvd-boot-medium-removal",
        "keyword": "Scenario",
        "name": "Tails shuts down on DVD boot medium removal",
        "description": "",
        "line": 11,
        "type": "scenario",
        "comments": [
          {
            "value": "# Test something close to real-world usage, without interfering,",
            "line": 7
          },
          {
            "value": "# i.e. without the \"I prepare Tails for memory erasure tests\" step;",
            "line": 8
          },
          {
            "value": "# and test that Tails eventually shuts down, which we don't do in",
            "line": 9
          },
          {
            "value": "# the following scenarios for test suite performance reasons.",
            "line": 10
          }
        ],
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 18325
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 11654603
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 12,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 46981744335
            }
          },
          {
            "keyword": "When ",
            "name": "I eject the boot medium",
            "line": 13,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1462"
            },
            "result": {
              "status": "passed",
              "duration": 121842738
            }
          },
          {
            "keyword": "Then ",
            "name": "Tails eventually shuts down",
            "line": 14,
            "match": {
              "location": "features/step_definitions/common_steps.rb:890"
            },
            "result": {
              "status": "passed",
              "duration": 8905501489
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 291566514
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 19968
            }
          }
        ]
      },
      {
        "id": "emergency-shutdown;tails-erases-memory-on-dvd-boot-medium-removal:-overlayfs-read-write-branch",
        "keyword": "Scenario",
        "name": "Tails erases memory on DVD boot medium removal: overlayfs read-write branch",
        "description": "",
        "line": 16,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 13065
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2372086
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 17,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6202120417
            }
          },
          {
            "keyword": "And ",
            "name": "I prepare Tails for memory erasure tests",
            "line": 18,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:66"
            },
            "result": {
              "status": "passed",
              "duration": 315081033
            }
          },
          {
            "keyword": "And ",
            "name": "I fill a 128 MiB file with a known pattern on the root filesystem",
            "line": 19,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:235"
            },
            "result": {
              "status": "passed",
              "duration": 13146177215
            }
          },
          {
            "keyword": "And ",
            "name": "patterns cover at least 128 MiB in the guest's memory",
            "line": 20,
            "output": [
              "Pattern coverage: 100.000% (128 MiB out of 128 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:182"
            },
            "result": {
              "status": "passed",
              "duration": 2974411537
            }
          },
          {
            "keyword": "When ",
            "name": "I eject the boot medium",
            "line": 21,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1462"
            },
            "result": {
              "status": "passed",
              "duration": 197328871
            }
          },
          {
            "keyword": "And ",
            "name": "I wait for Tails to finish wiping the memory",
            "line": 22,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:231"
            },
            "result": {
              "status": "passed",
              "duration": 3806700197
            }
          },
          {
            "keyword": "Then ",
            "name": "I find very few patterns in the guest's memory",
            "line": 23,
            "output": [
              "Pattern coverage: 0.000% (0 MiB out of 1400 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:214"
            },
            "result": {
              "status": "passed",
              "duration": 734638209
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 3644502298
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 21641
            }
          }
        ]
      },
      {
        "id": "emergency-shutdown;tails-erases-memory-on-dvd-boot-medium-removal:-vfat",
        "keyword": "Scenario",
        "name": "Tails erases memory on DVD boot medium removal: vfat",
        "description": "",
        "line": 25,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 11552
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2316224
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 26,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6566538026
            }
          },
          {
            "keyword": "And ",
            "name": "I prepare Tails for memory erasure tests",
            "line": 27,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:66"
            },
            "result": {
              "status": "passed",
              "duration": 327835078
            }
          },
          {
            "keyword": "And ",
            "name": "I plug and mount a 128 MiB USB drive with a vfat filesystem",
            "line": 28,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1570"
            },
            "result": {
              "status": "passed",
              "duration": 5294855823
            }
          },
          {
            "keyword": "And ",
            "name": "I fill the USB drive with a known pattern",
            "line": 29,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:158"
            },
            "result": {
              "status": "passed",
              "duration": 2495799334
            }
          },
          {
            "keyword": "And ",
            "name": "I read the content of the test FS",
            "line": 30,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:162"
            },
            "result": {
              "status": "passed",
              "duration": 46920838
            }
          },
          {
            "keyword": "And ",
            "name": "patterns cover at least 90% of the test FS size in the guest's memory",
            "line": 31,
            "output": [
              "Pattern coverage: 100.000% (127 MiB out of 127 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:166"
            },
            "result": {
              "status": "passed",
              "duration": 3102408790
            }
          },
          {
            "keyword": "When ",
            "name": "I eject the boot medium",
            "line": 32,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1462"
            },
            "result": {
              "status": "passed",
              "duration": 261937952
            }
          },
          {
            "keyword": "And ",
            "name": "I wait for Tails to finish wiping the memory",
            "line": 33,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:231"
            },
            "result": {
              "status": "passed",
              "duration": 4298732316
            }
          },
          {
            "keyword": "Then ",
            "name": "I find very few patterns in the guest's memory",
            "line": 34,
            "output": [
              "Pattern coverage: 0.000% (0 MiB out of 1402 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:214"
            },
            "result": {
              "status": "passed",
              "duration": 831617489
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 3783783515
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 518608
            }
          }
        ]
      },
      {
        "id": "emergency-shutdown;tails-erases-memory-on-dvd-boot-medium-removal:-luks-encrypted-ext4",
        "keyword": "Scenario",
        "name": "Tails erases memory on DVD boot medium removal: LUKS-encrypted ext4",
        "description": "",
        "line": 36,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 12343
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2307577
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 37,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6435997164
            }
          },
          {
            "keyword": "And ",
            "name": "I prepare Tails for memory erasure tests",
            "line": 38,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:66"
            },
            "result": {
              "status": "passed",
              "duration": 253256849
            }
          },
          {
            "keyword": "And ",
            "name": "I plug and mount a 128 MiB USB drive with an ext4 filesystem encrypted with password \"asdf\"",
            "line": 39,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1570"
            },
            "result": {
              "status": "passed",
              "duration": 28702951545
            }
          },
          {
            "keyword": "And ",
            "name": "I fill the USB drive with a known pattern",
            "line": 40,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:158"
            },
            "result": {
              "status": "passed",
              "duration": 941641768
            }
          },
          {
            "keyword": "And ",
            "name": "I read the content of the test FS",
            "line": 41,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:162"
            },
            "result": {
              "status": "passed",
              "duration": 38764001
            }
          },
          {
            "keyword": "And ",
            "name": "patterns cover at least 99% of the test FS size in the guest's memory",
            "line": 42,
            "output": [
              "Pattern coverage: 106.115% (97 MiB out of 91 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:166"
            },
            "result": {
              "status": "passed",
              "duration": 2596475895
            }
          },
          {
            "keyword": "When ",
            "name": "I eject the boot medium",
            "line": 43,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1462"
            },
            "result": {
              "status": "passed",
              "duration": 220602220
            }
          },
          {
            "keyword": "And ",
            "name": "I wait for Tails to finish wiping the memory",
            "line": 44,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:231"
            },
            "result": {
              "status": "passed",
              "duration": 3763064652
            }
          },
          {
            "keyword": "Then ",
            "name": "I find very few patterns in the guest's memory",
            "line": 45,
            "output": [
              "Pattern coverage: 0.000% (0 MiB out of 1400 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:214"
            },
            "result": {
              "status": "passed",
              "duration": 745588927
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 3864080247
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 465178
            }
          }
        ]
      },
      {
        "id": "emergency-shutdown;tails-erases-memory-and-shuts-down-on-usb-boot-medium-removal:-persistent-data",
        "keyword": "Scenario",
        "name": "Tails erases memory and shuts down on USB boot medium removal: persistent data",
        "description": "",
        "line": 47,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 12293
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2037123
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition enabled and logged in",
            "line": 48,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 7745333838
            }
          },
          {
            "keyword": "And ",
            "name": "I prepare Tails for memory erasure tests",
            "line": 49,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:66"
            },
            "result": {
              "status": "passed",
              "duration": 296477811
            }
          },
          {
            "keyword": "And ",
            "name": "I fill a 128 MiB file with a known pattern on the persistent filesystem",
            "line": 50,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:235"
            },
            "result": {
              "status": "passed",
              "duration": 11291444929
            }
          },
          {
            "keyword": "And ",
            "name": "patterns cover at least 100 MiB in the guest's memory",
            "line": 51,
            "output": [
              "Pattern coverage: 128.000% (128 MiB out of 100 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:182"
            },
            "result": {
              "status": "passed",
              "duration": 2649895804
            }
          },
          {
            "keyword": "When ",
            "name": "I eject the boot medium",
            "line": 52,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1462"
            },
            "result": {
              "status": "passed",
              "duration": 289986313
            }
          },
          {
            "keyword": "And ",
            "name": "I wait for Tails to finish wiping the memory",
            "line": 53,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:231"
            },
            "result": {
              "status": "passed",
              "duration": 4535280740
            }
          },
          {
            "keyword": "Then ",
            "name": "I find very few patterns in the guest's memory",
            "line": 54,
            "output": [
              "Pattern coverage: 0.000% (0 MiB out of 1446 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:214"
            },
            "result": {
              "status": "passed",
              "duration": 758716661
            }
          },
          {
            "keyword": "And ",
            "name": "Tails eventually shuts down",
            "line": 55,
            "match": {
              "location": "features/step_definitions/common_steps.rb:890"
            },
            "result": {
              "status": "passed",
              "duration": 90300223453
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 409777173
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 17813
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/apt.feature",
    "id": "apt-sources-are-correctly-configured",
    "keyword": "Feature",
    "name": "APT sources are correctly configured",
    "description": "  As a Tails user\n  I want APT to be configured to use hidden services",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "apt-sources-are-correctly-configured;apt-sources-are-configured-correctly",
        "keyword": "Scenario",
        "name": "APT sources are configured correctly",
        "description": "",
        "line": 6,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 10779
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2372931
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 7,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 73621022
            }
          },
          {
            "keyword": "And ",
            "name": "I start Tails from DVD with network unplugged",
            "line": 8,
            "match": {
              "location": "features/step_definitions/common_steps.rb:214"
            },
            "result": {
              "status": "passed",
              "duration": 29742781271
            }
          },
          {
            "keyword": "Then ",
            "name": "the only hosts in APT sources are \"cdn-fastly.deb.debian.org,deb.tails.net,deb.torproject.org\"",
            "line": 9,
            "match": {
              "location": "features/step_definitions/apt.rb:9"
            },
            "result": {
              "status": "passed",
              "duration": 34433568
            }
          },
          {
            "keyword": "And ",
            "name": "no proposed-updates APT suite is enabled",
            "line": 10,
            "match": {
              "location": "features/step_definitions/apt.rb:19"
            },
            "result": {
              "status": "passed",
              "duration": 33287763
            }
          },
          {
            "keyword": "And ",
            "name": "no experimental APT suite is enabled for deb.torproject.org",
            "line": 11,
            "match": {
              "location": "features/step_definitions/apt.rb:23"
            },
            "result": {
              "status": "passed",
              "duration": 24481146
            }
          },
          {
            "keyword": "And ",
            "name": "if releasing, no unversioned Tails APT source is enabled",
            "line": 12,
            "output": [
              "Not on a tag ⇒ skipping this step"
            ],
            "match": {
              "location": "features/step_definitions/apt.rb:42"
            },
            "result": {
              "status": "passed",
              "duration": 95201724
            }
          },
          {
            "keyword": "And ",
            "name": "if releasing, the tagged Tails APT source is enabled",
            "line": 13,
            "output": [
              "Not on a tag ⇒ skipping this step"
            ],
            "match": {
              "location": "features/step_definitions/apt.rb:30"
            },
            "result": {
              "status": "passed",
              "duration": 7240475
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 729367033
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 31360699
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/backup.feature",
    "id": "backing-up-the-persistent-storage",
    "keyword": "Feature",
    "name": "Backing up the persistent storage",
    "description": "  As a Tails user\n  I want to backup my persistent storage\n  And easily keep that backup updated",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "backing-up-the-persistent-storage;using-tails'-custom-backup-tool-to-backup-a-newly-added-file",
        "keyword": "Scenario",
        "name": "Using Tails' custom backup tool to backup a newly added file",
        "description": "",
        "line": 7,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 13105
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 1816832
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition enabled and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 7965312910
            }
          },
          {
            "keyword": "And ",
            "name": "I shutdown Tails and wait for the computer to power off",
            "line": 10,
            "comments": [
              {
                "value": "# The volume cannot be in use when GuestFs clones it, which we do below",
                "line": 9
              }
            ],
            "match": {
              "location": "features/step_definitions/common_steps.rb:908"
            },
            "result": {
              "status": "passed",
              "duration": 5171607738
            }
          },
          {
            "keyword": "And ",
            "name": "I clone USB drive \"__internal\" to a temporary USB drive \"backup\"",
            "line": 11,
            "match": {
              "location": "features/step_definitions/usb.rb:121"
            },
            "result": {
              "status": "passed",
              "duration": 623310557
            }
          },
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition enabled and logged in",
            "line": 12,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 8291133931
            }
          },
          {
            "keyword": "And ",
            "name": "I write a file \"/live/persistence/TailsData_unlocked/new\" with contents \"foo\"",
            "line": 13,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1766"
            },
            "result": {
              "status": "passed",
              "duration": 9328681
            }
          },
          {
            "keyword": "When ",
            "name": "I start Tails' custom backup tool",
            "line": 14,
            "match": {
              "location": "features/step_definitions/backup.rb:1"
            },
            "result": {
              "status": "passed",
              "duration": 2463387986
            }
          },
          {
            "keyword": "Then ",
            "name": "the backup tool displays \"Plug in your backup Tails USB stick\"",
            "line": 15,
            "match": {
              "location": "features/step_definitions/backup.rb:5"
            },
            "result": {
              "status": "passed",
              "duration": 314960362
            }
          },
          {
            "keyword": "When ",
            "name": "I plug USB drive \"backup\"",
            "line": 16,
            "match": {
              "location": "features/step_definitions/common_steps.rb:126"
            },
            "result": {
              "status": "passed",
              "duration": 2213128893
            }
          },
          {
            "keyword": "And ",
            "name": "I give the Persistent Storage on drive \"backup\" its own UUID",
            "line": 17,
            "match": {
              "location": "features/step_definitions/usb.rb:1712"
            },
            "result": {
              "status": "passed",
              "duration": 443035572
            }
          },
          {
            "keyword": "And ",
            "name": "I click \"Retry\" in the backup tool",
            "line": 18,
            "match": {
              "location": "features/step_definitions/backup.rb:13"
            },
            "result": {
              "status": "passed",
              "duration": 3114334214
            }
          },
          {
            "keyword": "Then ",
            "name": "the backup tool displays \"Do you want to back up your Persistent Storage now?\"",
            "line": 19,
            "match": {
              "location": "features/step_definitions/backup.rb:5"
            },
            "result": {
              "status": "passed",
              "duration": 124299362
            }
          },
          {
            "keyword": "When ",
            "name": "I click \"Back Up\" in the backup tool",
            "line": 20,
            "match": {
              "location": "features/step_definitions/backup.rb:13"
            },
            "result": {
              "status": "passed",
              "duration": 3102272660
            }
          },
          {
            "keyword": "And ",
            "name": "I enter my persistent storage passphrase into the polkit prompt",
            "line": 21,
            "match": {
              "location": "features/step_definitions/backup.rb:17"
            },
            "result": {
              "status": "passed",
              "duration": 2147710708
            }
          },
          {
            "keyword": "Then ",
            "name": "the backup tool displays \"Your Persistent Storage was backed up successfully to your backup Tails USB stick!\"",
            "line": 22,
            "match": {
              "location": "features/step_definitions/backup.rb:5"
            },
            "result": {
              "status": "passed",
              "duration": 11576162469
            }
          },
          {
            "keyword": "When ",
            "name": "I unplug USB drive \"backup\"",
            "line": 24,
            "comments": [
              {
                "value": "# The backup tool ejects the drive, so we have to replug it",
                "line": 23
              }
            ],
            "match": {
              "location": "features/step_definitions/usb.rb:128"
            },
            "result": {
              "status": "passed",
              "duration": 120304495
            }
          },
          {
            "keyword": "And ",
            "name": "I plug USB drive \"backup\"",
            "line": 25,
            "match": {
              "location": "features/step_definitions/common_steps.rb:126"
            },
            "result": {
              "status": "passed",
              "duration": 2626499008
            }
          },
          {
            "keyword": "Then ",
            "name": "the USB drive \"backup\" contains the same files as my persistent storage",
            "line": 26,
            "match": {
              "location": "features/step_definitions/backup.rb:22"
            },
            "result": {
              "status": "passed",
              "duration": 2665291009
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 912510721
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 108306363
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/build.feature",
    "id": "custom-apt-sources-to-build-branches",
    "keyword": "Feature",
    "name": "custom APT sources to build branches",
    "description": "  As a Tails developer, when I build Tails, I'd be happy if\n  the proper APT sources were automatically picked depending\n  on which Git branch I am working on.",
    "line": 2,
    "tags": [
      {
        "name": "@source",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "custom-apt-sources-to-build-branches;build-from-an-untagged-stable-branch-where-the-config/apt_overlays.d-directory-is-empty",
        "keyword": "Scenario",
        "name": "build from an untagged stable branch where the config/APT_overlays.d directory is empty",
        "description": "",
        "line": 7,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 10971
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:552"
            },
            "result": {
              "status": "passed",
              "duration": 145952
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the stable base branch",
            "line": 8,
            "match": {
              "location": "features/step_definitions/build.rb:73"
            },
            "result": {
              "status": "passed",
              "duration": 32110822
            }
          },
          {
            "keyword": "And ",
            "name": "the last version mentioned in debian/changelog is 1.0",
            "line": 9,
            "match": {
              "location": "features/step_definitions/build.rb:38"
            },
            "result": {
              "status": "passed",
              "duration": 73388451
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 1.0 has not been released yet",
            "line": 10,
            "match": {
              "location": "features/step_definitions/build.rb:34"
            },
            "result": {
              "status": "passed",
              "duration": 39193
            }
          },
          {
            "keyword": "And ",
            "name": "the config/APT_overlays.d directory is empty",
            "line": 11,
            "match": {
              "location": "features/step_definitions/build.rb:126"
            },
            "result": {
              "status": "passed",
              "duration": 39243
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run tails-custom-apt-sources",
            "line": 12,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 31973466
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see only the 'stable' suite",
            "line": 13,
            "match": {
              "location": "features/step_definitions/build.rb:117"
            },
            "result": {
              "status": "passed",
              "duration": 3278198
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:559"
            },
            "result": {
              "status": "passed",
              "duration": 836001
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 6111
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-an-untagged-stable-branch-where-config/apt_overlays.d-is-not-empty",
        "keyword": "Scenario",
        "name": "build from an untagged stable branch where config/APT_overlays.d is not empty",
        "description": "",
        "line": 15,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 8617
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:552"
            },
            "result": {
              "status": "passed",
              "duration": 148798
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the stable base branch",
            "line": 16,
            "match": {
              "location": "features/step_definitions/build.rb:73"
            },
            "result": {
              "status": "passed",
              "duration": 21722474
            }
          },
          {
            "keyword": "And ",
            "name": "the last version mentioned in debian/changelog is 1.0",
            "line": 17,
            "match": {
              "location": "features/step_definitions/build.rb:38"
            },
            "result": {
              "status": "passed",
              "duration": 52841343
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 1.0 has not been released yet",
            "line": 18,
            "match": {
              "location": "features/step_definitions/build.rb:34"
            },
            "result": {
              "status": "passed",
              "duration": 43531
            }
          },
          {
            "keyword": "And ",
            "name": "config/APT_overlays.d contains 'feature-foo'",
            "line": 19,
            "match": {
              "location": "features/step_definitions/build.rb:131"
            },
            "result": {
              "status": "passed",
              "duration": 82522
            }
          },
          {
            "keyword": "And ",
            "name": "config/APT_overlays.d contains 'bugfix-bar'",
            "line": 20,
            "match": {
              "location": "features/step_definitions/build.rb:131"
            },
            "result": {
              "status": "passed",
              "duration": 113331
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run tails-custom-apt-sources",
            "line": 21,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 27969122
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see the 'stable' suite",
            "line": 22,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 152264
            }
          },
          {
            "keyword": "And ",
            "name": "I should see the 'feature-foo' suite",
            "line": 23,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 126346
            }
          },
          {
            "keyword": "And ",
            "name": "I should see the 'bugfix-bar' suite",
            "line": 24,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 59982
            }
          },
          {
            "keyword": "But ",
            "name": "I should not see the '1.0' suite",
            "line": 25,
            "match": {
              "location": "features/step_definitions/build.rb:122"
            },
            "result": {
              "status": "passed",
              "duration": 90029
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:559"
            },
            "result": {
              "status": "passed",
              "duration": 886575
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 6602
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-an-untagged-stable-branch-with-no-encoded-time-based-snapshot",
        "keyword": "Scenario",
        "name": "build from an untagged stable branch with no encoded time-based snapshot",
        "description": "",
        "line": 27,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 10330
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:552"
            },
            "result": {
              "status": "passed",
              "duration": 75761
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the stable base branch",
            "line": 28,
            "match": {
              "location": "features/step_definitions/build.rb:73"
            },
            "result": {
              "status": "passed",
              "duration": 22410567
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.10 has been released",
            "line": 29,
            "match": {
              "location": "features/step_definitions/build.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 8507820
            }
          },
          {
            "keyword": "And ",
            "name": "the last versions mentioned in debian/changelog are 0.10 and 1.0",
            "line": 30,
            "match": {
              "location": "features/step_definitions/build.rb:48"
            },
            "result": {
              "status": "passed",
              "duration": 87921997
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 1.0 has not been released yet",
            "line": 31,
            "match": {
              "location": "features/step_definitions/build.rb:34"
            },
            "result": {
              "status": "passed",
              "duration": 45585
            }
          },
          {
            "keyword": "And ",
            "name": "no frozen APT snapshot is encoded in config/APT_snapshots.d",
            "line": 32,
            "match": {
              "location": "features/step_definitions/build.rb:53"
            },
            "result": {
              "status": "passed",
              "duration": 79538
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-snapshots-serials prepare-build\"",
            "line": 33,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 22984367
            }
          },
          {
            "keyword": "And ",
            "name": "I run \"apt-mirror debian\"",
            "line": 34,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 6421957
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 35,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 25637
            }
          },
          {
            "keyword": "When ",
            "name": "I run \"apt-mirror torproject\"",
            "line": 36,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 5362810
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 37,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 12092
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror debian-security\"",
            "line": 38,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 45523164
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 39,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 146643
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:559"
            },
            "result": {
              "status": "passed",
              "duration": 1008793
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 6111
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-an-untagged-stable-branch-with-encoded-time-based-snapshots",
        "keyword": "Scenario",
        "name": "build from an untagged stable branch with encoded time-based snapshots",
        "description": "",
        "line": 41,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 10149
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:552"
            },
            "result": {
              "status": "passed",
              "duration": 78737
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the stable base branch",
            "line": 42,
            "match": {
              "location": "features/step_definitions/build.rb:73"
            },
            "result": {
              "status": "passed",
              "duration": 22435695
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.10 has been released",
            "line": 43,
            "match": {
              "location": "features/step_definitions/build.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 8472222
            }
          },
          {
            "keyword": "And ",
            "name": "the last versions mentioned in debian/changelog are 0.10 and 1.0",
            "line": 44,
            "match": {
              "location": "features/step_definitions/build.rb:48"
            },
            "result": {
              "status": "passed",
              "duration": 72638522
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 1.0 has not been released yet",
            "line": 45,
            "match": {
              "location": "features/step_definitions/build.rb:34"
            },
            "result": {
              "status": "passed",
              "duration": 50355
            }
          },
          {
            "keyword": "And ",
            "name": "frozen APT snapshots are encoded in config/APT_snapshots.d",
            "line": 46,
            "match": {
              "location": "features/step_definitions/build.rb:61"
            },
            "result": {
              "status": "passed",
              "duration": 73949
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-snapshots-serials prepare-build\"",
            "line": 47,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 19121126
            }
          },
          {
            "keyword": "And ",
            "name": "I successfully run \"apt-mirror debian\"",
            "line": 48,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 46961088
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 49,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 129051
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror torproject\"",
            "line": 50,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 45915296
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 51,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 113201
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror debian-security\"",
            "line": 52,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 46235314
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 53,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 112529
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:559"
            },
            "result": {
              "status": "passed",
              "duration": 1047015
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 7585
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-a-tagged-stable-branch-where-the-config/apt_overlays.d-directory-is-empty",
        "keyword": "Scenario",
        "name": "build from a tagged stable branch where the config/APT_overlays.d directory is empty",
        "description": "",
        "line": 55,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 10138
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:552"
            },
            "result": {
              "status": "passed",
              "duration": 79188
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "Tails 0.10 has been released",
            "line": 56,
            "match": {
              "location": "features/step_definitions/build.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 37567205
            }
          },
          {
            "keyword": "And ",
            "name": "the last version mentioned in debian/changelog is 0.10",
            "line": 57,
            "match": {
              "location": "features/step_definitions/build.rb:38"
            },
            "result": {
              "status": "passed",
              "duration": 19579504
            }
          },
          {
            "keyword": "And ",
            "name": "I am working on the stable base branch",
            "line": 58,
            "match": {
              "location": "features/step_definitions/build.rb:73"
            },
            "result": {
              "status": "passed",
              "duration": 2440454
            }
          },
          {
            "keyword": "And ",
            "name": "I checkout the 0.10 tag",
            "line": 59,
            "match": {
              "location": "features/step_definitions/build.rb:83"
            },
            "result": {
              "status": "passed",
              "duration": 2073630
            }
          },
          {
            "keyword": "And ",
            "name": "the config/APT_overlays.d directory is empty",
            "line": 60,
            "match": {
              "location": "features/step_definitions/build.rb:126"
            },
            "result": {
              "status": "passed",
              "duration": 32881
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run tails-custom-apt-sources",
            "line": 61,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 45731543
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see only the '0.10' suite",
            "line": 62,
            "match": {
              "location": "features/step_definitions/build.rb:117"
            },
            "result": {
              "status": "passed",
              "duration": 169247
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:559"
            },
            "result": {
              "status": "passed",
              "duration": 876536
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 6141
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-a-tagged-stable-branch-where-config/apt_overlays.d-is-not-empty",
        "keyword": "Scenario",
        "name": "build from a tagged stable branch where config/APT_overlays.d is not empty",
        "description": "",
        "line": 64,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 11532
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:552"
            },
            "result": {
              "status": "passed",
              "duration": 82714
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "Tails 0.10 has been released",
            "line": 65,
            "match": {
              "location": "features/step_definitions/build.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 28853242
            }
          },
          {
            "keyword": "And ",
            "name": "the last version mentioned in debian/changelog is 0.10",
            "line": 66,
            "match": {
              "location": "features/step_definitions/build.rb:38"
            },
            "result": {
              "status": "passed",
              "duration": 19202659
            }
          },
          {
            "keyword": "And ",
            "name": "I am working on the stable base branch",
            "line": 67,
            "match": {
              "location": "features/step_definitions/build.rb:73"
            },
            "result": {
              "status": "passed",
              "duration": 3123139
            }
          },
          {
            "keyword": "And ",
            "name": "I checkout the 0.10 tag",
            "line": 68,
            "match": {
              "location": "features/step_definitions/build.rb:83"
            },
            "result": {
              "status": "passed",
              "duration": 2577550
            }
          },
          {
            "keyword": "And ",
            "name": "config/APT_overlays.d contains 'feature-foo'",
            "line": 69,
            "match": {
              "location": "features/step_definitions/build.rb:131"
            },
            "result": {
              "status": "passed",
              "duration": 60432
            }
          },
          {
            "keyword": "When ",
            "name": "I run tails-custom-apt-sources",
            "line": 70,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 29315134
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 71,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 21910
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:559"
            },
            "result": {
              "status": "passed",
              "duration": 826042
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 6572
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-a-tagged-stable-branch-with-no-encoded-time-based-snapshot",
        "keyword": "Scenario",
        "name": "build from a tagged stable branch with no encoded time-based snapshot",
        "description": "",
        "line": 73,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 10219
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:552"
            },
            "result": {
              "status": "passed",
              "duration": 94266
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the stable base branch",
            "line": 74,
            "match": {
              "location": "features/step_definitions/build.rb:73"
            },
            "result": {
              "status": "passed",
              "duration": 28148165
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.10 has been released",
            "line": 75,
            "match": {
              "location": "features/step_definitions/build.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 9506974
            }
          },
          {
            "keyword": "And ",
            "name": "the last version mentioned in debian/changelog is 0.10",
            "line": 76,
            "match": {
              "location": "features/step_definitions/build.rb:38"
            },
            "result": {
              "status": "passed",
              "duration": 19249997
            }
          },
          {
            "keyword": "And ",
            "name": "no frozen APT snapshot is encoded in config/APT_snapshots.d",
            "line": 77,
            "match": {
              "location": "features/step_definitions/build.rb:53"
            },
            "result": {
              "status": "passed",
              "duration": 90299
            }
          },
          {
            "keyword": "And ",
            "name": "I checkout the 0.10 tag",
            "line": 78,
            "match": {
              "location": "features/step_definitions/build.rb:83"
            },
            "result": {
              "status": "passed",
              "duration": 3159678
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-snapshots-serials prepare-build\"",
            "line": 79,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 20314025
            }
          },
          {
            "keyword": "And ",
            "name": "I run \"apt-mirror debian\"",
            "line": 80,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 6398413
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 81,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 21610
            }
          },
          {
            "keyword": "When ",
            "name": "I run \"apt-mirror torproject\"",
            "line": 82,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 6151392
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 83,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 29095
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror debian-security\"",
            "line": 84,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 48648637
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see the 0.10 tagged snapshot",
            "line": 85,
            "match": {
              "location": "features/step_definitions/build.rb:151"
            },
            "result": {
              "status": "passed",
              "duration": 171761
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:559"
            },
            "result": {
              "status": "passed",
              "duration": 1167459
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 7975
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-a-tagged-stable-branch-with-encoded-time-based-snapshots",
        "keyword": "Scenario",
        "name": "build from a tagged stable branch with encoded time-based snapshots",
        "description": "",
        "line": 87,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 17102
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:552"
            },
            "result": {
              "status": "passed",
              "duration": 79929
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the stable base branch",
            "line": 88,
            "match": {
              "location": "features/step_definitions/build.rb:73"
            },
            "result": {
              "status": "passed",
              "duration": 39726325
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.10 has been released",
            "line": 89,
            "match": {
              "location": "features/step_definitions/build.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 22186127
            }
          },
          {
            "keyword": "And ",
            "name": "the last version mentioned in debian/changelog is 0.10",
            "line": 90,
            "match": {
              "location": "features/step_definitions/build.rb:38"
            },
            "result": {
              "status": "passed",
              "duration": 20019686
            }
          },
          {
            "keyword": "And ",
            "name": "frozen APT snapshots are encoded in config/APT_snapshots.d",
            "line": 91,
            "match": {
              "location": "features/step_definitions/build.rb:61"
            },
            "result": {
              "status": "passed",
              "duration": 84048
            }
          },
          {
            "keyword": "And ",
            "name": "I checkout the 0.10 tag",
            "line": 92,
            "match": {
              "location": "features/step_definitions/build.rb:83"
            },
            "result": {
              "status": "passed",
              "duration": 2595644
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-snapshots-serials prepare-build\"",
            "line": 93,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 18266323
            }
          },
          {
            "keyword": "And ",
            "name": "I successfully run \"apt-mirror debian\"",
            "line": 94,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 46726901
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see the 0.10 tagged snapshot",
            "line": 95,
            "match": {
              "location": "features/step_definitions/build.rb:151"
            },
            "result": {
              "status": "passed",
              "duration": 161040
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror torproject\"",
            "line": 96,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 46813252
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see the 0.10 tagged snapshot",
            "line": 97,
            "match": {
              "location": "features/step_definitions/build.rb:151"
            },
            "result": {
              "status": "passed",
              "duration": 169217
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror debian-security\"",
            "line": 98,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 67703893
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see the 0.10 tagged snapshot",
            "line": 99,
            "match": {
              "location": "features/step_definitions/build.rb:151"
            },
            "result": {
              "status": "passed",
              "duration": 164988
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:559"
            },
            "result": {
              "status": "passed",
              "duration": 1993801
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 7214
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-a-bugfix-branch-without-overlays-for-a-stable-release",
        "keyword": "Scenario",
        "name": "build from a bugfix branch without overlays for a stable release",
        "description": "",
        "line": 101,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 10871
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:552"
            },
            "result": {
              "status": "passed",
              "duration": 96761
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "Tails 0.10 has been released",
            "line": 102,
            "match": {
              "location": "features/step_definitions/build.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 30205917
            }
          },
          {
            "keyword": "And ",
            "name": "the last version mentioned in debian/changelog is 0.10.1",
            "line": 103,
            "match": {
              "location": "features/step_definitions/build.rb:38"
            },
            "result": {
              "status": "passed",
              "duration": 51776116
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.10.1 has not been released yet",
            "line": 104,
            "match": {
              "location": "features/step_definitions/build.rb:34"
            },
            "result": {
              "status": "passed",
              "duration": 37090
            }
          },
          {
            "keyword": "And ",
            "name": "I am working on the bugfix/disable_gdomap branch based on stable",
            "line": 105,
            "match": {
              "location": "features/step_definitions/build.rb:88"
            },
            "result": {
              "status": "passed",
              "duration": 4791333
            }
          },
          {
            "keyword": "And ",
            "name": "the config/APT_overlays.d directory is empty",
            "line": 106,
            "match": {
              "location": "features/step_definitions/build.rb:126"
            },
            "result": {
              "status": "passed",
              "duration": 40424
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run tails-custom-apt-sources",
            "line": 107,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 27828019
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see only the 'stable' suite",
            "line": 108,
            "match": {
              "location": "features/step_definitions/build.rb:117"
            },
            "result": {
              "status": "passed",
              "duration": 188563
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:559"
            },
            "result": {
              "status": "passed",
              "duration": 883048
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 6011
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-a-bugfix-branch-with-overlays-for-a-stable-release",
        "keyword": "Scenario",
        "name": "build from a bugfix branch with overlays for a stable release",
        "description": "",
        "line": 110,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 10019
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:552"
            },
            "result": {
              "status": "passed",
              "duration": 159507
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "Tails 0.10 has been released",
            "line": 111,
            "match": {
              "location": "features/step_definitions/build.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 29655167
            }
          },
          {
            "keyword": "And ",
            "name": "the last version mentioned in debian/changelog is 0.10.1",
            "line": 112,
            "match": {
              "location": "features/step_definitions/build.rb:38"
            },
            "result": {
              "status": "passed",
              "duration": 51640001
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.10.1 has not been released yet",
            "line": 113,
            "match": {
              "location": "features/step_definitions/build.rb:34"
            },
            "result": {
              "status": "passed",
              "duration": 40506
            }
          },
          {
            "keyword": "And ",
            "name": "I am working on the bugfix/disable_gdomap branch based on stable",
            "line": 114,
            "match": {
              "location": "features/step_definitions/build.rb:88"
            },
            "result": {
              "status": "passed",
              "duration": 4661872
            }
          },
          {
            "keyword": "And ",
            "name": "config/APT_overlays.d contains 'bugfix-disable-gdomap'",
            "line": 115,
            "match": {
              "location": "features/step_definitions/build.rb:131"
            },
            "result": {
              "status": "passed",
              "duration": 72345
            }
          },
          {
            "keyword": "And ",
            "name": "config/APT_overlays.d contains 'bugfix-bar'",
            "line": 116,
            "match": {
              "location": "features/step_definitions/build.rb:131"
            },
            "result": {
              "status": "passed",
              "duration": 58139
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run tails-custom-apt-sources",
            "line": 117,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 28555706
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see the 'stable' suite",
            "line": 118,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 150712
            }
          },
          {
            "keyword": "And ",
            "name": "I should see the 'bugfix-disable-gdomap' suite",
            "line": 119,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 108361
            }
          },
          {
            "keyword": "And ",
            "name": "I should see the 'bugfix-bar' suite",
            "line": 120,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 57798
            }
          },
          {
            "keyword": "But ",
            "name": "I should not see the '0.10' suite",
            "line": 121,
            "match": {
              "location": "features/step_definitions/build.rb:122"
            },
            "result": {
              "status": "passed",
              "duration": 69170
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:559"
            },
            "result": {
              "status": "passed",
              "duration": 1122816
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 6492
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-a-bugfix-branch-with-no-encoded-time-based-snapshot-for-a-stable-release",
        "keyword": "Scenario",
        "name": "build from a bugfix branch with no encoded time-based snapshot for a stable release",
        "description": "",
        "line": 123,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 11071
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:552"
            },
            "result": {
              "status": "passed",
              "duration": 80751
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "Tails 0.10 has been released",
            "line": 124,
            "match": {
              "location": "features/step_definitions/build.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 29353866
            }
          },
          {
            "keyword": "And ",
            "name": "the last version mentioned in debian/changelog is 0.10.1",
            "line": 125,
            "match": {
              "location": "features/step_definitions/build.rb:38"
            },
            "result": {
              "status": "passed",
              "duration": 80946468
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.10.1 has not been released yet",
            "line": 126,
            "match": {
              "location": "features/step_definitions/build.rb:34"
            },
            "result": {
              "status": "passed",
              "duration": 46296
            }
          },
          {
            "keyword": "And ",
            "name": "I am working on the bugfix/disable_gdomap branch based on stable",
            "line": 127,
            "match": {
              "location": "features/step_definitions/build.rb:88"
            },
            "result": {
              "status": "passed",
              "duration": 5225654
            }
          },
          {
            "keyword": "And ",
            "name": "no frozen APT snapshot is encoded in config/APT_snapshots.d",
            "line": 128,
            "match": {
              "location": "features/step_definitions/build.rb:53"
            },
            "result": {
              "status": "passed",
              "duration": 82565
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-snapshots-serials prepare-build\"",
            "line": 129,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 24831436
            }
          },
          {
            "keyword": "And ",
            "name": "I run \"apt-mirror debian\"",
            "line": 130,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 5619109
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 131,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 24244
            }
          },
          {
            "keyword": "When ",
            "name": "I run \"apt-mirror torproject\"",
            "line": 132,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 5246011
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 133,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 15778
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror debian-security\"",
            "line": 134,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 45650001
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 135,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 132127
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:559"
            },
            "result": {
              "status": "passed",
              "duration": 1204138
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 6562
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-a-bugfix-branch-with-encoded-time-based-snapshots-for-a-stable-release",
        "keyword": "Scenario",
        "name": "build from a bugfix branch with encoded time-based snapshots for a stable release",
        "description": "",
        "line": 137,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 10029
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:552"
            },
            "result": {
              "status": "passed",
              "duration": 96790
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "Tails 0.10 has been released",
            "line": 138,
            "match": {
              "location": "features/step_definitions/build.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 29872985
            }
          },
          {
            "keyword": "And ",
            "name": "the last version mentioned in debian/changelog is 0.10.1",
            "line": 139,
            "match": {
              "location": "features/step_definitions/build.rb:38"
            },
            "result": {
              "status": "passed",
              "duration": 52145023
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.10.1 has not been released yet",
            "line": 140,
            "match": {
              "location": "features/step_definitions/build.rb:34"
            },
            "result": {
              "status": "passed",
              "duration": 37370
            }
          },
          {
            "keyword": "And ",
            "name": "I am working on the bugfix/disable_gdomap branch based on stable",
            "line": 141,
            "match": {
              "location": "features/step_definitions/build.rb:88"
            },
            "result": {
              "status": "passed",
              "duration": 4474331
            }
          },
          {
            "keyword": "And ",
            "name": "frozen APT snapshots are encoded in config/APT_snapshots.d",
            "line": 142,
            "match": {
              "location": "features/step_definitions/build.rb:61"
            },
            "result": {
              "status": "passed",
              "duration": 63037
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-snapshots-serials prepare-build\"",
            "line": 143,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 23216149
            }
          },
          {
            "keyword": "And ",
            "name": "I successfully run \"apt-mirror debian\"",
            "line": 144,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 46432943
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 145,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 132728
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror torproject\"",
            "line": 146,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 46119426
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 147,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 122028
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror debian-security\"",
            "line": 148,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 46355428
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 149,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 112110
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:559"
            },
            "result": {
              "status": "passed",
              "duration": 1298002
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 7503
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-an-untagged-testing-branch-where-the-config/apt_overlays.d-directory-is-empty",
        "keyword": "Scenario",
        "name": "build from an untagged testing branch where the config/APT_overlays.d directory is empty",
        "description": "",
        "line": 151,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 9989
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:552"
            },
            "result": {
              "status": "passed",
              "duration": 78667
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the testing base branch",
            "line": 152,
            "match": {
              "location": "features/step_definitions/build.rb:73"
            },
            "result": {
              "status": "passed",
              "duration": 52406331
            }
          },
          {
            "keyword": "And ",
            "name": "the last version mentioned in debian/changelog is 0.11",
            "line": 153,
            "match": {
              "location": "features/step_definitions/build.rb:38"
            },
            "result": {
              "status": "passed",
              "duration": 52554798
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.11 has not been released yet",
            "line": 154,
            "match": {
              "location": "features/step_definitions/build.rb:34"
            },
            "result": {
              "status": "passed",
              "duration": 38321
            }
          },
          {
            "keyword": "And ",
            "name": "the config/APT_overlays.d directory is empty",
            "line": 155,
            "match": {
              "location": "features/step_definitions/build.rb:126"
            },
            "result": {
              "status": "passed",
              "duration": 116878
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run tails-custom-apt-sources",
            "line": 156,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 29551636
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see the 'testing' suite",
            "line": 157,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 157653
            }
          },
          {
            "keyword": "And ",
            "name": "I should not see the '0.11' suite",
            "line": 158,
            "match": {
              "location": "features/step_definitions/build.rb:122"
            },
            "result": {
              "status": "passed",
              "duration": 81172
            }
          },
          {
            "keyword": "And ",
            "name": "I should not see the 'feature-foo' suite",
            "line": 159,
            "match": {
              "location": "features/step_definitions/build.rb:122"
            },
            "result": {
              "status": "passed",
              "duration": 71764
            }
          },
          {
            "keyword": "And ",
            "name": "I should not see the 'bugfix-bar' suite",
            "line": 160,
            "match": {
              "location": "features/step_definitions/build.rb:122"
            },
            "result": {
              "status": "passed",
              "duration": 64230
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:559"
            },
            "result": {
              "status": "passed",
              "duration": 812867
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 6442
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-an-untagged-testing-branch-where-config/apt_overlays.d-is-not-empty",
        "keyword": "Scenario",
        "name": "build from an untagged testing branch where config/APT_overlays.d is not empty",
        "description": "",
        "line": 162,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 11792
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:552"
            },
            "result": {
              "status": "passed",
              "duration": 82143
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the testing base branch",
            "line": 163,
            "match": {
              "location": "features/step_definitions/build.rb:73"
            },
            "result": {
              "status": "passed",
              "duration": 24326994
            }
          },
          {
            "keyword": "And ",
            "name": "the last version mentioned in debian/changelog is 0.11",
            "line": 164,
            "match": {
              "location": "features/step_definitions/build.rb:38"
            },
            "result": {
              "status": "passed",
              "duration": 52368280
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.11 has not been released yet",
            "line": 165,
            "match": {
              "location": "features/step_definitions/build.rb:34"
            },
            "result": {
              "status": "passed",
              "duration": 35927
            }
          },
          {
            "keyword": "And ",
            "name": "config/APT_overlays.d contains 'feature-foo'",
            "line": 166,
            "match": {
              "location": "features/step_definitions/build.rb:131"
            },
            "result": {
              "status": "passed",
              "duration": 91982
            }
          },
          {
            "keyword": "And ",
            "name": "config/APT_overlays.d contains 'bugfix-bar'",
            "line": 167,
            "match": {
              "location": "features/step_definitions/build.rb:131"
            },
            "result": {
              "status": "passed",
              "duration": 54050
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run tails-custom-apt-sources",
            "line": 168,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 28822215
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see the 'testing' suite",
            "line": 169,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 145613
            }
          },
          {
            "keyword": "And ",
            "name": "I should see the 'feature-foo' suite",
            "line": 170,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 61124
            }
          },
          {
            "keyword": "And ",
            "name": "I should see the 'bugfix-bar' suite",
            "line": 171,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 57177
            }
          },
          {
            "keyword": "But ",
            "name": "I should not see the '0.11' suite",
            "line": 172,
            "match": {
              "location": "features/step_definitions/build.rb:122"
            },
            "result": {
              "status": "passed",
              "duration": 77625
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:559"
            },
            "result": {
              "status": "passed",
              "duration": 830871
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 6602
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-an-untagged-testing-branch-with-no-encoded-time-based-snapshot",
        "keyword": "Scenario",
        "name": "build from an untagged testing branch with no encoded time-based snapshot",
        "description": "",
        "line": 174,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 12584
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:552"
            },
            "result": {
              "status": "passed",
              "duration": 81723
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the testing base branch",
            "line": 175,
            "match": {
              "location": "features/step_definitions/build.rb:73"
            },
            "result": {
              "status": "passed",
              "duration": 24381846
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.10 has been released",
            "line": 176,
            "match": {
              "location": "features/step_definitions/build.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 13298551
            }
          },
          {
            "keyword": "And ",
            "name": "the last versions mentioned in debian/changelog are 0.10 and 1.0",
            "line": 177,
            "match": {
              "location": "features/step_definitions/build.rb:48"
            },
            "result": {
              "status": "passed",
              "duration": 71947282
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 1.0 has not been released yet",
            "line": 178,
            "match": {
              "location": "features/step_definitions/build.rb:34"
            },
            "result": {
              "status": "passed",
              "duration": 38261
            }
          },
          {
            "keyword": "And ",
            "name": "no frozen APT snapshot is encoded in config/APT_snapshots.d",
            "line": 179,
            "match": {
              "location": "features/step_definitions/build.rb:53"
            },
            "result": {
              "status": "passed",
              "duration": 70812
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-snapshots-serials prepare-build\"",
            "line": 180,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 20734379
            }
          },
          {
            "keyword": "And ",
            "name": "I run \"apt-mirror debian\"",
            "line": 181,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 5462695
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 182,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 21210
            }
          },
          {
            "keyword": "When ",
            "name": "I run \"apt-mirror torproject\"",
            "line": 183,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 5144853
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 184,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 14026
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror debian-security\"",
            "line": 185,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 25197109
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 186,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 120265
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:559"
            },
            "result": {
              "status": "passed",
              "duration": 1082801
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 7645
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-an-untagged-testing-branch-with-encoded-time-based-snapshots",
        "keyword": "Scenario",
        "name": "build from an untagged testing branch with encoded time-based snapshots",
        "description": "",
        "line": 188,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 9358
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:552"
            },
            "result": {
              "status": "passed",
              "duration": 87393
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the testing base branch",
            "line": 189,
            "match": {
              "location": "features/step_definitions/build.rb:73"
            },
            "result": {
              "status": "passed",
              "duration": 24230875
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.10 has been released",
            "line": 190,
            "match": {
              "location": "features/step_definitions/build.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 13071778
            }
          },
          {
            "keyword": "And ",
            "name": "the last versions mentioned in debian/changelog are 0.10 and 1.0",
            "line": 191,
            "match": {
              "location": "features/step_definitions/build.rb:48"
            },
            "result": {
              "status": "passed",
              "duration": 71592310
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 1.0 has not been released yet",
            "line": 192,
            "match": {
              "location": "features/step_definitions/build.rb:34"
            },
            "result": {
              "status": "passed",
              "duration": 39424
            }
          },
          {
            "keyword": "And ",
            "name": "frozen APT snapshots are encoded in config/APT_snapshots.d",
            "line": 193,
            "match": {
              "location": "features/step_definitions/build.rb:61"
            },
            "result": {
              "status": "passed",
              "duration": 87694
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-snapshots-serials prepare-build\"",
            "line": 194,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 18365036
            }
          },
          {
            "keyword": "And ",
            "name": "I successfully run \"apt-mirror debian\"",
            "line": 195,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 25990637
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 196,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 121556
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror torproject\"",
            "line": 197,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 25476050
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 198,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 105528
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror debian-security\"",
            "line": 199,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 25731205
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 200,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 112731
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:559"
            },
            "result": {
              "status": "passed",
              "duration": 1043699
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 6993
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-a-tagged-testing-branch-where-the-config/apt_overlays.d-directory-is-empty",
        "keyword": "Scenario",
        "name": "build from a tagged testing branch where the config/APT_overlays.d directory is empty",
        "description": "",
        "line": 202,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 9669
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:552"
            },
            "result": {
              "status": "passed",
              "duration": 80561
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the testing base branch",
            "line": 203,
            "match": {
              "location": "features/step_definitions/build.rb:73"
            },
            "result": {
              "status": "passed",
              "duration": 25103404
            }
          },
          {
            "keyword": "And ",
            "name": "the last version mentioned in debian/changelog is 0.11",
            "line": 204,
            "match": {
              "location": "features/step_definitions/build.rb:38"
            },
            "result": {
              "status": "passed",
              "duration": 50849284
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.11 has been released",
            "line": 205,
            "match": {
              "location": "features/step_definitions/build.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 14257832
            }
          },
          {
            "keyword": "And ",
            "name": "the config/APT_overlays.d directory is empty",
            "line": 206,
            "match": {
              "location": "features/step_definitions/build.rb:126"
            },
            "result": {
              "status": "passed",
              "duration": 78765
            }
          },
          {
            "keyword": "And ",
            "name": "I checkout the 0.11 tag",
            "line": 207,
            "match": {
              "location": "features/step_definitions/build.rb:83"
            },
            "result": {
              "status": "passed",
              "duration": 1897612
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run tails-custom-apt-sources",
            "line": 208,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 47010973
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see only the '0.11' suite",
            "line": 209,
            "match": {
              "location": "features/step_definitions/build.rb:117"
            },
            "result": {
              "status": "passed",
              "duration": 192319
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:559"
            },
            "result": {
              "status": "passed",
              "duration": 1864891
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 6653
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-a-tagged-testing-branch-where-config/apt_overlays.d-is-not-empty",
        "keyword": "Scenario",
        "name": "build from a tagged testing branch where config/APT_overlays.d is not empty",
        "description": "",
        "line": 211,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 8907
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:552"
            },
            "result": {
              "status": "passed",
              "duration": 78637
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the testing base branch",
            "line": 212,
            "match": {
              "location": "features/step_definitions/build.rb:73"
            },
            "result": {
              "status": "passed",
              "duration": 23809489
            }
          },
          {
            "keyword": "And ",
            "name": "the last version mentioned in debian/changelog is 0.11",
            "line": 213,
            "match": {
              "location": "features/step_definitions/build.rb:38"
            },
            "result": {
              "status": "passed",
              "duration": 51884547
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.11 has been released",
            "line": 214,
            "match": {
              "location": "features/step_definitions/build.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 14785716
            }
          },
          {
            "keyword": "And ",
            "name": "config/APT_overlays.d contains 'feature-foo'",
            "line": 215,
            "match": {
              "location": "features/step_definitions/build.rb:131"
            },
            "result": {
              "status": "passed",
              "duration": 209000
            }
          },
          {
            "keyword": "And ",
            "name": "I checkout the 0.11 tag",
            "line": 216,
            "match": {
              "location": "features/step_definitions/build.rb:83"
            },
            "result": {
              "status": "passed",
              "duration": 1848991
            }
          },
          {
            "keyword": "When ",
            "name": "I run tails-custom-apt-sources",
            "line": 217,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 27779566
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 218,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 30527
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:559"
            },
            "result": {
              "status": "passed",
              "duration": 1098040
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 6593
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-a-tagged-testing-branch-with-no-encoded-time-based-snapshot",
        "keyword": "Scenario",
        "name": "build from a tagged testing branch with no encoded time-based snapshot",
        "description": "",
        "line": 220,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 9166
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:552"
            },
            "result": {
              "status": "passed",
              "duration": 85940
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the testing base branch",
            "line": 221,
            "match": {
              "location": "features/step_definitions/build.rb:73"
            },
            "result": {
              "status": "passed",
              "duration": 25174886
            }
          },
          {
            "keyword": "And ",
            "name": "the last version mentioned in debian/changelog is 0.11",
            "line": 222,
            "match": {
              "location": "features/step_definitions/build.rb:38"
            },
            "result": {
              "status": "passed",
              "duration": 53126304
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.11 has been released",
            "line": 223,
            "match": {
              "location": "features/step_definitions/build.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 14912554
            }
          },
          {
            "keyword": "And ",
            "name": "no frozen APT snapshot is encoded in config/APT_snapshots.d",
            "line": 224,
            "match": {
              "location": "features/step_definitions/build.rb:53"
            },
            "result": {
              "status": "passed",
              "duration": 122057
            }
          },
          {
            "keyword": "And ",
            "name": "I checkout the 0.11 tag",
            "line": 225,
            "match": {
              "location": "features/step_definitions/build.rb:83"
            },
            "result": {
              "status": "passed",
              "duration": 1763871
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-snapshots-serials prepare-build\"",
            "line": 226,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 17853663
            }
          },
          {
            "keyword": "And ",
            "name": "I run \"apt-mirror debian\"",
            "line": 227,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 5572770
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 228,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 22330
            }
          },
          {
            "keyword": "When ",
            "name": "I run \"apt-mirror torproject\"",
            "line": 229,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 5444933
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 230,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 16891
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror debian-security\"",
            "line": 231,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 47317905
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see the 0.11 tagged snapshot",
            "line": 232,
            "match": {
              "location": "features/step_definitions/build.rb:151"
            },
            "result": {
              "status": "passed",
              "duration": 159818
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:559"
            },
            "result": {
              "status": "passed",
              "duration": 1192176
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 7433
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-a-tagged-testing-branch-with-encoded-time-based-snapshots",
        "keyword": "Scenario",
        "name": "build from a tagged testing branch with encoded time-based snapshots",
        "description": "",
        "line": 234,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 10057
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:552"
            },
            "result": {
              "status": "passed",
              "duration": 116267
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the testing base branch",
            "line": 235,
            "match": {
              "location": "features/step_definitions/build.rb:73"
            },
            "result": {
              "status": "passed",
              "duration": 24374152
            }
          },
          {
            "keyword": "And ",
            "name": "the last version mentioned in debian/changelog is 0.11",
            "line": 236,
            "match": {
              "location": "features/step_definitions/build.rb:38"
            },
            "result": {
              "status": "passed",
              "duration": 52738111
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.11 has been released",
            "line": 237,
            "match": {
              "location": "features/step_definitions/build.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 14754528
            }
          },
          {
            "keyword": "And ",
            "name": "frozen APT snapshots are encoded in config/APT_snapshots.d",
            "line": 238,
            "match": {
              "location": "features/step_definitions/build.rb:61"
            },
            "result": {
              "status": "passed",
              "duration": 104696
            }
          },
          {
            "keyword": "And ",
            "name": "I checkout the 0.11 tag",
            "line": 239,
            "match": {
              "location": "features/step_definitions/build.rb:83"
            },
            "result": {
              "status": "passed",
              "duration": 1793408
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-snapshots-serials prepare-build\"",
            "line": 240,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 23017529
            }
          },
          {
            "keyword": "And ",
            "name": "I successfully run \"apt-mirror debian\"",
            "line": 241,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 73030935
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see the 0.11 tagged snapshot",
            "line": 242,
            "match": {
              "location": "features/step_definitions/build.rb:151"
            },
            "result": {
              "status": "passed",
              "duration": 178082
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror torproject\"",
            "line": 243,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 48793719
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see the 0.11 tagged snapshot",
            "line": 244,
            "match": {
              "location": "features/step_definitions/build.rb:151"
            },
            "result": {
              "status": "passed",
              "duration": 166069
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror debian-security\"",
            "line": 245,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 61118322
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see the 0.11 tagged snapshot",
            "line": 246,
            "match": {
              "location": "features/step_definitions/build.rb:151"
            },
            "result": {
              "status": "passed",
              "duration": 169667
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:559"
            },
            "result": {
              "status": "passed",
              "duration": 993144
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 7163
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-a-release-candidate-from-a-tagged-testing-branch",
        "keyword": "Scenario",
        "name": "build a release candidate from a tagged testing branch",
        "description": "",
        "line": 248,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 13454
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:552"
            },
            "result": {
              "status": "passed",
              "duration": 105968
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the testing base branch",
            "line": 249,
            "match": {
              "location": "features/step_definitions/build.rb:73"
            },
            "result": {
              "status": "passed",
              "duration": 25942920
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.11 has been released",
            "line": 250,
            "match": {
              "location": "features/step_definitions/build.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 13610442
            }
          },
          {
            "keyword": "And ",
            "name": "the last version mentioned in debian/changelog is 0.12~rc1",
            "line": 251,
            "match": {
              "location": "features/step_definitions/build.rb:38"
            },
            "result": {
              "status": "passed",
              "duration": 51958024
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.12-rc1 has been tagged",
            "line": 252,
            "match": {
              "location": "features/step_definitions/build.rb:30"
            },
            "result": {
              "status": "passed",
              "duration": 2557013
            }
          },
          {
            "keyword": "And ",
            "name": "the config/APT_overlays.d directory is empty",
            "line": 253,
            "match": {
              "location": "features/step_definitions/build.rb:126"
            },
            "result": {
              "status": "passed",
              "duration": 62647
            }
          },
          {
            "keyword": "And ",
            "name": "I checkout the 0.12-rc1 tag",
            "line": 254,
            "match": {
              "location": "features/step_definitions/build.rb:83"
            },
            "result": {
              "status": "passed",
              "duration": 1961452
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run tails-custom-apt-sources",
            "line": 255,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 64174635
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see only the '0.12-rc1' suite",
            "line": 256,
            "match": {
              "location": "features/step_definitions/build.rb:117"
            },
            "result": {
              "status": "passed",
              "duration": 193722
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:559"
            },
            "result": {
              "status": "passed",
              "duration": 908474
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 6071
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-a-release-candidate-from-a-tagged-testing-branch-where-config/apt_overlays.d-is-not-empty",
        "keyword": "Scenario",
        "name": "build a release candidate from a tagged testing branch where config/APT_overlays.d is not empty",
        "description": "",
        "line": 258,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 10369
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:552"
            },
            "result": {
              "status": "passed",
              "duration": 89648
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the testing base branch",
            "line": 259,
            "match": {
              "location": "features/step_definitions/build.rb:73"
            },
            "result": {
              "status": "passed",
              "duration": 25163014
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.11 has been released",
            "line": 260,
            "match": {
              "location": "features/step_definitions/build.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 13484377
            }
          },
          {
            "keyword": "And ",
            "name": "the last version mentioned in debian/changelog is 0.12~rc1",
            "line": 261,
            "match": {
              "location": "features/step_definitions/build.rb:38"
            },
            "result": {
              "status": "passed",
              "duration": 53074880
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.12-rc1 has been tagged",
            "line": 262,
            "match": {
              "location": "features/step_definitions/build.rb:30"
            },
            "result": {
              "status": "passed",
              "duration": 2346890
            }
          },
          {
            "keyword": "And ",
            "name": "config/APT_overlays.d contains 'bugfix-bar'",
            "line": 263,
            "match": {
              "location": "features/step_definitions/build.rb:131"
            },
            "result": {
              "status": "passed",
              "duration": 88175
            }
          },
          {
            "keyword": "And ",
            "name": "I checkout the 0.12-rc1 tag",
            "line": 264,
            "match": {
              "location": "features/step_definitions/build.rb:83"
            },
            "result": {
              "status": "passed",
              "duration": 1986788
            }
          },
          {
            "keyword": "When ",
            "name": "I run tails-custom-apt-sources",
            "line": 265,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 27786982
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 266,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 24716
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:559"
            },
            "result": {
              "status": "passed",
              "duration": 2155523
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 6813
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-a-bugfix-branch-with-no-encoded-time-based-snapshot-for-a-major-release",
        "keyword": "Scenario",
        "name": "build from a bugfix branch with no encoded time-based snapshot for a major release",
        "description": "",
        "line": 268,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 9117
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:552"
            },
            "result": {
              "status": "passed",
              "duration": 68457
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the testing base branch",
            "line": 269,
            "match": {
              "location": "features/step_definitions/build.rb:73"
            },
            "result": {
              "status": "passed",
              "duration": 23874970
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.10~rc1 has been released",
            "line": 270,
            "match": {
              "location": "features/step_definitions/build.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 13585626
            }
          },
          {
            "keyword": "And ",
            "name": "the last versions mentioned in debian/changelog are 0.10~rc1 and 0.10",
            "line": 271,
            "match": {
              "location": "features/step_definitions/build.rb:48"
            },
            "result": {
              "status": "passed",
              "duration": 72489595
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.10 has not been released yet",
            "line": 272,
            "match": {
              "location": "features/step_definitions/build.rb:34"
            },
            "result": {
              "status": "passed",
              "duration": 32028
            }
          },
          {
            "keyword": "And ",
            "name": "I am working on the bugfix/disable_gdomap branch based on testing",
            "line": 273,
            "match": {
              "location": "features/step_definitions/build.rb:88"
            },
            "result": {
              "status": "passed",
              "duration": 4665388
            }
          },
          {
            "keyword": "And ",
            "name": "no frozen APT snapshot is encoded in config/APT_snapshots.d",
            "line": 274,
            "match": {
              "location": "features/step_definitions/build.rb:53"
            },
            "result": {
              "status": "passed",
              "duration": 61655
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-snapshots-serials prepare-build\"",
            "line": 275,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 19136976
            }
          },
          {
            "keyword": "And ",
            "name": "I run \"apt-mirror debian\"",
            "line": 276,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 5370222
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 277,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 22472
            }
          },
          {
            "keyword": "When ",
            "name": "I run \"apt-mirror torproject\"",
            "line": 278,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 5182353
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 279,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 15990
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror debian-security\"",
            "line": 280,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 26049188
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 281,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 121516
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:559"
            },
            "result": {
              "status": "passed",
              "duration": 1008502
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 8556
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-a-bugfix-branch-with-encoded-time-based-snapshots-for-a-major-release",
        "keyword": "Scenario",
        "name": "build from a bugfix branch with encoded time-based snapshots for a major release",
        "description": "",
        "line": 283,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 10780
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:552"
            },
            "result": {
              "status": "passed",
              "duration": 84428
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the testing base branch",
            "line": 284,
            "match": {
              "location": "features/step_definitions/build.rb:73"
            },
            "result": {
              "status": "passed",
              "duration": 23824565
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.10~rc1 has been released",
            "line": 285,
            "match": {
              "location": "features/step_definitions/build.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 13336091
            }
          },
          {
            "keyword": "And ",
            "name": "the last versions mentioned in debian/changelog are 0.10~rc1 and 0.10",
            "line": 286,
            "match": {
              "location": "features/step_definitions/build.rb:48"
            },
            "result": {
              "status": "passed",
              "duration": 73104863
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.10 has not been released yet",
            "line": 287,
            "match": {
              "location": "features/step_definitions/build.rb:34"
            },
            "result": {
              "status": "passed",
              "duration": 36669
            }
          },
          {
            "keyword": "And ",
            "name": "I am working on the bugfix/disable_gdomap branch based on testing",
            "line": 288,
            "match": {
              "location": "features/step_definitions/build.rb:88"
            },
            "result": {
              "status": "passed",
              "duration": 4489949
            }
          },
          {
            "keyword": "And ",
            "name": "frozen APT snapshots are encoded in config/APT_snapshots.d",
            "line": 289,
            "match": {
              "location": "features/step_definitions/build.rb:61"
            },
            "result": {
              "status": "passed",
              "duration": 59922
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-snapshots-serials prepare-build\"",
            "line": 290,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 17498390
            }
          },
          {
            "keyword": "And ",
            "name": "I successfully run \"apt-mirror debian\"",
            "line": 291,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 25609970
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 292,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 123009
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror torproject\"",
            "line": 293,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 25661114
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 294,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 110495
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror debian-security\"",
            "line": 295,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 25863371
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 296,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 101919
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:559"
            },
            "result": {
              "status": "passed",
              "duration": 1149195
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 6682
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-the-devel-branch-without-overlays",
        "keyword": "Scenario",
        "name": "build from the devel branch without overlays",
        "description": "",
        "line": 298,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 11050
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:552"
            },
            "result": {
              "status": "passed",
              "duration": 82544
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the devel base branch",
            "line": 299,
            "match": {
              "location": "features/step_definitions/build.rb:73"
            },
            "result": {
              "status": "passed",
              "duration": 24055447
            }
          },
          {
            "keyword": "And ",
            "name": "the config/APT_overlays.d directory is empty",
            "line": 300,
            "match": {
              "location": "features/step_definitions/build.rb:126"
            },
            "result": {
              "status": "passed",
              "duration": 42979
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run tails-custom-apt-sources",
            "line": 301,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 29766927
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see only the 'devel' suite",
            "line": 302,
            "match": {
              "location": "features/step_definitions/build.rb:117"
            },
            "result": {
              "status": "passed",
              "duration": 175538
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:559"
            },
            "result": {
              "status": "passed",
              "duration": 944994
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 7204
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-the-devel-branch-with-overlays",
        "keyword": "Scenario",
        "name": "build from the devel branch with overlays",
        "description": "",
        "line": 304,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 9778
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:552"
            },
            "result": {
              "status": "passed",
              "duration": 78998
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the devel base branch",
            "line": 305,
            "match": {
              "location": "features/step_definitions/build.rb:73"
            },
            "result": {
              "status": "passed",
              "duration": 23433836
            }
          },
          {
            "keyword": "And ",
            "name": "config/APT_overlays.d contains 'feature-foo'",
            "line": 306,
            "match": {
              "location": "features/step_definitions/build.rb:131"
            },
            "result": {
              "status": "passed",
              "duration": 56214
            }
          },
          {
            "keyword": "And ",
            "name": "config/APT_overlays.d contains 'bugfix-bar'",
            "line": 307,
            "match": {
              "location": "features/step_definitions/build.rb:131"
            },
            "result": {
              "status": "passed",
              "duration": 39854
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run tails-custom-apt-sources",
            "line": 308,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 29863688
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see the 'devel' suite",
            "line": 309,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 173274
            }
          },
          {
            "keyword": "And ",
            "name": "I should see the 'feature-foo' suite",
            "line": 310,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 60863
            }
          },
          {
            "keyword": "And ",
            "name": "I should see the 'bugfix-bar' suite",
            "line": 311,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 55413
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:559"
            },
            "result": {
              "status": "passed",
              "duration": 814000
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 6152
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-the-devel-branch-with-no-encoded-time-based-snapshot",
        "keyword": "Scenario",
        "name": "build from the devel branch with no encoded time-based snapshot",
        "description": "",
        "line": 313,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 9007
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:552"
            },
            "result": {
              "status": "passed",
              "duration": 104596
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the devel base branch",
            "line": 314,
            "match": {
              "location": "features/step_definitions/build.rb:73"
            },
            "result": {
              "status": "passed",
              "duration": 23824126
            }
          },
          {
            "keyword": "And ",
            "name": "no frozen APT snapshot is encoded in config/APT_snapshots.d",
            "line": 315,
            "match": {
              "location": "features/step_definitions/build.rb:53"
            },
            "result": {
              "status": "passed",
              "duration": 59540
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-snapshots-serials prepare-build\"",
            "line": 316,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 18015485
            }
          },
          {
            "keyword": "And ",
            "name": "I successfully run \"apt-mirror debian\"",
            "line": 317,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 7370306
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 318,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 131725
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror torproject\"",
            "line": 319,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 7458861
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 320,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 75230
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror debian-security\"",
            "line": 321,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 6711666
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 322,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 70572
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:559"
            },
            "result": {
              "status": "passed",
              "duration": 1791283
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 7404
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-the-devel-branch-with-encoded-time-based-snapshots",
        "keyword": "Scenario",
        "name": "build from the devel branch with encoded time-based snapshots",
        "description": "",
        "line": 324,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 10009
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:552"
            },
            "result": {
              "status": "passed",
              "duration": 111468
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the devel base branch",
            "line": 325,
            "match": {
              "location": "features/step_definitions/build.rb:73"
            },
            "result": {
              "status": "passed",
              "duration": 23829376
            }
          },
          {
            "keyword": "And ",
            "name": "frozen APT snapshots are encoded in config/APT_snapshots.d",
            "line": 326,
            "match": {
              "location": "features/step_definitions/build.rb:61"
            },
            "result": {
              "status": "passed",
              "duration": 188151
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-snapshots-serials prepare-build\"",
            "line": 327,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 16887408
            }
          },
          {
            "keyword": "And ",
            "name": "I run \"apt-mirror debian\"",
            "line": 328,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 6993834
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 329,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 29516
            }
          },
          {
            "keyword": "When ",
            "name": "I run \"apt-mirror torproject\"",
            "line": 330,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 7050409
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 331,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 14408
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror debian-security\"",
            "line": 332,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 7039869
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 333,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 138709
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:559"
            },
            "result": {
              "status": "passed",
              "duration": 1151439
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 6613
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-the-feature/jessie-branch-without-overlays",
        "keyword": "Scenario",
        "name": "build from the feature/jessie branch without overlays",
        "description": "",
        "line": 335,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 8466
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:552"
            },
            "result": {
              "status": "passed",
              "duration": 89606
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the feature/jessie base branch",
            "line": 336,
            "match": {
              "location": "features/step_definitions/build.rb:73"
            },
            "result": {
              "status": "passed",
              "duration": 23612440
            }
          },
          {
            "keyword": "And ",
            "name": "the config/APT_overlays.d directory is empty",
            "line": 337,
            "match": {
              "location": "features/step_definitions/build.rb:126"
            },
            "result": {
              "status": "passed",
              "duration": 86161
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run tails-custom-apt-sources",
            "line": 338,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 29830657
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see only the 'feature-jessie' suite",
            "line": 339,
            "match": {
              "location": "features/step_definitions/build.rb:117"
            },
            "result": {
              "status": "passed",
              "duration": 160469
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:559"
            },
            "result": {
              "status": "passed",
              "duration": 1033268
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 6993
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-the-feature/jessie-branch-with-overlays",
        "keyword": "Scenario",
        "name": "build from the feature/jessie branch with overlays",
        "description": "",
        "line": 341,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 9116
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:552"
            },
            "result": {
              "status": "passed",
              "duration": 90590
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the feature/jessie base branch",
            "line": 342,
            "match": {
              "location": "features/step_definitions/build.rb:73"
            },
            "result": {
              "status": "passed",
              "duration": 23978354
            }
          },
          {
            "keyword": "And ",
            "name": "config/APT_overlays.d contains 'feature-7756-reintroduce-whisperback'",
            "line": 343,
            "match": {
              "location": "features/step_definitions/build.rb:131"
            },
            "result": {
              "status": "passed",
              "duration": 150581
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run tails-custom-apt-sources",
            "line": 344,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 28412129
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see the 'feature-jessie' suite",
            "line": 345,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 159889
            }
          },
          {
            "keyword": "And ",
            "name": "I should see the 'feature-7756-reintroduce-whisperback' suite",
            "line": 346,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 69329
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:559"
            },
            "result": {
              "status": "passed",
              "duration": 966874
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 6381
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-a-feature-branch-with-overlays-based-on-devel",
        "keyword": "Scenario",
        "name": "build from a feature branch with overlays based on devel",
        "description": "",
        "line": 348,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 9307
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:552"
            },
            "result": {
              "status": "passed",
              "duration": 80239
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the feature/thunderbird branch based on devel",
            "line": 349,
            "match": {
              "location": "features/step_definitions/build.rb:88"
            },
            "result": {
              "status": "passed",
              "duration": 24169721
            }
          },
          {
            "keyword": "And ",
            "name": "config/APT_overlays.d contains 'feature-thunderbird'",
            "line": 350,
            "match": {
              "location": "features/step_definitions/build.rb:131"
            },
            "result": {
              "status": "passed",
              "duration": 93945
            }
          },
          {
            "keyword": "And ",
            "name": "config/APT_overlays.d contains 'bugfix-bar'",
            "line": 351,
            "match": {
              "location": "features/step_definitions/build.rb:131"
            },
            "result": {
              "status": "passed",
              "duration": 74720
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run tails-custom-apt-sources",
            "line": 352,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 28521292
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see the 'devel' suite",
            "line": 353,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 138049
            }
          },
          {
            "keyword": "And ",
            "name": "I should see the 'feature-thunderbird' suite",
            "line": 354,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 109505
            }
          },
          {
            "keyword": "And ",
            "name": "I should see the 'bugfix-bar' suite",
            "line": 355,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 71093
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:559"
            },
            "result": {
              "status": "passed",
              "duration": 1040252
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 6722
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-a-feature-branch-without-overlays-based-on-devel",
        "keyword": "Scenario",
        "name": "build from a feature branch without overlays based on devel",
        "description": "",
        "line": 357,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 10490
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:552"
            },
            "result": {
              "status": "passed",
              "duration": 72535
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the feature/thunderbird branch based on devel",
            "line": 358,
            "match": {
              "location": "features/step_definitions/build.rb:88"
            },
            "result": {
              "status": "passed",
              "duration": 24281569
            }
          },
          {
            "keyword": "And ",
            "name": "the config/APT_overlays.d directory is empty",
            "line": 359,
            "match": {
              "location": "features/step_definitions/build.rb:126"
            },
            "result": {
              "status": "passed",
              "duration": 107891
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run tails-custom-apt-sources",
            "line": 360,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 28071522
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see only the 'devel' suite",
            "line": 361,
            "match": {
              "location": "features/step_definitions/build.rb:117"
            },
            "result": {
              "status": "passed",
              "duration": 173834
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:559"
            },
            "result": {
              "status": "passed",
              "duration": 1001348
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 6312
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-a-feature-branch-based-on-devel-with-no-encoded-time-based-snapshot",
        "keyword": "Scenario",
        "name": "build from a feature branch based on devel with no encoded time-based snapshot",
        "description": "",
        "line": 363,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 10330
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:552"
            },
            "result": {
              "status": "passed",
              "duration": 89909
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the feature/thunderbird branch based on devel",
            "line": 364,
            "match": {
              "location": "features/step_definitions/build.rb:88"
            },
            "result": {
              "status": "passed",
              "duration": 24360626
            }
          },
          {
            "keyword": "And ",
            "name": "no frozen APT snapshot is encoded in config/APT_snapshots.d",
            "line": 365,
            "match": {
              "location": "features/step_definitions/build.rb:53"
            },
            "result": {
              "status": "passed",
              "duration": 61103
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-snapshots-serials prepare-build\"",
            "line": 366,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 18636383
            }
          },
          {
            "keyword": "And ",
            "name": "I successfully run \"apt-mirror debian\"",
            "line": 367,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 6973456
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 368,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 110256
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror torproject\"",
            "line": 369,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 7049667
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 370,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 96771
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror debian-security\"",
            "line": 371,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 6940725
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 372,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 68317
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:559"
            },
            "result": {
              "status": "passed",
              "duration": 873821
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 4960
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-a-feature-branch-based-on-devel-with-encoded-time-based-snapshots",
        "keyword": "Scenario",
        "name": "build from a feature branch based on devel with encoded time-based snapshots",
        "description": "",
        "line": 374,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 10458
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:552"
            },
            "result": {
              "status": "passed",
              "duration": 94347
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the feature/thunderbird branch based on devel",
            "line": 375,
            "match": {
              "location": "features/step_definitions/build.rb:88"
            },
            "result": {
              "status": "passed",
              "duration": 23967132
            }
          },
          {
            "keyword": "And ",
            "name": "frozen APT snapshots are encoded in config/APT_snapshots.d",
            "line": 376,
            "match": {
              "location": "features/step_definitions/build.rb:61"
            },
            "result": {
              "status": "passed",
              "duration": 71364
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-snapshots-serials prepare-build\"",
            "line": 377,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 16668831
            }
          },
          {
            "keyword": "And ",
            "name": "I run \"apt-mirror debian\"",
            "line": 378,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 7085113
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 379,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 32891
            }
          },
          {
            "keyword": "When ",
            "name": "I run \"apt-mirror torproject\"",
            "line": 380,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 6810722
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 381,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 16230
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror debian-security\"",
            "line": 382,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 6749168
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 383,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 107872
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:559"
            },
            "result": {
              "status": "passed",
              "duration": 997793
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 6221
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-a-feature-branch-with-overlays-based-on-feature/jessie",
        "keyword": "Scenario",
        "name": "build from a feature branch with overlays based on feature/jessie",
        "description": "",
        "line": 385,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 8314
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:552"
            },
            "result": {
              "status": "passed",
              "duration": 73858
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the feature/7756-reintroduce-whisperback branch based on feature/jessie",
            "line": 386,
            "match": {
              "location": "features/step_definitions/build.rb:88"
            },
            "result": {
              "status": "passed",
              "duration": 26779844
            }
          },
          {
            "keyword": "And ",
            "name": "config/APT_overlays.d contains 'feature-7756-reintroduce-whisperback'",
            "line": 387,
            "match": {
              "location": "features/step_definitions/build.rb:131"
            },
            "result": {
              "status": "passed",
              "duration": 66675
            }
          },
          {
            "keyword": "And ",
            "name": "config/APT_overlays.d contains 'bugfix-bar'",
            "line": 388,
            "match": {
              "location": "features/step_definitions/build.rb:131"
            },
            "result": {
              "status": "passed",
              "duration": 41386
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run tails-custom-apt-sources",
            "line": 389,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 28608085
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see the 'feature-jessie' suite",
            "line": 390,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 147977
            }
          },
          {
            "keyword": "And ",
            "name": "I should see the 'feature-7756-reintroduce-whisperback' suite",
            "line": 391,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 75791
            }
          },
          {
            "keyword": "And ",
            "name": "I should see the 'bugfix-bar' suite",
            "line": 392,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 65803
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:559"
            },
            "result": {
              "status": "passed",
              "duration": 733850
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 6672
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-a-feature-branch-without-overlays-based-on-feature/jessie",
        "keyword": "Scenario",
        "name": "build from a feature branch without overlays based on feature/jessie",
        "description": "",
        "line": 394,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 10169
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:552"
            },
            "result": {
              "status": "passed",
              "duration": 68428
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the feature/thunderbird branch based on feature/jessie",
            "line": 395,
            "match": {
              "location": "features/step_definitions/build.rb:88"
            },
            "result": {
              "status": "passed",
              "duration": 23707698
            }
          },
          {
            "keyword": "And ",
            "name": "the config/APT_overlays.d directory is empty",
            "line": 396,
            "match": {
              "location": "features/step_definitions/build.rb:126"
            },
            "result": {
              "status": "passed",
              "duration": 36138
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run tails-custom-apt-sources",
            "line": 397,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 27876798
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see only the 'feature-jessie' suite",
            "line": 398,
            "match": {
              "location": "features/step_definitions/build.rb:117"
            },
            "result": {
              "status": "passed",
              "duration": 170849
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:559"
            },
            "result": {
              "status": "passed",
              "duration": 852911
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 6562
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-a-feature-branch-based-on-devel-with-dots-in-its-name",
        "keyword": "Scenario",
        "name": "build from a feature branch based on devel with dots in its name",
        "description": "",
        "line": 400,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 10400
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:552"
            },
            "result": {
              "status": "passed",
              "duration": 70982
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the feature/live-boot-3.x branch based on devel",
            "line": 401,
            "match": {
              "location": "features/step_definitions/build.rb:88"
            },
            "result": {
              "status": "passed",
              "duration": 24100130
            }
          },
          {
            "keyword": "And ",
            "name": "config/APT_overlays.d contains 'feature-live-boot-3.x'",
            "line": 402,
            "match": {
              "location": "features/step_definitions/build.rb:131"
            },
            "result": {
              "status": "passed",
              "duration": 60553
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run tails-custom-apt-sources",
            "line": 403,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 28065120
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see the 'devel' suite",
            "line": 404,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 141445
            }
          },
          {
            "keyword": "And ",
            "name": "I should see the 'feature-live-boot-3.x' suite",
            "line": 405,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 65903
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:559"
            },
            "result": {
              "status": "passed",
              "duration": 719021
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 4508
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-a-branch-that-has-no-config/apt_overlays.d-directory",
        "keyword": "Scenario",
        "name": "build from a branch that has no config/APT_overlays.d directory",
        "description": "",
        "line": 407,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 10088
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:552"
            },
            "result": {
              "status": "passed",
              "duration": 69260
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the stable base branch",
            "line": 408,
            "match": {
              "location": "features/step_definitions/build.rb:73"
            },
            "result": {
              "status": "passed",
              "duration": 21039007
            }
          },
          {
            "keyword": "And ",
            "name": "the config/APT_overlays.d directory does not exist",
            "line": 409,
            "match": {
              "location": "features/step_definitions/build.rb:143"
            },
            "result": {
              "status": "passed",
              "duration": 36489
            }
          },
          {
            "keyword": "When ",
            "name": "I run tails-custom-apt-sources",
            "line": 410,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 2843116
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 411,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 17081
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:559"
            },
            "result": {
              "status": "passed",
              "duration": 661365
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 6332
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-a-branch-that-has-no-config/base_branch-file",
        "keyword": "Scenario",
        "name": "build from a branch that has no config/base_branch file",
        "description": "",
        "line": 413,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 9228
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:552"
            },
            "result": {
              "status": "passed",
              "duration": 61845
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the stable base branch",
            "line": 414,
            "match": {
              "location": "features/step_definitions/build.rb:73"
            },
            "result": {
              "status": "passed",
              "duration": 20191485
            }
          },
          {
            "keyword": "And ",
            "name": "the config/base_branch file does not exist",
            "line": 415,
            "match": {
              "location": "features/step_definitions/build.rb:139"
            },
            "result": {
              "status": "passed",
              "duration": 1000347
            }
          },
          {
            "keyword": "When ",
            "name": "I run tails-custom-apt-sources",
            "line": 416,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 2751677
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 417,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 16590
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:559"
            },
            "result": {
              "status": "passed",
              "duration": 714563
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 6342
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-a-branch-where-config/base_branch-is-empty",
        "keyword": "Scenario",
        "name": "build from a branch where config/base_branch is empty",
        "description": "",
        "line": 419,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 7684
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:552"
            },
            "result": {
              "status": "passed",
              "duration": 108282
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the stable base branch",
            "line": 420,
            "match": {
              "location": "features/step_definitions/build.rb:73"
            },
            "result": {
              "status": "passed",
              "duration": 21155314
            }
          },
          {
            "keyword": "And ",
            "name": "the config/base_branch file is empty",
            "line": 421,
            "match": {
              "location": "features/step_definitions/build.rb:147"
            },
            "result": {
              "status": "passed",
              "duration": 38763
            }
          },
          {
            "keyword": "When ",
            "name": "I run tails-custom-apt-sources",
            "line": 422,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 3886895
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 423,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 14698
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:559"
            },
            "result": {
              "status": "passed",
              "duration": 1657945
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 6501
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/celluloid.feature",
    "id": "using-celluloid",
    "keyword": "Feature",
    "name": "Using Celluloid",
    "description": "  As a Tails user\n  I want to watch local videos in Celluloid\n  And Flatpak portals should make it possible to open files in any location despite Flatpak's confinement",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 10170
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 1503897
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I create sample videos",
            "line": 8,
            "match": {
              "location": "features/step_definitions/celluloid.rb:4"
            },
            "result": {
              "status": "passed",
              "duration": 124089070
            }
          }
        ]
      },
      {
        "id": "using-celluloid;watching-a-mp4-video-stored-on-the-non-persistent-filesystem",
        "keyword": "Scenario",
        "name": "Watching a MP4 video stored on the non-persistent filesystem",
        "description": "",
        "line": 10,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 11,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 7300752584
            }
          },
          {
            "keyword": "And ",
            "name": "I plug and mount a USB drive containing sample videos",
            "line": 12,
            "match": {
              "location": "features/step_definitions/celluloid.rb:15"
            },
            "result": {
              "status": "passed",
              "duration": 7963236806
            }
          },
          {
            "keyword": "And ",
            "name": "I copy the sample videos to \"/home/amnesia\" as user \"amnesia\"",
            "line": 13,
            "match": {
              "location": "features/step_definitions/celluloid.rb:21"
            },
            "result": {
              "status": "passed",
              "duration": 37923139
            }
          },
          {
            "keyword": "And ",
            "name": "the file \"/home/amnesia/video.mp4\" exists",
            "line": 14,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1026"
            },
            "result": {
              "status": "passed",
              "duration": 32657672
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Files\" via GNOME Activities Overview",
            "line": 15,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1205"
            },
            "result": {
              "status": "passed",
              "duration": 7600251509
            }
          },
          {
            "keyword": "And ",
            "name": "I open \"/home/amnesia/video.mp4\" in Files",
            "line": 16,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1982"
            },
            "result": {
              "status": "passed",
              "duration": 5871776704
            }
          },
          {
            "keyword": "Then ",
            "name": "I see the 30s-long video loaded after at most 10 seconds",
            "line": 17,
            "match": {
              "location": "features/step_definitions/celluloid.rb:51"
            },
            "result": {
              "status": "passed",
              "duration": 3364776558
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 1791250890
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 458496
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 11512
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2064052
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I create sample videos",
            "line": 8,
            "match": {
              "location": "features/step_definitions/celluloid.rb:4"
            },
            "result": {
              "status": "passed",
              "duration": 130643183
            }
          }
        ]
      },
      {
        "id": "using-celluloid;watching-mp4-videos-stored-in-the-persistent-storage",
        "keyword": "Scenario",
        "name": "Watching MP4 videos stored in the Persistent Storage",
        "description": "",
        "line": 24,
        "type": "scenario",
        "comments": [
          {
            "value": "# The next scenario is similar to the previous one, except it opens the file in another way.",
            "line": 19
          },
          {
            "value": "# Since we're dealing with desktop portals, it's not entirely obvious that",
            "line": 20
          },
          {
            "value": "# clicking on \"Open\" from within Celluloid follows the same code path as",
            "line": 21
          },
          {
            "value": "# double-clicking on a file in Files. Now we have two tests follow those",
            "line": 22
          },
          {
            "value": "# two paths.",
            "line": 23
          }
        ],
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition enabled and logged in",
            "line": 25,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 7757162929
            }
          },
          {
            "keyword": "And ",
            "name": "I plug and mount a USB drive containing sample videos",
            "line": 26,
            "match": {
              "location": "features/step_definitions/celluloid.rb:15"
            },
            "result": {
              "status": "passed",
              "duration": 7926089262
            }
          },
          {
            "keyword": "And ",
            "name": "I copy the sample videos to \"/home/amnesia/Persistent\" as user \"amnesia\"",
            "line": 27,
            "match": {
              "location": "features/step_definitions/celluloid.rb:21"
            },
            "result": {
              "status": "passed",
              "duration": 31304236
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Celluloid\" via GNOME Activities Overview",
            "line": 28,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1205"
            },
            "result": {
              "status": "passed",
              "duration": 8161486978
            }
          },
          {
            "keyword": "And ",
            "name": "I open \"/home/amnesia/Persistent/video.mp4\" in Celluloid",
            "line": 29,
            "match": {
              "location": "features/step_definitions/celluloid.rb:30"
            },
            "result": {
              "status": "passed",
              "duration": 9239324564
            }
          },
          {
            "keyword": "Then ",
            "name": "I see the 30s-long video loaded after at most 10 seconds",
            "line": 30,
            "match": {
              "location": "features/step_definitions/celluloid.rb:51"
            },
            "result": {
              "status": "passed",
              "duration": 3667176959
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 1493464547
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 572599
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/dhcp.feature",
    "id": "getting-a-dhcp-lease-without-leaking-too-much-information",
    "keyword": "Feature",
    "name": "Getting a DHCP lease without leaking too much information",
    "description": "  As a Tails user\n  when I connect to a network with a DHCP server\n  I should be able to connect to the Internet\n  and the hostname should not have been leaked on the network.",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 8,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 10390
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2092085
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 9,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6247830759
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:188"
            },
            "result": {
              "status": "passed",
              "duration": 3746392
            }
          },
          {
            "keyword": "And ",
            "name": "the network is plugged",
            "line": 11,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 29874366
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 12,
            "match": {
              "location": "features/step_definitions/common_steps.rb:655"
            },
            "result": {
              "status": "passed",
              "duration": 8786601797
            }
          },
          {
            "keyword": "And ",
            "name": "all notifications have disappeared",
            "line": 13,
            "match": {
              "location": "features/step_definitions/common_steps.rb:767"
            },
            "result": {
              "status": "passed",
              "duration": 7146644533
            }
          },
          {
            "keyword": "And ",
            "name": "available upgrades have been checked",
            "line": 14,
            "match": {
              "location": "features/step_definitions/common_steps.rb:763"
            },
            "result": {
              "status": "passed",
              "duration": 43014990
            }
          }
        ]
      },
      {
        "id": "getting-a-dhcp-lease-without-leaking-too-much-information;getting-a-dhcp-lease-with-the-default-networkmanager-connection",
        "keyword": "Scenario",
        "name": "Getting a DHCP lease with the default NetworkManager connection",
        "description": "",
        "line": 16,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "Then ",
            "name": "the hostname should not have been leaked on the network",
            "line": 17,
            "match": {
              "location": "features/step_definitions/dhcp.rb:6"
            },
            "result": {
              "status": "passed",
              "duration": 75103919
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 819370296
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 67829833
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 8,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 35687
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 4931705
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 9,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 17988230792
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:188"
            },
            "result": {
              "status": "passed",
              "duration": 3407920
            }
          },
          {
            "keyword": "And ",
            "name": "the network is plugged",
            "line": 11,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 32477975
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 12,
            "match": {
              "location": "features/step_definitions/common_steps.rb:655"
            },
            "result": {
              "status": "passed",
              "duration": 9276596388
            }
          },
          {
            "keyword": "And ",
            "name": "all notifications have disappeared",
            "line": 13,
            "match": {
              "location": "features/step_definitions/common_steps.rb:767"
            },
            "result": {
              "status": "passed",
              "duration": 7408041277
            }
          },
          {
            "keyword": "And ",
            "name": "available upgrades have been checked",
            "line": 14,
            "match": {
              "location": "features/step_definitions/common_steps.rb:763"
            },
            "result": {
              "status": "passed",
              "duration": 52375719
            }
          }
        ]
      },
      {
        "id": "getting-a-dhcp-lease-without-leaking-too-much-information;getting-a-dhcp-lease-with-a-manually-configured-networkmanager-connection",
        "keyword": "Scenario",
        "name": "Getting a DHCP lease with a manually configured NetworkManager connection",
        "description": "",
        "line": 19,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "When ",
            "name": "I add a wired DHCP NetworkManager connection called \"manually-added-con\"",
            "line": 20,
            "match": {
              "location": "features/step_definitions/common_steps.rb:974"
            },
            "result": {
              "status": "passed",
              "duration": 99463541
            }
          },
          {
            "keyword": "And ",
            "name": "I switch to the \"manually-added-con\" NetworkManager connection",
            "line": 21,
            "match": {
              "location": "features/step_definitions/common_steps.rb:989"
            },
            "result": {
              "status": "passed",
              "duration": 337635529
            }
          },
          {
            "keyword": "Then ",
            "name": "the hostname should not have been leaked on the network",
            "line": 22,
            "match": {
              "location": "features/step_definitions/dhcp.rb:6"
            },
            "result": {
              "status": "passed",
              "duration": 109925247
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 784226516
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 47985387
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/documentation.feature",
    "id": "tails-documentation",
    "keyword": "Feature",
    "name": "Tails documentation",
    "description": "",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      },
      {
        "name": "@doc",
        "line": 1
      },
      {
        "name": "@not_release_blocker",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "tails-documentation;the-tails-documentation-launcher-works-when-offline",
        "keyword": "Scenario",
        "name": "The Tails documentation launcher works when offline",
        "description": "",
        "line": 4,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@doc",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 9918
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2304933
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 5,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6218050410
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Tails Documentation\" via GNOME Activities Overview",
            "line": 6,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1205"
            },
            "result": {
              "status": "passed",
              "duration": 9133659551
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Browser has started",
            "line": 7,
            "match": {
              "location": "features/step_definitions/browser.rb:502"
            },
            "result": {
              "status": "passed",
              "duration": 10298780672
            }
          },
          {
            "keyword": "And ",
            "name": "\"Tails - Documentation\" has loaded in the Tor Browser",
            "line": 8,
            "match": {
              "location": "features/step_definitions/browser.rb:275"
            },
            "result": {
              "status": "passed",
              "duration": 557616106
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 971814037
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 20648
            }
          }
        ]
      },
      {
        "id": "tails-documentation;the-tails-documentation-launcher-works-when-online",
        "keyword": "Scenario",
        "name": "The Tails documentation launcher works when online",
        "description": "",
        "line": 10,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@doc",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 9779
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2196569
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 11,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 9801464707
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Tails Documentation\" via GNOME Activities Overview",
            "line": 12,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1205"
            },
            "result": {
              "status": "passed",
              "duration": 9073173271
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Browser has started",
            "line": 13,
            "match": {
              "location": "features/step_definitions/browser.rb:502"
            },
            "result": {
              "status": "passed",
              "duration": 9695606850
            }
          },
          {
            "keyword": "And ",
            "name": "\"Tails - Documentation\" has loaded in the Tor Browser",
            "line": 14,
            "match": {
              "location": "features/step_definitions/browser.rb:275"
            },
            "result": {
              "status": "passed",
              "duration": 472848994
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 710443810
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 20098
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/electrum.feature",
    "id": "electrum-bitcoin-client",
    "keyword": "Feature",
    "name": "Electrum Bitcoin client",
    "description": "  As a Tails user\n  I might want to use a Bitcoin client\n  And all Internet traffic should flow only through Tor",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      },
      {
        "name": "@check_tor_leaks",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "electrum-bitcoin-client;i-am-warned-if-electrum-is-not-persistent",
        "keyword": "Scenario",
        "name": "I am warned if Electrum is not persistent",
        "description": "",
        "line": 7,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 9768
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2562321
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 1675437
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 18146350677
            }
          },
          {
            "keyword": "When ",
            "name": "I start Electrum through the GNOME menu",
            "line": 9,
            "match": {
              "location": "features/step_definitions/electrum.rb:13"
            },
            "result": {
              "status": "passed",
              "duration": 9839644304
            }
          },
          {
            "keyword": "But ",
            "name": "the \"electrum\" tps feature is not enabled",
            "line": 10,
            "match": {
              "location": "features/step_definitions/usb.rb:829"
            },
            "result": {
              "status": "passed",
              "duration": 185364070
            }
          },
          {
            "keyword": "And ",
            "name": "I see a warning that Electrum is not persistent",
            "line": 11,
            "match": {
              "location": "features/step_definitions/electrum.rb:78"
            },
            "result": {
              "status": "passed",
              "duration": 640404038
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:535"
            },
            "result": {
              "status": "passed",
              "duration": 256071158
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 609020289
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 56796
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/evince.feature",
    "id": "using-evince",
    "keyword": "Feature",
    "name": "Using Evince",
    "description": "  As a Tails user\n  I want to view and print PDF files in Evince",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "using-evince;i-can-view-and-print-a-pdf-file-stored-in-/usr/share",
        "keyword": "Scenario",
        "name": "I can view and print a PDF file stored in /usr/share",
        "description": "",
        "line": 6,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 13285
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2041730
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 7,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 17926794555
            }
          },
          {
            "keyword": "When ",
            "name": "I open \"/usr/share/cups/data/default-testpage.pdf\" with Evince",
            "line": 8,
            "match": {
              "location": "features/step_definitions/evince.rb:1"
            },
            "result": {
              "status": "passed",
              "duration": 4200503125
            }
          },
          {
            "keyword": "Then ",
            "name": "I see \"CupsTestPage.png\" after at most 40 seconds",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:802"
            },
            "result": {
              "status": "passed",
              "duration": 971631219
            }
          },
          {
            "keyword": "And ",
            "name": "I can print the current document to \"/home/amnesia/output.pdf\"",
            "line": 10,
            "match": {
              "location": "features/step_definitions/evince.rb:5"
            },
            "result": {
              "status": "passed",
              "duration": 4389233247
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 680101556
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 21279
            }
          }
        ]
      },
      {
        "id": "using-evince;i-can-view-and-print-a-pdf-file-stored-in-non-persistent-/home/amnesia",
        "keyword": "Scenario",
        "name": "I can view and print a PDF file stored in non-persistent /home/amnesia",
        "description": "",
        "line": 12,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 11001
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2371987
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 13,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6376182707
            }
          },
          {
            "keyword": "And ",
            "name": "I copy \"/usr/share/cups/data/default-testpage.pdf\" to \"/home/amnesia\" as user \"amnesia\"",
            "line": 14,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1057"
            },
            "result": {
              "status": "passed",
              "duration": 65752672
            }
          },
          {
            "keyword": "When ",
            "name": "I open \"/home/amnesia/default-testpage.pdf\" with Evince",
            "line": 15,
            "match": {
              "location": "features/step_definitions/evince.rb:1"
            },
            "result": {
              "status": "passed",
              "duration": 4167937679
            }
          },
          {
            "keyword": "Then ",
            "name": "I see \"CupsTestPage.png\" after at most 40 seconds",
            "line": 16,
            "match": {
              "location": "features/step_definitions/common_steps.rb:802"
            },
            "result": {
              "status": "passed",
              "duration": 967047606
            }
          },
          {
            "keyword": "And ",
            "name": "I can print the current document to \"/home/amnesia/output.pdf\"",
            "line": 17,
            "match": {
              "location": "features/step_definitions/evince.rb:5"
            },
            "result": {
              "status": "passed",
              "duration": 4025825269
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 524692762
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 21038
            }
          }
        ]
      },
      {
        "id": "using-evince;i-can-view-and-print-a-pdf-file-stored-in-persistent-/home/amnesia/persistent",
        "keyword": "Scenario",
        "name": "I can view and print a PDF file stored in persistent /home/amnesia/Persistent",
        "description": "",
        "line": 19,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 11019
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2177165
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition enabled and logged in",
            "line": 20,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 7761666880
            }
          },
          {
            "keyword": "And ",
            "name": "I copy \"/usr/share/cups/data/default-testpage.pdf\" to \"/home/amnesia/Persistent\" as user \"amnesia\"",
            "line": 21,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1057"
            },
            "result": {
              "status": "passed",
              "duration": 53048285
            }
          },
          {
            "keyword": "Then ",
            "name": "the file \"/home/amnesia/Persistent/default-testpage.pdf\" exists",
            "line": 22,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1026"
            },
            "result": {
              "status": "passed",
              "duration": 73901734
            }
          },
          {
            "keyword": "When ",
            "name": "I open \"/home/amnesia/Persistent/default-testpage.pdf\" with Evince",
            "line": 23,
            "match": {
              "location": "features/step_definitions/evince.rb:1"
            },
            "result": {
              "status": "passed",
              "duration": 3835580406
            }
          },
          {
            "keyword": "Then ",
            "name": "I see \"CupsTestPage.png\" after at most 40 seconds",
            "line": 24,
            "match": {
              "location": "features/step_definitions/common_steps.rb:802"
            },
            "result": {
              "status": "passed",
              "duration": 884376842
            }
          },
          {
            "keyword": "And ",
            "name": "I can print the current document to \"/home/amnesia/Persistent/output.pdf\"",
            "line": 25,
            "match": {
              "location": "features/step_definitions/evince.rb:5"
            },
            "result": {
              "status": "passed",
              "duration": 4026305869
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 525288074
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 21621
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/gnome.feature",
    "id": "gnome-is-well-integrated-into-tails",
    "keyword": "Feature",
    "name": "GNOME is well-integrated into Tails",
    "description": "",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "gnome-is-well-integrated-into-tails;a-screenshot-is-taken-when-the-printscreen-key-is-pressed",
        "keyword": "Scenario",
        "name": "A screenshot is taken when the PRINTSCREEN key is pressed",
        "description": "",
        "line": 5,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 4
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 10029
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2042191
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 6,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6288105152
            }
          },
          {
            "keyword": "And ",
            "name": "I wait 10 seconds",
            "line": 7,
            "output": [
              "Slept for 10 seconds"
            ],
            "match": {
              "location": "features/step_definitions/common_steps.rb:1410"
            },
            "result": {
              "status": "passed",
              "duration": 10000159093
            }
          },
          {
            "keyword": "And ",
            "name": "there is no screenshot in the live user's Pictures directory",
            "line": 8,
            "match": {
              "location": "features/step_definitions/gnome.rb:7"
            },
            "result": {
              "status": "passed",
              "duration": 399627151
            }
          },
          {
            "keyword": "When ",
            "name": "I press the \"PRINTSCREEN\" key",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1304"
            },
            "result": {
              "status": "passed",
              "duration": 121000958
            }
          },
          {
            "keyword": "And ",
            "name": "GNOME offers me various screenshot options",
            "line": 10,
            "match": {
              "location": "features/step_definitions/gnome.rb:1"
            },
            "result": {
              "status": "passed",
              "duration": 904692214
            }
          },
          {
            "keyword": "And ",
            "name": "I press the \"Return\" key",
            "line": 11,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1304"
            },
            "result": {
              "status": "passed",
              "duration": 120744578
            }
          },
          {
            "keyword": "Then ",
            "name": "a screenshot is saved to the live user's Pictures directory",
            "line": 12,
            "match": {
              "location": "features/step_definitions/gnome.rb:17"
            },
            "result": {
              "status": "passed",
              "duration": 38681940
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 812939942
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 21441
            }
          }
        ]
      },
      {
        "id": "gnome-is-well-integrated-into-tails;gnome-notifications-are-shown-to-the-user",
        "keyword": "Scenario",
        "name": "GNOME notifications are shown to the user",
        "description": "",
        "line": 14,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 9477
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2431668
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 15,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6275214506
            }
          },
          {
            "keyword": "When ",
            "name": "the \"Dogtail rules!\" notification is sent",
            "line": 16,
            "match": {
              "location": "features/step_definitions/gnome.rb:26"
            },
            "result": {
              "status": "passed",
              "duration": 192509771
            }
          },
          {
            "keyword": "Then ",
            "name": "the \"Dogtail rules!\" notification is shown to the user",
            "line": 17,
            "match": {
              "location": "features/step_definitions/gnome.rb:30"
            },
            "result": {
              "status": "passed",
              "duration": 238358055
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 944728181
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 22511
            }
          }
        ]
      },
      {
        "id": "gnome-is-well-integrated-into-tails;i-can-launch-various-apps-via-gnome-activities-overview",
        "keyword": "Scenario",
        "name": "I can launch various apps via GNOME Activities Overview",
        "description": "",
        "line": 19,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 9759
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2245181
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition enabled and logged in",
            "line": 22,
            "comments": [
              {
                "value": "# Some apps (Electrum and Persistent Storage Backup) only start when",
                "line": 20
              },
              {
                "value": "# a Persistent Storage is available.",
                "line": 21
              }
            ],
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 7604039181
            }
          },
          {
            "keyword": "And ",
            "name": "the network is plugged",
            "line": 24,
            "comments": [
              {
                "value": "# Some apps (Tor Browser) only start when the network is plugged.",
                "line": 23
              }
            ],
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 42192037
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 25,
            "match": {
              "location": "features/step_definitions/common_steps.rb:655"
            },
            "result": {
              "status": "passed",
              "duration": 10997549991
            }
          },
          {
            "keyword": "And ",
            "name": "all notifications have disappeared",
            "line": 26,
            "match": {
              "location": "features/step_definitions/common_steps.rb:767"
            },
            "result": {
              "status": "passed",
              "duration": 6943195669
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Additional Software\" via GNOME Activities Overview",
            "line": 27,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1205"
            },
            "result": {
              "status": "passed",
              "duration": 9301907681
            }
          },
          {
            "keyword": "And ",
            "name": "I close the \"tails-additional-software-config\" window",
            "line": 28,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1243"
            },
            "result": {
              "status": "passed",
              "duration": 1324858988
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Disks\" via GNOME Activities Overview",
            "line": 29,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1205"
            },
            "result": {
              "status": "passed",
              "duration": 7738606518
            }
          },
          {
            "keyword": "And ",
            "name": "I close the \"gnome-disks\" window via Alt+F4",
            "line": 31,
            "comments": [
              {
                "value": "# The close button of GNOME Disks is not accessible",
                "line": 30
              }
            ],
            "match": {
              "location": "features/step_definitions/common_steps.rb:1274"
            },
            "result": {
              "status": "passed",
              "duration": 286521967
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Console\" via GNOME Activities Overview",
            "line": 32,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1205"
            },
            "result": {
              "status": "passed",
              "duration": 7906340052
            }
          },
          {
            "keyword": "And ",
            "name": "I close Console",
            "line": 33,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1286"
            },
            "result": {
              "status": "passed",
              "duration": 2785563101
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Files\" via GNOME Activities Overview",
            "line": 34,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1205"
            },
            "result": {
              "status": "passed",
              "duration": 7368840983
            }
          },
          {
            "keyword": "And ",
            "name": "I close the \"org.gnome.Nautilus\" window",
            "line": 35,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1243"
            },
            "result": {
              "status": "passed",
              "duration": 13577104066
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Persistent Storage\" via GNOME Activities Overview",
            "line": 36,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1205"
            },
            "result": {
              "status": "passed",
              "duration": 9695179990
            }
          },
          {
            "keyword": "And ",
            "name": "I close the \"tps-frontend\" window",
            "line": 37,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1243"
            },
            "result": {
              "status": "passed",
              "duration": 1674015444
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Back Up Persistent Storage\" via GNOME Activities Overview",
            "line": 38,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1205"
            },
            "result": {
              "status": "passed",
              "duration": 9919734799
            }
          },
          {
            "keyword": "And ",
            "name": "I close the \"zenity\" window",
            "line": 39,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1243"
            },
            "result": {
              "status": "passed",
              "duration": 1953163566
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Pidgin\" via GNOME Activities Overview",
            "line": 40,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1205"
            },
            "result": {
              "status": "passed",
              "duration": 7594410810
            }
          },
          {
            "keyword": "And ",
            "name": "I close the \"Pidgin\" window via Alt+F4",
            "line": 41,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1274"
            },
            "result": {
              "status": "passed",
              "duration": 2001768005
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Thunderbird\" via GNOME Activities Overview",
            "line": 42,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1205"
            },
            "result": {
              "status": "passed",
              "duration": 8151120214
            }
          },
          {
            "keyword": "And ",
            "name": "I click \"Learn More\" in the \"Install Thunderbird\" zenity dialog",
            "line": 43,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1940"
            },
            "result": {
              "status": "passed",
              "duration": 3645326021
            }
          },
          {
            "keyword": "And ",
            "name": "I close the \"Firefox\" window",
            "line": 44,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1243"
            },
            "result": {
              "status": "passed",
              "duration": 6879987633
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Tor Browser\" via GNOME Activities Overview",
            "line": 45,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1205"
            },
            "result": {
              "status": "passed",
              "duration": 8155437726
            }
          },
          {
            "keyword": "And ",
            "name": "I close the \"Firefox\" window",
            "line": 46,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1243"
            },
            "result": {
              "status": "passed",
              "duration": 2573074316
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Unlock VeraCrypt Volumes\" via GNOME Activities Overview",
            "line": 47,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1205"
            },
            "result": {
              "status": "passed",
              "duration": 9774900981
            }
          },
          {
            "keyword": "And ",
            "name": "I close the \"unlock-veracrypt-volumes\" window",
            "line": 48,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1243"
            },
            "result": {
              "status": "passed",
              "duration": 1688220011
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Unsafe Browser\" via GNOME Activities Overview",
            "line": 49,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1205"
            },
            "result": {
              "status": "passed",
              "duration": 8527421855
            }
          },
          {
            "keyword": "And ",
            "name": "I close the \"Firefox\" window",
            "line": 50,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1243"
            },
            "result": {
              "status": "passed",
              "duration": 2970321060
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Secrets\" via GNOME Activities Overview",
            "line": 51,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1205"
            },
            "result": {
              "status": "passed",
              "duration": 7724760418
            }
          },
          {
            "keyword": "And ",
            "name": "I close the \"secrets\" window",
            "line": 52,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1243"
            },
            "result": {
              "status": "passed",
              "duration": 2231922903
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 936857840
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 22012
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/hardware_failure.feature",
    "id": "hardware-failures",
    "keyword": "Feature",
    "name": "Hardware failures",
    "description": "  In order to update my failing hardware before I lose data\n  As a Tails user\n  I want to be warned about hardware failures",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "hardware-failures;alerting-about-disk-read-failures-before-reaching-the-welcome-screen;;2",
        "keyword": "Scenario Outline",
        "name": "Alerting about disk read failures before reaching the Welcome Screen",
        "description": "",
        "line": 16,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@broken_welcome_screen",
            "line": 7
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 12182
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2229080
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 16,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 82348736
            }
          },
          {
            "keyword": "And ",
            "name": "SquashFS is damaged in a way that some read operations fail",
            "line": 16,
            "match": {
              "location": "features/step_definitions/hardware.rb:32"
            },
            "result": {
              "status": "passed",
              "duration": 32972
            }
          },
          {
            "keyword": "When ",
            "name": "I start the computer",
            "line": 16,
            "match": {
              "location": "features/step_definitions/common_steps.rb:205"
            },
            "result": {
              "status": "passed",
              "duration": 636227078
            }
          },
          {
            "keyword": "Then ",
            "name": "the computer boots Tails",
            "line": 16,
            "match": {
              "location": "features/step_definitions/common_steps.rb:405"
            },
            "result": {
              "status": "passed",
              "duration": 22027470114
            }
          },
          {
            "keyword": "And ",
            "name": "I see a disk failure message on the splash screen",
            "line": 16,
            "match": {
              "location": "features/step_definitions/hardware.rb:42"
            },
            "result": {
              "status": "passed",
              "duration": 1142300812
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 755329897
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 5698284
            }
          }
        ]
      },
      {
        "id": "hardware-failures;alerting-about-disk-read-failures-before-reaching-the-welcome-screen;;3",
        "keyword": "Scenario Outline",
        "name": "Alerting about disk read failures before reaching the Welcome Screen",
        "description": "",
        "line": 17,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@broken_welcome_screen",
            "line": 7
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 13256
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 1542960
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 17,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 104535022
            }
          },
          {
            "keyword": "And ",
            "name": "boot device is damaged in a way that some read operations fail",
            "line": 17,
            "match": {
              "location": "features/step_definitions/hardware.rb:32"
            },
            "result": {
              "status": "passed",
              "duration": 32441
            }
          },
          {
            "keyword": "When ",
            "name": "I start the computer",
            "line": 17,
            "match": {
              "location": "features/step_definitions/common_steps.rb:205"
            },
            "result": {
              "status": "passed",
              "duration": 645589822
            }
          },
          {
            "keyword": "Then ",
            "name": "the computer boots Tails",
            "line": 17,
            "match": {
              "location": "features/step_definitions/common_steps.rb:405"
            },
            "result": {
              "status": "passed",
              "duration": 21580976801
            }
          },
          {
            "keyword": "And ",
            "name": "I see a disk failure message on the splash screen",
            "line": 17,
            "match": {
              "location": "features/step_definitions/hardware.rb:42"
            },
            "result": {
              "status": "passed",
              "duration": 1126231012
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 684767583
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 38077748
            }
          }
        ]
      },
      {
        "id": "hardware-failures;alerting-about-disk-read-failures-before-reaching-the-welcome-screen;;4",
        "keyword": "Scenario Outline",
        "name": "Alerting about disk read failures before reaching the Welcome Screen",
        "description": "",
        "line": 18,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@broken_welcome_screen",
            "line": 7
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 17694
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2691875
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 18,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 90348458
            }
          },
          {
            "keyword": "And ",
            "name": "boot device with a target error is damaged in a way that some read operations fail",
            "line": 18,
            "match": {
              "location": "features/step_definitions/hardware.rb:32"
            },
            "result": {
              "status": "passed",
              "duration": 35286
            }
          },
          {
            "keyword": "When ",
            "name": "I start the computer",
            "line": 18,
            "match": {
              "location": "features/step_definitions/common_steps.rb:205"
            },
            "result": {
              "status": "passed",
              "duration": 667823573
            }
          },
          {
            "keyword": "Then ",
            "name": "the computer boots Tails",
            "line": 18,
            "match": {
              "location": "features/step_definitions/common_steps.rb:405"
            },
            "result": {
              "status": "passed",
              "duration": 21591075413
            }
          },
          {
            "keyword": "And ",
            "name": "I see a disk failure message on the splash screen",
            "line": 18,
            "match": {
              "location": "features/step_definitions/hardware.rb:42"
            },
            "result": {
              "status": "passed",
              "duration": 1022695867
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 764799961
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 5950346
            }
          }
        ]
      },
      {
        "id": "hardware-failures;alerting-about-disk-read-failures-in-gnome;;2",
        "keyword": "Scenario Outline",
        "name": "Alerting about disk read failures in GNOME",
        "description": "",
        "line": 29,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@doc",
            "line": 20
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 14608
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2287780
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 29,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 92716549
            }
          },
          {
            "keyword": "And ",
            "name": "I have started Tails without network from a USB drive with a persistent partition enabled and logged in",
            "line": 29,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 7594883871
            }
          },
          {
            "keyword": "When ",
            "name": "Tails detects disk read failures on the SquashFS",
            "line": 29,
            "match": {
              "location": "features/step_definitions/hardware.rb:5"
            },
            "result": {
              "status": "passed",
              "duration": 1251733623
            }
          },
          {
            "keyword": "Then ",
            "name": "I see a disk failure message",
            "line": 29,
            "match": {
              "location": "features/step_definitions/hardware.rb:38"
            },
            "result": {
              "status": "passed",
              "duration": 680055020
            }
          },
          {
            "keyword": "Then ",
            "name": "I can open the hardware failure documentation from the disk failure message",
            "line": 29,
            "match": {
              "location": "features/step_definitions/hardware.rb:46"
            },
            "result": {
              "status": "passed",
              "duration": 17292249431
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 1056629505
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 21080
            }
          }
        ]
      },
      {
        "id": "hardware-failures;alerting-about-disk-read-failures-in-gnome;;3",
        "keyword": "Scenario Outline",
        "name": "Alerting about disk read failures in GNOME",
        "description": "",
        "line": 30,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@doc",
            "line": 20
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 9719
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2405600
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 30,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 86799078
            }
          },
          {
            "keyword": "And ",
            "name": "I have started Tails without network from a USB drive with a persistent partition enabled and logged in",
            "line": 30,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 8011017702
            }
          },
          {
            "keyword": "When ",
            "name": "Tails detects disk read failures on the boot device",
            "line": 30,
            "match": {
              "location": "features/step_definitions/hardware.rb:5"
            },
            "result": {
              "status": "passed",
              "duration": 1307163160
            }
          },
          {
            "keyword": "Then ",
            "name": "I see a disk failure message",
            "line": 30,
            "match": {
              "location": "features/step_definitions/hardware.rb:38"
            },
            "result": {
              "status": "passed",
              "duration": 749270477
            }
          },
          {
            "keyword": "Then ",
            "name": "I can open the hardware failure documentation from the disk failure message",
            "line": 30,
            "match": {
              "location": "features/step_definitions/hardware.rb:46"
            },
            "result": {
              "status": "passed",
              "duration": 17510863355
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 891885984
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 22751
            }
          }
        ]
      },
      {
        "id": "hardware-failures;alerting-about-disk-read-failures-in-gnome;;4",
        "keyword": "Scenario Outline",
        "name": "Alerting about disk read failures in GNOME",
        "description": "",
        "line": 31,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@doc",
            "line": 20
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 10520
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2684700
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 31,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 86614103
            }
          },
          {
            "keyword": "And ",
            "name": "I have started Tails without network from a USB drive with a persistent partition enabled and logged in",
            "line": 31,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 7509835873
            }
          },
          {
            "keyword": "When ",
            "name": "Tails detects disk read failures on the boot device with a target error",
            "line": 31,
            "match": {
              "location": "features/step_definitions/hardware.rb:5"
            },
            "result": {
              "status": "passed",
              "duration": 1317127619
            }
          },
          {
            "keyword": "Then ",
            "name": "I see a disk failure message",
            "line": 31,
            "match": {
              "location": "features/step_definitions/hardware.rb:38"
            },
            "result": {
              "status": "passed",
              "duration": 642067283
            }
          },
          {
            "keyword": "Then ",
            "name": "I can open the hardware failure documentation from the disk failure message",
            "line": 31,
            "match": {
              "location": "features/step_definitions/hardware.rb:46"
            },
            "result": {
              "status": "passed",
              "duration": 17339175660
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 1146704577
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 19927
            }
          }
        ]
      },
      {
        "id": "hardware-failures;gpt-backup-corruption-with-a-persistent-partition;;2",
        "keyword": "Scenario Outline",
        "name": "GPT backup corruption with a persistent partition",
        "description": "",
        "line": 45,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 11822
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2719657
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition and stopped at Tails Greeter's login screen",
            "line": 45,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 8414738325
            }
          },
          {
            "keyword": "And ",
            "name": "I corrupt the boot device's GPT backup header",
            "line": 45,
            "match": {
              "location": "features/step_definitions/hardware.rb:56"
            },
            "result": {
              "status": "passed",
              "duration": 265743685
            }
          },
          {
            "keyword": "And ",
            "name": "I power off the computer",
            "line": 45,
            "match": {
              "location": "features/step_definitions/common_steps.rb:276"
            },
            "result": {
              "status": "passed",
              "duration": 238390290
            }
          },
          {
            "keyword": "When ",
            "name": "I start the computer",
            "line": 45,
            "match": {
              "location": "features/step_definitions/common_steps.rb:205"
            },
            "result": {
              "status": "passed",
              "duration": 609630402
            }
          },
          {
            "keyword": "Then ",
            "name": "the computer boots Tails",
            "line": 45,
            "match": {
              "location": "features/step_definitions/common_steps.rb:405"
            },
            "result": {
              "status": "passed",
              "duration": 35608688365
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session",
            "line": 45,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 8465829647
            }
          },
          {
            "keyword": "And ",
            "name": "all notifications have disappeared",
            "line": 45,
            "match": {
              "location": "features/step_definitions/common_steps.rb:767"
            },
            "result": {
              "status": "passed",
              "duration": 7025609710
            }
          },
          {
            "keyword": "Then ",
            "name": "I am recommended to migrate to a new USB stick due to partitioning errors",
            "line": 45,
            "match": {
              "location": "features/step_definitions/hardware.rb:82"
            },
            "result": {
              "status": "passed",
              "duration": 133624305
            }
          },
          {
            "keyword": "And ",
            "name": "Tails detected partitioning error partitioning-corruption",
            "line": 45,
            "match": {
              "location": "features/step_definitions/hardware.rb:129"
            },
            "result": {
              "status": "passed",
              "duration": 5749150
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 900757454
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 6216583
            }
          }
        ]
      },
      {
        "id": "hardware-failures;gpt-backup-corruption-with-a-persistent-partition;;3",
        "keyword": "Scenario Outline",
        "name": "GPT backup corruption with a persistent partition",
        "description": "",
        "line": 46,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 15027
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 1851394
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition and stopped at Tails Greeter's login screen",
            "line": 46,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 8244051772
            }
          },
          {
            "keyword": "And ",
            "name": "I corrupt the boot device's GPT backup partition table",
            "line": 46,
            "match": {
              "location": "features/step_definitions/hardware.rb:56"
            },
            "result": {
              "status": "passed",
              "duration": 229892331
            }
          },
          {
            "keyword": "And ",
            "name": "I power off the computer",
            "line": 46,
            "match": {
              "location": "features/step_definitions/common_steps.rb:276"
            },
            "result": {
              "status": "passed",
              "duration": 248977095
            }
          },
          {
            "keyword": "When ",
            "name": "I start the computer",
            "line": 46,
            "match": {
              "location": "features/step_definitions/common_steps.rb:205"
            },
            "result": {
              "status": "passed",
              "duration": 746193814
            }
          },
          {
            "keyword": "Then ",
            "name": "the computer boots Tails",
            "line": 46,
            "match": {
              "location": "features/step_definitions/common_steps.rb:405"
            },
            "result": {
              "status": "passed",
              "duration": 32682478991
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session",
            "line": 46,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 8251609538
            }
          },
          {
            "keyword": "And ",
            "name": "all notifications have disappeared",
            "line": 46,
            "match": {
              "location": "features/step_definitions/common_steps.rb:767"
            },
            "result": {
              "status": "passed",
              "duration": 6345299369
            }
          },
          {
            "keyword": "Then ",
            "name": "I am recommended to migrate to a new USB stick due to partitioning errors",
            "line": 46,
            "match": {
              "location": "features/step_definitions/hardware.rb:82"
            },
            "result": {
              "status": "passed",
              "duration": 113980417
            }
          },
          {
            "keyword": "And ",
            "name": "Tails detected partitioning error partitioning-corruption",
            "line": 46,
            "match": {
              "location": "features/step_definitions/hardware.rb:129"
            },
            "result": {
              "status": "passed",
              "duration": 4011658
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 789076015
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 6562981
            }
          }
        ]
      },
      {
        "id": "hardware-failures;gpt-backup-corruption-without-a-persistent-partition",
        "keyword": "Scenario",
        "name": "GPT backup corruption without a persistent partition",
        "description": "",
        "line": 48,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 15700
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 1819997
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 49,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 76092889
            }
          },
          {
            "keyword": "And ",
            "name": "I set Tails to boot with options \"test_gpt_corruption=gpt_backup,gpt_backup_table\"",
            "line": 50,
            "match": {
              "location": "features/step_definitions/common_steps.rb:197"
            },
            "result": {
              "status": "passed",
              "duration": 28914
            }
          },
          {
            "keyword": "And ",
            "name": "I temporarily create a 7200 MiB disk named \"temp\"",
            "line": 51,
            "match": {
              "location": "features/step_definitions/common_steps.rb:114"
            },
            "result": {
              "status": "passed",
              "duration": 18839714
            }
          },
          {
            "keyword": "And ",
            "name": "I plug USB drive \"temp\"",
            "line": 52,
            "match": {
              "location": "features/step_definitions/common_steps.rb:126"
            },
            "result": {
              "status": "passed",
              "duration": 1019345030
            }
          },
          {
            "keyword": "And ",
            "name": "I write the Tails USB image to disk \"temp\"",
            "line": 53,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1794"
            },
            "result": {
              "status": "passed",
              "duration": 13049995391
            }
          },
          {
            "keyword": "When ",
            "name": "I start Tails from USB drive \"temp\" with network unplugged",
            "line": 54,
            "match": {
              "location": "features/step_definitions/common_steps.rb:235"
            },
            "result": {
              "status": "passed",
              "duration": 50046322360
            }
          },
          {
            "keyword": "Then ",
            "name": "Tails is running from USB drive \"temp\"",
            "line": 55,
            "match": {
              "location": "features/step_definitions/usb.rb:942"
            },
            "result": {
              "status": "passed",
              "duration": 418976954
            }
          },
          {
            "keyword": "And ",
            "name": "the Greeter forbids creating a persistent partition",
            "line": 56,
            "match": {
              "location": "features/step_definitions/hardware.rb:97"
            },
            "result": {
              "status": "passed",
              "duration": 48341184
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session",
            "line": 57,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 7563628034
            }
          },
          {
            "keyword": "And ",
            "name": "all notifications have disappeared",
            "line": 58,
            "match": {
              "location": "features/step_definitions/common_steps.rb:767"
            },
            "result": {
              "status": "passed",
              "duration": 7556263740
            }
          },
          {
            "keyword": "Then ",
            "name": "I am recommended to reinstall Tails due to partitioning errors",
            "line": 59,
            "match": {
              "location": "features/step_definitions/hardware.rb:90"
            },
            "result": {
              "status": "passed",
              "duration": 101567526
            }
          },
          {
            "keyword": "And ",
            "name": "I close the \"zenity\" window",
            "line": 62,
            "comments": [
              {
                "value": "# We are gonna verify the dialog again so we need to clean up the",
                "line": 60
              },
              {
                "value": "# first instance.",
                "line": 61
              }
            ],
            "match": {
              "location": "features/step_definitions/common_steps.rb:1243"
            },
            "result": {
              "status": "passed",
              "duration": 1164527321
            }
          },
          {
            "keyword": "And ",
            "name": "I am told that Persistent Storage cannot be created",
            "line": 63,
            "match": {
              "location": "features/step_definitions/hardware.rb:124"
            },
            "result": {
              "status": "passed",
              "duration": 1185153884
            }
          },
          {
            "keyword": "And ",
            "name": "Tails detected partitioning error partitioning-corruption",
            "line": 64,
            "match": {
              "location": "features/step_definitions/hardware.rb:129"
            },
            "result": {
              "status": "passed",
              "duration": 4661271
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 1115878462
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 126114405
            }
          }
        ]
      },
      {
        "id": "hardware-failures;disk-partitioning-errors-without-a-persistent-partition;;2",
        "keyword": "Scenario Outline",
        "name": "Disk partitioning errors without a persistent partition",
        "description": "",
        "line": 80,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 16070
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2429193
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 80,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 108147208
            }
          },
          {
            "keyword": "And ",
            "name": "I set Tails to boot with options \"test_partitioning_errors=guid\"",
            "line": 80,
            "match": {
              "location": "features/step_definitions/common_steps.rb:197"
            },
            "result": {
              "status": "passed",
              "duration": 32851
            }
          },
          {
            "keyword": "And ",
            "name": "I temporarily create a 7200 MiB disk named \"temp\"",
            "line": 80,
            "match": {
              "location": "features/step_definitions/common_steps.rb:114"
            },
            "result": {
              "status": "passed",
              "duration": 22721442
            }
          },
          {
            "keyword": "And ",
            "name": "I plug USB drive \"temp\"",
            "line": 80,
            "match": {
              "location": "features/step_definitions/common_steps.rb:126"
            },
            "result": {
              "status": "passed",
              "duration": 1022137736
            }
          },
          {
            "keyword": "And ",
            "name": "I write the Tails USB image to disk \"temp\"",
            "line": 80,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1794"
            },
            "result": {
              "status": "passed",
              "duration": 13115344417
            }
          },
          {
            "keyword": "When ",
            "name": "I start Tails from USB drive \"temp\" with network unplugged",
            "line": 80,
            "match": {
              "location": "features/step_definitions/common_steps.rb:235"
            },
            "result": {
              "status": "passed",
              "duration": 59029858634
            }
          },
          {
            "keyword": "Then ",
            "name": "Tails is running from USB drive \"temp\"",
            "line": 80,
            "match": {
              "location": "features/step_definitions/usb.rb:942"
            },
            "result": {
              "status": "passed",
              "duration": 214423623
            }
          },
          {
            "keyword": "And ",
            "name": "the Greeter recommends reinstalling Tails due to partitioning errors",
            "line": 80,
            "match": {
              "location": "features/step_definitions/hardware.rb:74"
            },
            "result": {
              "status": "passed",
              "duration": 54462921
            }
          },
          {
            "keyword": "And ",
            "name": "the Greeter forbids starting Tails",
            "line": 80,
            "match": {
              "location": "features/step_definitions/hardware.rb:103"
            },
            "result": {
              "status": "passed",
              "duration": 31429267
            }
          },
          {
            "keyword": "And ",
            "name": "the Greeter forbids all settings but language",
            "line": 80,
            "match": {
              "location": "features/step_definitions/hardware.rb:109"
            },
            "result": {
              "status": "passed",
              "duration": 198071851
            }
          },
          {
            "keyword": "And ",
            "name": "Tails detected partitioning error guid-not-randomized",
            "line": 80,
            "match": {
              "location": "features/step_definitions/hardware.rb:129"
            },
            "result": {
              "status": "passed",
              "duration": 5858505
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 890747031
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 124112620
            }
          }
        ]
      },
      {
        "id": "hardware-failures;disk-partitioning-errors-without-a-persistent-partition;;3",
        "keyword": "Scenario Outline",
        "name": "Disk partitioning errors without a persistent partition",
        "description": "",
        "line": 81,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 15499
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2202392
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 81,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 98636766
            }
          },
          {
            "keyword": "And ",
            "name": "I set Tails to boot with options \"test_partitioning_errors=part_resize\"",
            "line": 81,
            "match": {
              "location": "features/step_definitions/common_steps.rb:197"
            },
            "result": {
              "status": "passed",
              "duration": 28592
            }
          },
          {
            "keyword": "And ",
            "name": "I temporarily create a 7200 MiB disk named \"temp\"",
            "line": 81,
            "match": {
              "location": "features/step_definitions/common_steps.rb:114"
            },
            "result": {
              "status": "passed",
              "duration": 22555913
            }
          },
          {
            "keyword": "And ",
            "name": "I plug USB drive \"temp\"",
            "line": 81,
            "match": {
              "location": "features/step_definitions/common_steps.rb:126"
            },
            "result": {
              "status": "passed",
              "duration": 1023530716
            }
          },
          {
            "keyword": "And ",
            "name": "I write the Tails USB image to disk \"temp\"",
            "line": 81,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1794"
            },
            "result": {
              "status": "passed",
              "duration": 13453613250
            }
          },
          {
            "keyword": "When ",
            "name": "I start Tails from USB drive \"temp\" with network unplugged",
            "line": 81,
            "match": {
              "location": "features/step_definitions/common_steps.rb:235"
            },
            "result": {
              "status": "passed",
              "duration": 44551953419
            }
          },
          {
            "keyword": "Then ",
            "name": "Tails is running from USB drive \"temp\"",
            "line": 81,
            "match": {
              "location": "features/step_definitions/usb.rb:942"
            },
            "result": {
              "status": "passed",
              "duration": 186675578
            }
          },
          {
            "keyword": "And ",
            "name": "the Greeter recommends reinstalling Tails due to partitioning errors",
            "line": 81,
            "match": {
              "location": "features/step_definitions/hardware.rb:74"
            },
            "result": {
              "status": "passed",
              "duration": 32005504
            }
          },
          {
            "keyword": "And ",
            "name": "the Greeter forbids starting Tails",
            "line": 81,
            "match": {
              "location": "features/step_definitions/hardware.rb:103"
            },
            "result": {
              "status": "passed",
              "duration": 29115269
            }
          },
          {
            "keyword": "And ",
            "name": "the Greeter forbids all settings but language",
            "line": 81,
            "match": {
              "location": "features/step_definitions/hardware.rb:109"
            },
            "result": {
              "status": "passed",
              "duration": 154596695
            }
          },
          {
            "keyword": "And ",
            "name": "Tails detected partitioning error system-partition-not-resized",
            "line": 81,
            "match": {
              "location": "features/step_definitions/hardware.rb:129"
            },
            "result": {
              "status": "passed",
              "duration": 6695138
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 608550601
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 123074624
            }
          }
        ]
      },
      {
        "id": "hardware-failures;disk-partitioning-errors-without-a-persistent-partition;;4",
        "keyword": "Scenario Outline",
        "name": "Disk partitioning errors without a persistent partition",
        "description": "",
        "line": 82,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 14969
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2319720
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 82,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 92517282
            }
          },
          {
            "keyword": "And ",
            "name": "I set Tails to boot with options \"test_partitioning_errors=fs_resize\"",
            "line": 82,
            "match": {
              "location": "features/step_definitions/common_steps.rb:197"
            },
            "result": {
              "status": "passed",
              "duration": 30988
            }
          },
          {
            "keyword": "And ",
            "name": "I temporarily create a 7200 MiB disk named \"temp\"",
            "line": 82,
            "match": {
              "location": "features/step_definitions/common_steps.rb:114"
            },
            "result": {
              "status": "passed",
              "duration": 22660149
            }
          },
          {
            "keyword": "And ",
            "name": "I plug USB drive \"temp\"",
            "line": 82,
            "match": {
              "location": "features/step_definitions/common_steps.rb:126"
            },
            "result": {
              "status": "passed",
              "duration": 1026907471
            }
          },
          {
            "keyword": "And ",
            "name": "I write the Tails USB image to disk \"temp\"",
            "line": 82,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1794"
            },
            "result": {
              "status": "passed",
              "duration": 13081281121
            }
          },
          {
            "keyword": "When ",
            "name": "I start Tails from USB drive \"temp\" with network unplugged",
            "line": 82,
            "match": {
              "location": "features/step_definitions/common_steps.rb:235"
            },
            "result": {
              "status": "passed",
              "duration": 40889487087
            }
          },
          {
            "keyword": "Then ",
            "name": "Tails is running from USB drive \"temp\"",
            "line": 82,
            "match": {
              "location": "features/step_definitions/usb.rb:942"
            },
            "result": {
              "status": "passed",
              "duration": 256257136
            }
          },
          {
            "keyword": "And ",
            "name": "the Greeter recommends reinstalling Tails due to partitioning errors",
            "line": 82,
            "match": {
              "location": "features/step_definitions/hardware.rb:74"
            },
            "result": {
              "status": "passed",
              "duration": 57948662
            }
          },
          {
            "keyword": "And ",
            "name": "the Greeter forbids starting Tails",
            "line": 82,
            "match": {
              "location": "features/step_definitions/hardware.rb:103"
            },
            "result": {
              "status": "passed",
              "duration": 32251534
            }
          },
          {
            "keyword": "And ",
            "name": "the Greeter forbids all settings but language",
            "line": 82,
            "match": {
              "location": "features/step_definitions/hardware.rb:109"
            },
            "result": {
              "status": "passed",
              "duration": 220945229
            }
          },
          {
            "keyword": "And ",
            "name": "Tails detected partitioning error fs-not-resized",
            "line": 82,
            "match": {
              "location": "features/step_definitions/hardware.rb:129"
            },
            "result": {
              "status": "passed",
              "duration": 4606278
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 569562916
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 128979256
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/hardware_support.feature",
    "id": "hardware-support",
    "keyword": "Feature",
    "name": "Hardware support",
    "description": "  In order to understand why Tails does not work\n  As someone using a computer that is not supported by Tails\n  I want to be informed that my hardware is not supported",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "hardware-support;alerting-about-unsupported-graphics-card-before-reaching-the-welcome-screen",
        "keyword": "Scenario",
        "name": "Alerting about unsupported graphics card before reaching the Welcome Screen",
        "description": "",
        "line": 8,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@broken_welcome_screen",
            "line": 7
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 24627
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2280798
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 148983638
            }
          },
          {
            "keyword": "And ",
            "name": "the computer has an unsupported graphics card",
            "line": 10,
            "match": {
              "location": "features/step_definitions/hardware.rb:1"
            },
            "result": {
              "status": "passed",
              "duration": 19466
            }
          },
          {
            "keyword": "When ",
            "name": "I start the computer",
            "line": 11,
            "match": {
              "location": "features/step_definitions/common_steps.rb:205"
            },
            "result": {
              "status": "passed",
              "duration": 674044790
            }
          },
          {
            "keyword": "Then ",
            "name": "the computer boots Tails",
            "line": 12,
            "match": {
              "location": "features/step_definitions/common_steps.rb:405"
            },
            "result": {
              "status": "passed",
              "duration": 24101967556
            }
          },
          {
            "keyword": "Then ",
            "name": "I see a graphics card failure message on the splash screen",
            "line": 13,
            "match": {
              "location": "features/step_definitions/hardware.rb:52"
            },
            "result": {
              "status": "passed",
              "duration": 11204453393
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 667087553
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 6436866
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/keys.feature",
    "id": "tails-related-cryptographic-keys-are-up-to-date",
    "keyword": "Feature",
    "name": "Tails-related cryptographic keys are up-to-date",
    "description": "",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "tails-related-cryptographic-keys-are-up-to-date;the-included-openpgp-keys-are-up-to-date",
        "keyword": "Scenario",
        "name": "The included OpenPGP keys are up-to-date",
        "description": "",
        "line": 5,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@doc",
            "line": 4
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 15258
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 1743864
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 6,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 19057898011
            }
          },
          {
            "keyword": "Then ",
            "name": "the included OpenPGP keys are valid for the next 1 month",
            "line": 7,
            "match": {
              "location": "features/step_definitions/checks.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 1461920981
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 624624557
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 26429
            }
          }
        ]
      },
      {
        "id": "tails-related-cryptographic-keys-are-up-to-date;the-included-apt-repository-keys-are-up-to-date",
        "keyword": "Scenario",
        "name": "The included APT repository keys are up-to-date",
        "description": "",
        "line": 9,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 10158
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2199515
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 10,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6261150601
            }
          },
          {
            "keyword": "Then ",
            "name": "the keys trusted by APT are valid for the next 3 months",
            "line": 11,
            "match": {
              "location": "features/step_definitions/checks.rb:7"
            },
            "result": {
              "status": "passed",
              "duration": 893351832
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 524470269
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 22321
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/localization.feature",
    "id": "localization",
    "keyword": "Feature",
    "name": "Localization",
    "description": "  As a Tails user\n  I want Tails to be localized in my native language\n  And various Tails features should still work",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "localization;do-not-localize-the-xdg-user-dirs-to-be-able-to-use-those-dirs-in-tor-browser-(#19255);;2",
        "keyword": "Scenario Outline",
        "name": "Do not localize the XDG User Dirs to be able to use those dirs in Tor Browser (#19255)",
        "description": "",
        "line": 14,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 12373
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2355267
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and stopped at Tails Greeter's login screen",
            "line": 14,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 7106642992
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session in German (de)",
            "line": 14,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 25122930399
            }
          },
          {
            "keyword": "Then ",
            "name": "the live user's Documents directory exists",
            "line": 14,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1308"
            },
            "result": {
              "status": "passed",
              "duration": 28753434
            }
          },
          {
            "keyword": "And ",
            "name": "there is a GNOME bookmark for the Documents directory",
            "line": 14,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1312"
            },
            "result": {
              "status": "passed",
              "duration": 16967911390
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 1345337143
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 25258
            }
          }
        ]
      },
      {
        "id": "localization;do-not-localize-the-xdg-user-dirs-to-be-able-to-use-those-dirs-in-tor-browser-(#19255);;3",
        "keyword": "Scenario Outline",
        "name": "Do not localize the XDG User Dirs to be able to use those dirs in Tor Browser (#19255)",
        "description": "",
        "line": 15,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 11632
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2460824
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and stopped at Tails Greeter's login screen",
            "line": 15,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6260516156
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session in German (de)",
            "line": 15,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 24163225535
            }
          },
          {
            "keyword": "Then ",
            "name": "the live user's Downloads directory exists",
            "line": 15,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1308"
            },
            "result": {
              "status": "passed",
              "duration": 41813652
            }
          },
          {
            "keyword": "And ",
            "name": "there is a GNOME bookmark for the Downloads directory",
            "line": 15,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1312"
            },
            "result": {
              "status": "passed",
              "duration": 14195226755
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 579463556
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 22131
            }
          }
        ]
      },
      {
        "id": "localization;do-not-localize-the-xdg-user-dirs-to-be-able-to-use-those-dirs-in-tor-browser-(#19255);;4",
        "keyword": "Scenario Outline",
        "name": "Do not localize the XDG User Dirs to be able to use those dirs in Tor Browser (#19255)",
        "description": "",
        "line": 16,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 10099
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2271120
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and stopped at Tails Greeter's login screen",
            "line": 16,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6193026193
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session in German (de)",
            "line": 16,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 24666286050
            }
          },
          {
            "keyword": "Then ",
            "name": "the live user's Music directory exists",
            "line": 16,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1308"
            },
            "result": {
              "status": "passed",
              "duration": 49715143
            }
          },
          {
            "keyword": "And ",
            "name": "there is a GNOME bookmark for the Music directory",
            "line": 16,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1312"
            },
            "result": {
              "status": "passed",
              "duration": 15188359578
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 784872552
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 22622
            }
          }
        ]
      },
      {
        "id": "localization;do-not-localize-the-xdg-user-dirs-to-be-able-to-use-those-dirs-in-tor-browser-(#19255);;5",
        "keyword": "Scenario Outline",
        "name": "Do not localize the XDG User Dirs to be able to use those dirs in Tor Browser (#19255)",
        "description": "",
        "line": 17,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 9277
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2130737
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and stopped at Tails Greeter's login screen",
            "line": 17,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6301010487
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session in German (de)",
            "line": 17,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 25626519900
            }
          },
          {
            "keyword": "Then ",
            "name": "the live user's Pictures directory exists",
            "line": 17,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1308"
            },
            "result": {
              "status": "passed",
              "duration": 30872319
            }
          },
          {
            "keyword": "And ",
            "name": "there is a GNOME bookmark for the Pictures directory",
            "line": 17,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1312"
            },
            "result": {
              "status": "passed",
              "duration": 13976418305
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 943022792
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 23033
            }
          }
        ]
      },
      {
        "id": "localization;do-not-localize-the-xdg-user-dirs-to-be-able-to-use-those-dirs-in-tor-browser-(#19255);;6",
        "keyword": "Scenario Outline",
        "name": "Do not localize the XDG User Dirs to be able to use those dirs in Tor Browser (#19255)",
        "description": "",
        "line": 18,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 9868
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2819312
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and stopped at Tails Greeter's login screen",
            "line": 18,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6319195503
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session in German (de)",
            "line": 18,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 24624777195
            }
          },
          {
            "keyword": "Then ",
            "name": "the live user's Videos directory exists",
            "line": 18,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1308"
            },
            "result": {
              "status": "passed",
              "duration": 37096829
            }
          },
          {
            "keyword": "And ",
            "name": "there is a GNOME bookmark for the Videos directory",
            "line": 18,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1312"
            },
            "result": {
              "status": "passed",
              "duration": 14214535196
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 1130248637
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 24446
            }
          }
        ]
      },
      {
        "id": "localization;tails-is-localized-for-every-tier-1-language;;2",
        "keyword": "Scenario Outline",
        "name": "Tails is localized for every tier-1 language",
        "description": "",
        "line": 46,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@doc",
            "line": 20
          },
          {
            "name": "@slow",
            "line": 20
          },
          {
            "name": "@not_release_blocker",
            "line": 20
          }
        ],
        "comments": [
          {
            "value": "# This list has to be kept in sync' with our list of tier-1 languages:",
            "line": 39
          },
          {
            "value": "#   https://tails.net/contribute/how/translate/#tier-1-languages",
            "line": 40
          },
          {
            "value": "# Known issues, that this step effectively verifies are still present:",
            "line": 42
          },
          {
            "value": "#  - Not all localized layouts exist in the GNOME screen keyboard: #8444",
            "line": 43
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 14887
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2263284
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and stopped at Tails Greeter's login screen",
            "line": 46,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6232919151
            }
          },
          {
            "keyword": "And ",
            "name": "I set an administration password",
            "line": 46,
            "match": {
              "location": "features/step_definitions/common_steps.rb:578"
            },
            "result": {
              "status": "passed",
              "duration": 6671187798
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session in Arabic (ar)",
            "line": 46,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 24900498634
            }
          },
          {
            "keyword": "Then ",
            "name": "the keyboard layout is set to \"eg\"",
            "line": 46,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1716"
            },
            "result": {
              "status": "passed",
              "duration": 68230858
            }
          },
          {
            "keyword": "And ",
            "name": "tpsd is localized to the selected locale",
            "line": 46,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1746"
            },
            "result": {
              "status": "passed",
              "duration": 50026854
            }
          },
          {
            "keyword": "Given ",
            "name": "the network is plugged",
            "line": 46,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 43353358
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 46,
            "match": {
              "location": "features/step_definitions/common_steps.rb:655"
            },
            "result": {
              "status": "passed",
              "duration": 10278253093
            }
          },
          {
            "keyword": "Then ",
            "name": "I successfully start the Unsafe Browser",
            "line": 46,
            "match": {
              "location": "features/step_definitions/browser.rb:110"
            },
            "result": {
              "status": "passed",
              "duration": 5776454068
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Unsafe Browser",
            "line": 46,
            "match": {
              "location": "features/step_definitions/browser.rb:122"
            },
            "result": {
              "status": "passed",
              "duration": 5161467190
            }
          },
          {
            "keyword": "Given ",
            "name": "Thunderbird is installed",
            "line": 46,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:289"
            },
            "result": {
              "status": "passed",
              "duration": 50894595340
            }
          },
          {
            "keyword": "When ",
            "name": "I enable the screen keyboard",
            "line": 46,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1734"
            },
            "result": {
              "status": "passed",
              "duration": 55847922
            }
          },
          {
            "keyword": "Then ",
            "name": "the screen keyboard works in Tor Browser",
            "line": 46,
            "match": {
              "location": "features/step_definitions/browser.rb:448"
            },
            "result": {
              "status": "passed",
              "duration": 8050879502
            }
          },
          {
            "keyword": "And ",
            "name": "DuckDuckGo is the default search engine",
            "line": 46,
            "match": {
              "location": "features/step_definitions/browser.rb:437"
            },
            "result": {
              "status": "passed",
              "duration": 4616244190
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Tor Browser",
            "line": 46,
            "match": {
              "location": "features/step_definitions/browser.rb:122"
            },
            "result": {
              "status": "passed",
              "duration": 5151635467
            }
          },
          {
            "keyword": "And ",
            "name": "the screen keyboard works in Thunderbird",
            "line": 46,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:211"
            },
            "result": {
              "status": "passed",
              "duration": 3342424499
            }
          },
          {
            "keyword": "And ",
            "name": "the layout of the screen keyboard is set to \"us\"",
            "line": 46,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1742"
            },
            "result": {
              "status": "passed",
              "duration": 290591118
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 629118485
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 22573
            }
          }
        ]
      },
      {
        "id": "localization;tails-is-localized-for-every-tier-1-language;;3",
        "keyword": "Scenario Outline",
        "name": "Tails is localized for every tier-1 language",
        "description": "",
        "line": 47,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@doc",
            "line": 20
          },
          {
            "name": "@slow",
            "line": 20
          },
          {
            "name": "@not_release_blocker",
            "line": 20
          }
        ],
        "comments": [
          {
            "value": "# This list has to be kept in sync' with our list of tier-1 languages:",
            "line": 39
          },
          {
            "value": "#   https://tails.net/contribute/how/translate/#tier-1-languages",
            "line": 40
          },
          {
            "value": "# Known issues, that this step effectively verifies are still present:",
            "line": 42
          },
          {
            "value": "#  - Not all localized layouts exist in the GNOME screen keyboard: #8444",
            "line": 43
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 11862
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2266240
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and stopped at Tails Greeter's login screen",
            "line": 47,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6402412705
            }
          },
          {
            "keyword": "And ",
            "name": "I set an administration password",
            "line": 47,
            "match": {
              "location": "features/step_definitions/common_steps.rb:578"
            },
            "result": {
              "status": "passed",
              "duration": 6802063953
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session in Chinese (zh_CN)",
            "line": 47,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 24574845259
            }
          },
          {
            "keyword": "Then ",
            "name": "the keyboard layout is set to \"cn\"",
            "line": 47,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1716"
            },
            "result": {
              "status": "passed",
              "duration": 107451595
            }
          },
          {
            "keyword": "And ",
            "name": "tpsd is localized to the selected locale",
            "line": 47,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1746"
            },
            "result": {
              "status": "passed",
              "duration": 91033083
            }
          },
          {
            "keyword": "Given ",
            "name": "the network is plugged",
            "line": 47,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 34666018
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 47,
            "match": {
              "location": "features/step_definitions/common_steps.rb:655"
            },
            "result": {
              "status": "passed",
              "duration": 10234463543
            }
          },
          {
            "keyword": "Then ",
            "name": "I successfully start the Unsafe Browser",
            "line": 47,
            "match": {
              "location": "features/step_definitions/browser.rb:110"
            },
            "result": {
              "status": "passed",
              "duration": 4229062275
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Unsafe Browser",
            "line": 47,
            "match": {
              "location": "features/step_definitions/browser.rb:122"
            },
            "result": {
              "status": "passed",
              "duration": 5128303782
            }
          },
          {
            "keyword": "Given ",
            "name": "Thunderbird is installed",
            "line": 47,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:289"
            },
            "result": {
              "status": "passed",
              "duration": 50837769596
            }
          },
          {
            "keyword": "When ",
            "name": "I enable the screen keyboard",
            "line": 47,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1734"
            },
            "result": {
              "status": "passed",
              "duration": 64538129
            }
          },
          {
            "keyword": "Then ",
            "name": "the screen keyboard works in Tor Browser",
            "line": 47,
            "match": {
              "location": "features/step_definitions/browser.rb:448"
            },
            "result": {
              "status": "passed",
              "duration": 7926499405
            }
          },
          {
            "keyword": "And ",
            "name": "DuckDuckGo is the default search engine",
            "line": 47,
            "match": {
              "location": "features/step_definitions/browser.rb:437"
            },
            "result": {
              "status": "passed",
              "duration": 4914353674
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Tor Browser",
            "line": 47,
            "match": {
              "location": "features/step_definitions/browser.rb:122"
            },
            "result": {
              "status": "passed",
              "duration": 5155319647
            }
          },
          {
            "keyword": "And ",
            "name": "the screen keyboard works in Thunderbird",
            "line": 47,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:211"
            },
            "result": {
              "status": "passed",
              "duration": 3352919441
            }
          },
          {
            "keyword": "And ",
            "name": "the layout of the screen keyboard is set to \"us\"",
            "line": 47,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1742"
            },
            "result": {
              "status": "passed",
              "duration": 278546797
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 584234463
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 24886
            }
          }
        ]
      },
      {
        "id": "localization;tails-is-localized-for-every-tier-1-language;;4",
        "keyword": "Scenario Outline",
        "name": "Tails is localized for every tier-1 language",
        "description": "",
        "line": 48,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@doc",
            "line": 20
          },
          {
            "name": "@slow",
            "line": 20
          },
          {
            "name": "@not_release_blocker",
            "line": 20
          }
        ],
        "comments": [
          {
            "value": "# This list has to be kept in sync' with our list of tier-1 languages:",
            "line": 39
          },
          {
            "value": "#   https://tails.net/contribute/how/translate/#tier-1-languages",
            "line": 40
          },
          {
            "value": "# Known issues, that this step effectively verifies are still present:",
            "line": 42
          },
          {
            "value": "#  - Not all localized layouts exist in the GNOME screen keyboard: #8444",
            "line": 43
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 13374
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2185450
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and stopped at Tails Greeter's login screen",
            "line": 48,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6579887193
            }
          },
          {
            "keyword": "And ",
            "name": "I set an administration password",
            "line": 48,
            "match": {
              "location": "features/step_definitions/common_steps.rb:578"
            },
            "result": {
              "status": "passed",
              "duration": 6853032206
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session in English (en)",
            "line": 48,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 11409780096
            }
          },
          {
            "keyword": "Then ",
            "name": "the keyboard layout is set to \"us\"",
            "line": 48,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1716"
            },
            "result": {
              "status": "passed",
              "duration": 125386361
            }
          },
          {
            "keyword": "And ",
            "name": "tpsd is localized to the selected locale",
            "line": 48,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1746"
            },
            "result": {
              "status": "passed",
              "duration": 129624072
            }
          },
          {
            "keyword": "Given ",
            "name": "the network is plugged",
            "line": 48,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 50053795
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 48,
            "match": {
              "location": "features/step_definitions/common_steps.rb:655"
            },
            "result": {
              "status": "passed",
              "duration": 11072684210
            }
          },
          {
            "keyword": "Then ",
            "name": "I successfully start the Unsafe Browser",
            "line": 48,
            "match": {
              "location": "features/step_definitions/browser.rb:110"
            },
            "result": {
              "status": "passed",
              "duration": 4500851372
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Unsafe Browser",
            "line": 48,
            "match": {
              "location": "features/step_definitions/browser.rb:122"
            },
            "result": {
              "status": "passed",
              "duration": 5177271080
            }
          },
          {
            "keyword": "Given ",
            "name": "Thunderbird is installed",
            "line": 48,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:289"
            },
            "result": {
              "status": "passed",
              "duration": 50363886501
            }
          },
          {
            "keyword": "When ",
            "name": "I enable the screen keyboard",
            "line": 48,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1734"
            },
            "result": {
              "status": "passed",
              "duration": 75148303
            }
          },
          {
            "keyword": "Then ",
            "name": "the screen keyboard works in Tor Browser",
            "line": 48,
            "match": {
              "location": "features/step_definitions/browser.rb:448"
            },
            "result": {
              "status": "passed",
              "duration": 7756006500
            }
          },
          {
            "keyword": "And ",
            "name": "DuckDuckGo is the default search engine",
            "line": 48,
            "match": {
              "location": "features/step_definitions/browser.rb:437"
            },
            "result": {
              "status": "passed",
              "duration": 3527017884
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Tor Browser",
            "line": 48,
            "match": {
              "location": "features/step_definitions/browser.rb:122"
            },
            "result": {
              "status": "passed",
              "duration": 5237859593
            }
          },
          {
            "keyword": "And ",
            "name": "the screen keyboard works in Thunderbird",
            "line": 48,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:211"
            },
            "result": {
              "status": "passed",
              "duration": 3636837657
            }
          },
          {
            "keyword": "And ",
            "name": "the layout of the screen keyboard is set to \"us\"",
            "line": 48,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1742"
            },
            "result": {
              "status": "passed",
              "duration": 283575257
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 979974313
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 22300
            }
          }
        ]
      },
      {
        "id": "localization;tails-is-localized-for-every-tier-1-language;;5",
        "keyword": "Scenario Outline",
        "name": "Tails is localized for every tier-1 language",
        "description": "",
        "line": 49,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@doc",
            "line": 20
          },
          {
            "name": "@slow",
            "line": 20
          },
          {
            "name": "@not_release_blocker",
            "line": 20
          }
        ],
        "comments": [
          {
            "value": "# This list has to be kept in sync' with our list of tier-1 languages:",
            "line": 39
          },
          {
            "value": "#   https://tails.net/contribute/how/translate/#tier-1-languages",
            "line": 40
          },
          {
            "value": "# Known issues, that this step effectively verifies are still present:",
            "line": 42
          },
          {
            "value": "#  - Not all localized layouts exist in the GNOME screen keyboard: #8444",
            "line": 43
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 11271
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2277363
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and stopped at Tails Greeter's login screen",
            "line": 49,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6281425173
            }
          },
          {
            "keyword": "And ",
            "name": "I set an administration password",
            "line": 49,
            "match": {
              "location": "features/step_definitions/common_steps.rb:578"
            },
            "result": {
              "status": "passed",
              "duration": 6697854924
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session in French (fr)",
            "line": 49,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 25489458903
            }
          },
          {
            "keyword": "Then ",
            "name": "the keyboard layout is set to \"fr\"",
            "line": 49,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1716"
            },
            "result": {
              "status": "passed",
              "duration": 78480527
            }
          },
          {
            "keyword": "And ",
            "name": "tpsd is localized to the selected locale",
            "line": 49,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1746"
            },
            "result": {
              "status": "passed",
              "duration": 70807543
            }
          },
          {
            "keyword": "Given ",
            "name": "the network is plugged",
            "line": 49,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 23720021
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 49,
            "match": {
              "location": "features/step_definitions/common_steps.rb:655"
            },
            "result": {
              "status": "passed",
              "duration": 10270753232
            }
          },
          {
            "keyword": "Then ",
            "name": "I successfully start the Unsafe Browser",
            "line": 49,
            "match": {
              "location": "features/step_definitions/browser.rb:110"
            },
            "result": {
              "status": "passed",
              "duration": 4830001974
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Unsafe Browser",
            "line": 49,
            "match": {
              "location": "features/step_definitions/browser.rb:122"
            },
            "result": {
              "status": "passed",
              "duration": 5152624829
            }
          },
          {
            "keyword": "Given ",
            "name": "Thunderbird is installed",
            "line": 49,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:289"
            },
            "result": {
              "status": "passed",
              "duration": 50639770878
            }
          },
          {
            "keyword": "When ",
            "name": "I enable the screen keyboard",
            "line": 49,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1734"
            },
            "result": {
              "status": "passed",
              "duration": 51462332
            }
          },
          {
            "keyword": "Then ",
            "name": "the screen keyboard works in Tor Browser",
            "line": 49,
            "match": {
              "location": "features/step_definitions/browser.rb:448"
            },
            "result": {
              "status": "passed",
              "duration": 7893293504
            }
          },
          {
            "keyword": "And ",
            "name": "DuckDuckGo is the default search engine",
            "line": 49,
            "match": {
              "location": "features/step_definitions/browser.rb:437"
            },
            "result": {
              "status": "passed",
              "duration": 4746927119
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Tor Browser",
            "line": 49,
            "match": {
              "location": "features/step_definitions/browser.rb:122"
            },
            "result": {
              "status": "passed",
              "duration": 5161268709
            }
          },
          {
            "keyword": "And ",
            "name": "the screen keyboard works in Thunderbird",
            "line": 49,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:211"
            },
            "result": {
              "status": "passed",
              "duration": 3515364294
            }
          },
          {
            "keyword": "And ",
            "name": "the layout of the screen keyboard is set to \"fr\"",
            "line": 49,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1742"
            },
            "result": {
              "status": "passed",
              "duration": 281745741
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 525613073
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 24165
            }
          }
        ]
      },
      {
        "id": "localization;tails-is-localized-for-every-tier-1-language;;6",
        "keyword": "Scenario Outline",
        "name": "Tails is localized for every tier-1 language",
        "description": "",
        "line": 50,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@doc",
            "line": 20
          },
          {
            "name": "@slow",
            "line": 20
          },
          {
            "name": "@not_release_blocker",
            "line": 20
          }
        ],
        "comments": [
          {
            "value": "# This list has to be kept in sync' with our list of tier-1 languages:",
            "line": 39
          },
          {
            "value": "#   https://tails.net/contribute/how/translate/#tier-1-languages",
            "line": 40
          },
          {
            "value": "# Known issues, that this step effectively verifies are still present:",
            "line": 42
          },
          {
            "value": "#  - Not all localized layouts exist in the GNOME screen keyboard: #8444",
            "line": 43
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 16371
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2467828
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and stopped at Tails Greeter's login screen",
            "line": 50,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6481535448
            }
          },
          {
            "keyword": "And ",
            "name": "I set an administration password",
            "line": 50,
            "match": {
              "location": "features/step_definitions/common_steps.rb:578"
            },
            "result": {
              "status": "passed",
              "duration": 6923257670
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session in German (de)",
            "line": 50,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 25486478999
            }
          },
          {
            "keyword": "Then ",
            "name": "the keyboard layout is set to \"de\"",
            "line": 50,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1716"
            },
            "result": {
              "status": "passed",
              "duration": 79695540
            }
          },
          {
            "keyword": "And ",
            "name": "tpsd is localized to the selected locale",
            "line": 50,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1746"
            },
            "result": {
              "status": "passed",
              "duration": 50497855
            }
          },
          {
            "keyword": "Given ",
            "name": "the network is plugged",
            "line": 50,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 38379444
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 50,
            "match": {
              "location": "features/step_definitions/common_steps.rb:655"
            },
            "result": {
              "status": "passed",
              "duration": 12083109932
            }
          },
          {
            "keyword": "Then ",
            "name": "I successfully start the Unsafe Browser",
            "line": 50,
            "match": {
              "location": "features/step_definitions/browser.rb:110"
            },
            "result": {
              "status": "passed",
              "duration": 4584031416
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Unsafe Browser",
            "line": 50,
            "match": {
              "location": "features/step_definitions/browser.rb:122"
            },
            "result": {
              "status": "passed",
              "duration": 5291534074
            }
          },
          {
            "keyword": "Given ",
            "name": "Thunderbird is installed",
            "line": 50,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:289"
            },
            "result": {
              "status": "passed",
              "duration": 51676391113
            }
          },
          {
            "keyword": "When ",
            "name": "I enable the screen keyboard",
            "line": 50,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1734"
            },
            "result": {
              "status": "passed",
              "duration": 70335086
            }
          },
          {
            "keyword": "Then ",
            "name": "the screen keyboard works in Tor Browser",
            "line": 50,
            "match": {
              "location": "features/step_definitions/browser.rb:448"
            },
            "result": {
              "status": "passed",
              "duration": 8283004267
            }
          },
          {
            "keyword": "And ",
            "name": "DuckDuckGo is the default search engine",
            "line": 50,
            "match": {
              "location": "features/step_definitions/browser.rb:437"
            },
            "result": {
              "status": "passed",
              "duration": 4788618420
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Tor Browser",
            "line": 50,
            "match": {
              "location": "features/step_definitions/browser.rb:122"
            },
            "result": {
              "status": "passed",
              "duration": 5167911890
            }
          },
          {
            "keyword": "And ",
            "name": "the screen keyboard works in Thunderbird",
            "line": 50,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:211"
            },
            "result": {
              "status": "passed",
              "duration": 3292902636
            }
          },
          {
            "keyword": "And ",
            "name": "the layout of the screen keyboard is set to \"de\"",
            "line": 50,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1742"
            },
            "result": {
              "status": "passed",
              "duration": 288690711
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 626345674
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 20939
            }
          }
        ]
      },
      {
        "id": "localization;tails-is-localized-for-every-tier-1-language;;7",
        "keyword": "Scenario Outline",
        "name": "Tails is localized for every tier-1 language",
        "description": "",
        "line": 51,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@doc",
            "line": 20
          },
          {
            "name": "@slow",
            "line": 20
          },
          {
            "name": "@not_release_blocker",
            "line": 20
          }
        ],
        "comments": [
          {
            "value": "# This list has to be kept in sync' with our list of tier-1 languages:",
            "line": 39
          },
          {
            "value": "#   https://tails.net/contribute/how/translate/#tier-1-languages",
            "line": 40
          },
          {
            "value": "# Known issues, that this step effectively verifies are still present:",
            "line": 42
          },
          {
            "value": "#  - Not all localized layouts exist in the GNOME screen keyboard: #8444",
            "line": 43
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 11912
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2362310
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and stopped at Tails Greeter's login screen",
            "line": 51,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6469137733
            }
          },
          {
            "keyword": "And ",
            "name": "I set an administration password",
            "line": 51,
            "match": {
              "location": "features/step_definitions/common_steps.rb:578"
            },
            "result": {
              "status": "passed",
              "duration": 6977981164
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session in Hindi (hi)",
            "line": 51,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 25285818436
            }
          },
          {
            "keyword": "Then ",
            "name": "the keyboard layout is set to \"in\"",
            "line": 51,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1716"
            },
            "result": {
              "status": "passed",
              "duration": 81615297
            }
          },
          {
            "keyword": "And ",
            "name": "tpsd is localized to the selected locale",
            "line": 51,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1746"
            },
            "result": {
              "status": "passed",
              "duration": 90082230
            }
          },
          {
            "keyword": "Given ",
            "name": "the network is plugged",
            "line": 51,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 25405232
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 51,
            "match": {
              "location": "features/step_definitions/common_steps.rb:655"
            },
            "result": {
              "status": "passed",
              "duration": 10930565008
            }
          },
          {
            "keyword": "Then ",
            "name": "I successfully start the Unsafe Browser",
            "line": 51,
            "match": {
              "location": "features/step_definitions/browser.rb:110"
            },
            "result": {
              "status": "passed",
              "duration": 4402977622
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Unsafe Browser",
            "line": 51,
            "match": {
              "location": "features/step_definitions/browser.rb:122"
            },
            "result": {
              "status": "passed",
              "duration": 5150302434
            }
          },
          {
            "keyword": "Given ",
            "name": "Thunderbird is installed",
            "line": 51,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:289"
            },
            "result": {
              "status": "passed",
              "duration": 53747931692
            }
          },
          {
            "keyword": "When ",
            "name": "I enable the screen keyboard",
            "line": 51,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1734"
            },
            "result": {
              "status": "passed",
              "duration": 54179274
            }
          },
          {
            "keyword": "Then ",
            "name": "the screen keyboard works in Tor Browser",
            "line": 51,
            "match": {
              "location": "features/step_definitions/browser.rb:448"
            },
            "result": {
              "status": "passed",
              "duration": 7342968209
            }
          },
          {
            "keyword": "And ",
            "name": "DuckDuckGo is the default search engine",
            "line": 51,
            "match": {
              "location": "features/step_definitions/browser.rb:437"
            },
            "result": {
              "status": "passed",
              "duration": 5018571592
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Tor Browser",
            "line": 51,
            "match": {
              "location": "features/step_definitions/browser.rb:122"
            },
            "result": {
              "status": "passed",
              "duration": 5147410225
            }
          },
          {
            "keyword": "And ",
            "name": "the screen keyboard works in Thunderbird",
            "line": 51,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:211"
            },
            "result": {
              "status": "passed",
              "duration": 3162352949
            }
          },
          {
            "keyword": "And ",
            "name": "the layout of the screen keyboard is set to \"us\"",
            "line": 51,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1742"
            },
            "result": {
              "status": "passed",
              "duration": 275631742
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 589245883
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 23203
            }
          }
        ]
      },
      {
        "id": "localization;tails-is-localized-for-every-tier-1-language;;8",
        "keyword": "Scenario Outline",
        "name": "Tails is localized for every tier-1 language",
        "description": "",
        "line": 52,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@doc",
            "line": 20
          },
          {
            "name": "@slow",
            "line": 20
          },
          {
            "name": "@not_release_blocker",
            "line": 20
          }
        ],
        "comments": [
          {
            "value": "# This list has to be kept in sync' with our list of tier-1 languages:",
            "line": 39
          },
          {
            "value": "#   https://tails.net/contribute/how/translate/#tier-1-languages",
            "line": 40
          },
          {
            "value": "# Known issues, that this step effectively verifies are still present:",
            "line": 42
          },
          {
            "value": "#  - Not all localized layouts exist in the GNOME screen keyboard: #8444",
            "line": 43
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 12494
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2302188
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and stopped at Tails Greeter's login screen",
            "line": 52,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6339839397
            }
          },
          {
            "keyword": "And ",
            "name": "I set an administration password",
            "line": 52,
            "match": {
              "location": "features/step_definitions/common_steps.rb:578"
            },
            "result": {
              "status": "passed",
              "duration": 6945726036
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session in Indonesian (id)",
            "line": 52,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 25387949113
            }
          },
          {
            "keyword": "Then ",
            "name": "the keyboard layout is set to \"id\"",
            "line": 52,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1716"
            },
            "result": {
              "status": "passed",
              "duration": 70058015
            }
          },
          {
            "keyword": "And ",
            "name": "tpsd is localized to the selected locale",
            "line": 52,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1746"
            },
            "result": {
              "status": "passed",
              "duration": 55872879
            }
          },
          {
            "keyword": "Given ",
            "name": "the network is plugged",
            "line": 52,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 33611638
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 52,
            "match": {
              "location": "features/step_definitions/common_steps.rb:655"
            },
            "result": {
              "status": "passed",
              "duration": 11446068061
            }
          },
          {
            "keyword": "Then ",
            "name": "I successfully start the Unsafe Browser",
            "line": 52,
            "match": {
              "location": "features/step_definitions/browser.rb:110"
            },
            "result": {
              "status": "passed",
              "duration": 4708601007
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Unsafe Browser",
            "line": 52,
            "match": {
              "location": "features/step_definitions/browser.rb:122"
            },
            "result": {
              "status": "passed",
              "duration": 5139245337
            }
          },
          {
            "keyword": "Given ",
            "name": "Thunderbird is installed",
            "line": 52,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:289"
            },
            "result": {
              "status": "passed",
              "duration": 50838056906
            }
          },
          {
            "keyword": "When ",
            "name": "I enable the screen keyboard",
            "line": 52,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1734"
            },
            "result": {
              "status": "passed",
              "duration": 87601871
            }
          },
          {
            "keyword": "Then ",
            "name": "the screen keyboard works in Tor Browser",
            "line": 52,
            "match": {
              "location": "features/step_definitions/browser.rb:448"
            },
            "result": {
              "status": "passed",
              "duration": 7856059896
            }
          },
          {
            "keyword": "And ",
            "name": "DuckDuckGo is the default search engine",
            "line": 52,
            "match": {
              "location": "features/step_definitions/browser.rb:437"
            },
            "result": {
              "status": "passed",
              "duration": 4714038070
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Tor Browser",
            "line": 52,
            "match": {
              "location": "features/step_definitions/browser.rb:122"
            },
            "result": {
              "status": "passed",
              "duration": 5177902414
            }
          },
          {
            "keyword": "And ",
            "name": "the screen keyboard works in Thunderbird",
            "line": 52,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:211"
            },
            "result": {
              "status": "passed",
              "duration": 3314184383
            }
          },
          {
            "keyword": "And ",
            "name": "the layout of the screen keyboard is set to \"us\"",
            "line": 52,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1742"
            },
            "result": {
              "status": "passed",
              "duration": 302193538
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 825894572
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 57508
            }
          }
        ]
      },
      {
        "id": "localization;tails-is-localized-for-every-tier-1-language;;9",
        "keyword": "Scenario Outline",
        "name": "Tails is localized for every tier-1 language",
        "description": "",
        "line": 53,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@doc",
            "line": 20
          },
          {
            "name": "@slow",
            "line": 20
          },
          {
            "name": "@not_release_blocker",
            "line": 20
          }
        ],
        "comments": [
          {
            "value": "# This list has to be kept in sync' with our list of tier-1 languages:",
            "line": 39
          },
          {
            "value": "#   https://tails.net/contribute/how/translate/#tier-1-languages",
            "line": 40
          },
          {
            "value": "# Known issues, that this step effectively verifies are still present:",
            "line": 42
          },
          {
            "value": "#  - Not all localized layouts exist in the GNOME screen keyboard: #8444",
            "line": 43
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 19557
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 23681774
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and stopped at Tails Greeter's login screen",
            "line": 53,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6296695545
            }
          },
          {
            "keyword": "And ",
            "name": "I set an administration password",
            "line": 53,
            "match": {
              "location": "features/step_definitions/common_steps.rb:578"
            },
            "result": {
              "status": "passed",
              "duration": 6747276722
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session in Italian (it)",
            "line": 53,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 24800375688
            }
          },
          {
            "keyword": "Then ",
            "name": "the keyboard layout is set to \"it\"",
            "line": 53,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1716"
            },
            "result": {
              "status": "passed",
              "duration": 66051166
            }
          },
          {
            "keyword": "And ",
            "name": "tpsd is localized to the selected locale",
            "line": 53,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1746"
            },
            "result": {
              "status": "passed",
              "duration": 103558693
            }
          },
          {
            "keyword": "Given ",
            "name": "the network is plugged",
            "line": 53,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 24222813
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 53,
            "match": {
              "location": "features/step_definitions/common_steps.rb:655"
            },
            "result": {
              "status": "passed",
              "duration": 12113906491
            }
          },
          {
            "keyword": "Then ",
            "name": "I successfully start the Unsafe Browser",
            "line": 53,
            "match": {
              "location": "features/step_definitions/browser.rb:110"
            },
            "result": {
              "status": "passed",
              "duration": 4520275612
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Unsafe Browser",
            "line": 53,
            "match": {
              "location": "features/step_definitions/browser.rb:122"
            },
            "result": {
              "status": "passed",
              "duration": 5187958193
            }
          },
          {
            "keyword": "Given ",
            "name": "Thunderbird is installed",
            "line": 53,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:289"
            },
            "result": {
              "status": "passed",
              "duration": 50757114453
            }
          },
          {
            "keyword": "When ",
            "name": "I enable the screen keyboard",
            "line": 53,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1734"
            },
            "result": {
              "status": "passed",
              "duration": 78308051
            }
          },
          {
            "keyword": "Then ",
            "name": "the screen keyboard works in Tor Browser",
            "line": 53,
            "match": {
              "location": "features/step_definitions/browser.rb:448"
            },
            "result": {
              "status": "passed",
              "duration": 8501269064
            }
          },
          {
            "keyword": "And ",
            "name": "DuckDuckGo is the default search engine",
            "line": 53,
            "match": {
              "location": "features/step_definitions/browser.rb:437"
            },
            "result": {
              "status": "passed",
              "duration": 4704424330
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Tor Browser",
            "line": 53,
            "match": {
              "location": "features/step_definitions/browser.rb:122"
            },
            "result": {
              "status": "passed",
              "duration": 5158169189
            }
          },
          {
            "keyword": "And ",
            "name": "the screen keyboard works in Thunderbird",
            "line": 53,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:211"
            },
            "result": {
              "status": "passed",
              "duration": 3849868716
            }
          },
          {
            "keyword": "And ",
            "name": "the layout of the screen keyboard is set to \"us\"",
            "line": 53,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1742"
            },
            "result": {
              "status": "passed",
              "duration": 279822461
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 606357618
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 19516
            }
          }
        ]
      },
      {
        "id": "localization;tails-is-localized-for-every-tier-1-language;;10",
        "keyword": "Scenario Outline",
        "name": "Tails is localized for every tier-1 language",
        "description": "",
        "line": 54,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@doc",
            "line": 20
          },
          {
            "name": "@slow",
            "line": 20
          },
          {
            "name": "@not_release_blocker",
            "line": 20
          }
        ],
        "comments": [
          {
            "value": "# This list has to be kept in sync' with our list of tier-1 languages:",
            "line": 39
          },
          {
            "value": "#   https://tails.net/contribute/how/translate/#tier-1-languages",
            "line": 40
          },
          {
            "value": "# Known issues, that this step effectively verifies are still present:",
            "line": 42
          },
          {
            "value": "#  - Not all localized layouts exist in the GNOME screen keyboard: #8444",
            "line": 43
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 10088
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2106812
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and stopped at Tails Greeter's login screen",
            "line": 54,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6340322648
            }
          },
          {
            "keyword": "And ",
            "name": "I set an administration password",
            "line": 54,
            "match": {
              "location": "features/step_definitions/common_steps.rb:578"
            },
            "result": {
              "status": "passed",
              "duration": 6731319505
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session in Persian (fa)",
            "line": 54,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 24670268730
            }
          },
          {
            "keyword": "Then ",
            "name": "the keyboard layout is set to \"ir\"",
            "line": 54,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1716"
            },
            "result": {
              "status": "passed",
              "duration": 74914597
            }
          },
          {
            "keyword": "And ",
            "name": "tpsd is localized to the selected locale",
            "line": 54,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1746"
            },
            "result": {
              "status": "passed",
              "duration": 52135883
            }
          },
          {
            "keyword": "Given ",
            "name": "the network is plugged",
            "line": 54,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 39282435
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 54,
            "match": {
              "location": "features/step_definitions/common_steps.rb:655"
            },
            "result": {
              "status": "passed",
              "duration": 12405366097
            }
          },
          {
            "keyword": "Then ",
            "name": "I successfully start the Unsafe Browser",
            "line": 54,
            "match": {
              "location": "features/step_definitions/browser.rb:110"
            },
            "result": {
              "status": "passed",
              "duration": 4325377874
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Unsafe Browser",
            "line": 54,
            "match": {
              "location": "features/step_definitions/browser.rb:122"
            },
            "result": {
              "status": "passed",
              "duration": 5186893207
            }
          },
          {
            "keyword": "Given ",
            "name": "Thunderbird is installed",
            "line": 54,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:289"
            },
            "result": {
              "status": "passed",
              "duration": 50551265857
            }
          },
          {
            "keyword": "When ",
            "name": "I enable the screen keyboard",
            "line": 54,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1734"
            },
            "result": {
              "status": "passed",
              "duration": 72384066
            }
          },
          {
            "keyword": "Then ",
            "name": "the screen keyboard works in Tor Browser",
            "line": 54,
            "match": {
              "location": "features/step_definitions/browser.rb:448"
            },
            "result": {
              "status": "passed",
              "duration": 8211959835
            }
          },
          {
            "keyword": "And ",
            "name": "DuckDuckGo is the default search engine",
            "line": 54,
            "match": {
              "location": "features/step_definitions/browser.rb:437"
            },
            "result": {
              "status": "passed",
              "duration": 4875940876
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Tor Browser",
            "line": 54,
            "match": {
              "location": "features/step_definitions/browser.rb:122"
            },
            "result": {
              "status": "passed",
              "duration": 5167237774
            }
          },
          {
            "keyword": "And ",
            "name": "the screen keyboard works in Thunderbird",
            "line": 54,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:211"
            },
            "result": {
              "status": "passed",
              "duration": 3140738934
            }
          },
          {
            "keyword": "And ",
            "name": "the layout of the screen keyboard is set to \"ir\"",
            "line": 54,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1742"
            },
            "result": {
              "status": "passed",
              "duration": 282272957
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 636818183
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 20419
            }
          }
        ]
      },
      {
        "id": "localization;tails-is-localized-for-every-tier-1-language;;11",
        "keyword": "Scenario Outline",
        "name": "Tails is localized for every tier-1 language",
        "description": "",
        "line": 55,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@doc",
            "line": 20
          },
          {
            "name": "@slow",
            "line": 20
          },
          {
            "name": "@not_release_blocker",
            "line": 20
          }
        ],
        "comments": [
          {
            "value": "# This list has to be kept in sync' with our list of tier-1 languages:",
            "line": 39
          },
          {
            "value": "#   https://tails.net/contribute/how/translate/#tier-1-languages",
            "line": 40
          },
          {
            "value": "# Known issues, that this step effectively verifies are still present:",
            "line": 42
          },
          {
            "value": "#  - Not all localized layouts exist in the GNOME screen keyboard: #8444",
            "line": 43
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 10200
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2131117
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and stopped at Tails Greeter's login screen",
            "line": 55,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6318756983
            }
          },
          {
            "keyword": "And ",
            "name": "I set an administration password",
            "line": 55,
            "match": {
              "location": "features/step_definitions/common_steps.rb:578"
            },
            "result": {
              "status": "passed",
              "duration": 6753924122
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session in Portuguese (pt)",
            "line": 55,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 24305258840
            }
          },
          {
            "keyword": "Then ",
            "name": "the keyboard layout is set to \"pt\"",
            "line": 55,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1716"
            },
            "result": {
              "status": "passed",
              "duration": 82235925
            }
          },
          {
            "keyword": "And ",
            "name": "tpsd is localized to the selected locale",
            "line": 55,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1746"
            },
            "result": {
              "status": "passed",
              "duration": 77676627
            }
          },
          {
            "keyword": "Given ",
            "name": "the network is plugged",
            "line": 55,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 39159336
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 55,
            "match": {
              "location": "features/step_definitions/common_steps.rb:655"
            },
            "result": {
              "status": "passed",
              "duration": 10841207700
            }
          },
          {
            "keyword": "Then ",
            "name": "I successfully start the Unsafe Browser",
            "line": 55,
            "match": {
              "location": "features/step_definitions/browser.rb:110"
            },
            "result": {
              "status": "passed",
              "duration": 4966666233
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Unsafe Browser",
            "line": 55,
            "match": {
              "location": "features/step_definitions/browser.rb:122"
            },
            "result": {
              "status": "passed",
              "duration": 5173920213
            }
          },
          {
            "keyword": "Given ",
            "name": "Thunderbird is installed",
            "line": 55,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:289"
            },
            "result": {
              "status": "passed",
              "duration": 51666255428
            }
          },
          {
            "keyword": "When ",
            "name": "I enable the screen keyboard",
            "line": 55,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1734"
            },
            "result": {
              "status": "passed",
              "duration": 78860888
            }
          },
          {
            "keyword": "Then ",
            "name": "the screen keyboard works in Tor Browser",
            "line": 55,
            "match": {
              "location": "features/step_definitions/browser.rb:448"
            },
            "result": {
              "status": "passed",
              "duration": 7801662196
            }
          },
          {
            "keyword": "And ",
            "name": "DuckDuckGo is the default search engine",
            "line": 55,
            "match": {
              "location": "features/step_definitions/browser.rb:437"
            },
            "result": {
              "status": "passed",
              "duration": 4485683531
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Tor Browser",
            "line": 55,
            "match": {
              "location": "features/step_definitions/browser.rb:122"
            },
            "result": {
              "status": "passed",
              "duration": 5176937438
            }
          },
          {
            "keyword": "And ",
            "name": "the screen keyboard works in Thunderbird",
            "line": 55,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:211"
            },
            "result": {
              "status": "passed",
              "duration": 3305424957
            }
          },
          {
            "keyword": "And ",
            "name": "the layout of the screen keyboard is set to \"us\"",
            "line": 55,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1742"
            },
            "result": {
              "status": "passed",
              "duration": 309247053
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 937483565
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 23395
            }
          }
        ]
      },
      {
        "id": "localization;tails-is-localized-for-every-tier-1-language;;12",
        "keyword": "Scenario Outline",
        "name": "Tails is localized for every tier-1 language",
        "description": "",
        "line": 56,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@doc",
            "line": 20
          },
          {
            "name": "@slow",
            "line": 20
          },
          {
            "name": "@not_release_blocker",
            "line": 20
          }
        ],
        "comments": [
          {
            "value": "# This list has to be kept in sync' with our list of tier-1 languages:",
            "line": 39
          },
          {
            "value": "#   https://tails.net/contribute/how/translate/#tier-1-languages",
            "line": 40
          },
          {
            "value": "# Known issues, that this step effectively verifies are still present:",
            "line": 42
          },
          {
            "value": "#  - Not all localized layouts exist in the GNOME screen keyboard: #8444",
            "line": 43
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 12254
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2217319
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and stopped at Tails Greeter's login screen",
            "line": 56,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6327936636
            }
          },
          {
            "keyword": "And ",
            "name": "I set an administration password",
            "line": 56,
            "match": {
              "location": "features/step_definitions/common_steps.rb:578"
            },
            "result": {
              "status": "passed",
              "duration": 6979368792
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session in Russian (ru)",
            "line": 56,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 25556541120
            }
          },
          {
            "keyword": "Then ",
            "name": "the keyboard layout is set to \"ru\"",
            "line": 56,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1716"
            },
            "result": {
              "status": "passed",
              "duration": 129336950
            }
          },
          {
            "keyword": "And ",
            "name": "tpsd is localized to the selected locale",
            "line": 56,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1746"
            },
            "result": {
              "status": "passed",
              "duration": 63631813
            }
          },
          {
            "keyword": "Given ",
            "name": "the network is plugged",
            "line": 56,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 38558216
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 56,
            "match": {
              "location": "features/step_definitions/common_steps.rb:655"
            },
            "result": {
              "status": "passed",
              "duration": 11917036772
            }
          },
          {
            "keyword": "Then ",
            "name": "I successfully start the Unsafe Browser",
            "line": 56,
            "match": {
              "location": "features/step_definitions/browser.rb:110"
            },
            "result": {
              "status": "passed",
              "duration": 4543314299
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Unsafe Browser",
            "line": 56,
            "match": {
              "location": "features/step_definitions/browser.rb:122"
            },
            "result": {
              "status": "passed",
              "duration": 5193425450
            }
          },
          {
            "keyword": "Given ",
            "name": "Thunderbird is installed",
            "line": 56,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:289"
            },
            "result": {
              "status": "passed",
              "duration": 50595809385
            }
          },
          {
            "keyword": "When ",
            "name": "I enable the screen keyboard",
            "line": 56,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1734"
            },
            "result": {
              "status": "passed",
              "duration": 63561004
            }
          },
          {
            "keyword": "Then ",
            "name": "the screen keyboard works in Tor Browser",
            "line": 56,
            "match": {
              "location": "features/step_definitions/browser.rb:448"
            },
            "result": {
              "status": "passed",
              "duration": 7871756065
            }
          },
          {
            "keyword": "And ",
            "name": "DuckDuckGo is the default search engine",
            "line": 56,
            "match": {
              "location": "features/step_definitions/browser.rb:437"
            },
            "result": {
              "status": "passed",
              "duration": 4969849980
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Tor Browser",
            "line": 56,
            "match": {
              "location": "features/step_definitions/browser.rb:122"
            },
            "result": {
              "status": "passed",
              "duration": 5173318776
            }
          },
          {
            "keyword": "And ",
            "name": "the screen keyboard works in Thunderbird",
            "line": 56,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:211"
            },
            "result": {
              "status": "passed",
              "duration": 3424445332
            }
          },
          {
            "keyword": "And ",
            "name": "the layout of the screen keyboard is set to \"ru\"",
            "line": 56,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1742"
            },
            "result": {
              "status": "passed",
              "duration": 284241203
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 754786585
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 23003
            }
          }
        ]
      },
      {
        "id": "localization;tails-is-localized-for-every-tier-1-language;;13",
        "keyword": "Scenario Outline",
        "name": "Tails is localized for every tier-1 language",
        "description": "",
        "line": 57,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@doc",
            "line": 20
          },
          {
            "name": "@slow",
            "line": 20
          },
          {
            "name": "@not_release_blocker",
            "line": 20
          }
        ],
        "comments": [
          {
            "value": "# This list has to be kept in sync' with our list of tier-1 languages:",
            "line": 39
          },
          {
            "value": "#   https://tails.net/contribute/how/translate/#tier-1-languages",
            "line": 40
          },
          {
            "value": "# Known issues, that this step effectively verifies are still present:",
            "line": 42
          },
          {
            "value": "#  - Not all localized layouts exist in the GNOME screen keyboard: #8444",
            "line": 43
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 13775
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2250662
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and stopped at Tails Greeter's login screen",
            "line": 57,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6379828438
            }
          },
          {
            "keyword": "And ",
            "name": "I set an administration password",
            "line": 57,
            "match": {
              "location": "features/step_definitions/common_steps.rb:578"
            },
            "result": {
              "status": "passed",
              "duration": 6630541523
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session in Spanish (es)",
            "line": 57,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 24604702256
            }
          },
          {
            "keyword": "Then ",
            "name": "the keyboard layout is set to \"es\"",
            "line": 57,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1716"
            },
            "result": {
              "status": "passed",
              "duration": 68352687
            }
          },
          {
            "keyword": "And ",
            "name": "tpsd is localized to the selected locale",
            "line": 57,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1746"
            },
            "result": {
              "status": "passed",
              "duration": 74089606
            }
          },
          {
            "keyword": "Given ",
            "name": "the network is plugged",
            "line": 57,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 27947324
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 57,
            "match": {
              "location": "features/step_definitions/common_steps.rb:655"
            },
            "result": {
              "status": "passed",
              "duration": 12417715761
            }
          },
          {
            "keyword": "Then ",
            "name": "I successfully start the Unsafe Browser",
            "line": 57,
            "match": {
              "location": "features/step_definitions/browser.rb:110"
            },
            "result": {
              "status": "passed",
              "duration": 4290015985
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Unsafe Browser",
            "line": 57,
            "match": {
              "location": "features/step_definitions/browser.rb:122"
            },
            "result": {
              "status": "passed",
              "duration": 5137520058
            }
          },
          {
            "keyword": "Given ",
            "name": "Thunderbird is installed",
            "line": 57,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:289"
            },
            "result": {
              "status": "passed",
              "duration": 50416810740
            }
          },
          {
            "keyword": "When ",
            "name": "I enable the screen keyboard",
            "line": 57,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1734"
            },
            "result": {
              "status": "passed",
              "duration": 69983200
            }
          },
          {
            "keyword": "Then ",
            "name": "the screen keyboard works in Tor Browser",
            "line": 57,
            "match": {
              "location": "features/step_definitions/browser.rb:448"
            },
            "result": {
              "status": "passed",
              "duration": 7752562521
            }
          },
          {
            "keyword": "And ",
            "name": "DuckDuckGo is the default search engine",
            "line": 57,
            "match": {
              "location": "features/step_definitions/browser.rb:437"
            },
            "result": {
              "status": "passed",
              "duration": 4735325570
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Tor Browser",
            "line": 57,
            "match": {
              "location": "features/step_definitions/browser.rb:122"
            },
            "result": {
              "status": "passed",
              "duration": 5172788456
            }
          },
          {
            "keyword": "And ",
            "name": "the screen keyboard works in Thunderbird",
            "line": 57,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:211"
            },
            "result": {
              "status": "passed",
              "duration": 3211159911
            }
          },
          {
            "keyword": "And ",
            "name": "the layout of the screen keyboard is set to \"us\"",
            "line": 57,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1742"
            },
            "result": {
              "status": "passed",
              "duration": 283289678
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 1063652852
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 20226
            }
          }
        ]
      },
      {
        "id": "localization;tails-is-localized-for-every-tier-1-language;;14",
        "keyword": "Scenario Outline",
        "name": "Tails is localized for every tier-1 language",
        "description": "",
        "line": 58,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@doc",
            "line": 20
          },
          {
            "name": "@slow",
            "line": 20
          },
          {
            "name": "@not_release_blocker",
            "line": 20
          }
        ],
        "comments": [
          {
            "value": "# This list has to be kept in sync' with our list of tier-1 languages:",
            "line": 39
          },
          {
            "value": "#   https://tails.net/contribute/how/translate/#tier-1-languages",
            "line": 40
          },
          {
            "value": "# Known issues, that this step effectively verifies are still present:",
            "line": 42
          },
          {
            "value": "#  - Not all localized layouts exist in the GNOME screen keyboard: #8444",
            "line": 43
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 9689
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2345408
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and stopped at Tails Greeter's login screen",
            "line": 58,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6300094680
            }
          },
          {
            "keyword": "And ",
            "name": "I set an administration password",
            "line": 58,
            "match": {
              "location": "features/step_definitions/common_steps.rb:578"
            },
            "result": {
              "status": "passed",
              "duration": 6782637986
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session in Turkish (tr)",
            "line": 58,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 24816088864
            }
          },
          {
            "keyword": "Then ",
            "name": "the keyboard layout is set to \"tr\"",
            "line": 58,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1716"
            },
            "result": {
              "status": "passed",
              "duration": 98694718
            }
          },
          {
            "keyword": "And ",
            "name": "tpsd is localized to the selected locale",
            "line": 58,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1746"
            },
            "result": {
              "status": "passed",
              "duration": 66819033
            }
          },
          {
            "keyword": "Given ",
            "name": "the network is plugged",
            "line": 58,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 35788847
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 58,
            "match": {
              "location": "features/step_definitions/common_steps.rb:655"
            },
            "result": {
              "status": "passed",
              "duration": 11030878041
            }
          },
          {
            "keyword": "Then ",
            "name": "I successfully start the Unsafe Browser",
            "line": 58,
            "match": {
              "location": "features/step_definitions/browser.rb:110"
            },
            "result": {
              "status": "passed",
              "duration": 4818013716
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Unsafe Browser",
            "line": 58,
            "match": {
              "location": "features/step_definitions/browser.rb:122"
            },
            "result": {
              "status": "passed",
              "duration": 5168178444
            }
          },
          {
            "keyword": "Given ",
            "name": "Thunderbird is installed",
            "line": 58,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:289"
            },
            "result": {
              "status": "passed",
              "duration": 50720611218
            }
          },
          {
            "keyword": "When ",
            "name": "I enable the screen keyboard",
            "line": 58,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1734"
            },
            "result": {
              "status": "passed",
              "duration": 68582686
            }
          },
          {
            "keyword": "Then ",
            "name": "the screen keyboard works in Tor Browser",
            "line": 58,
            "match": {
              "location": "features/step_definitions/browser.rb:448"
            },
            "result": {
              "status": "passed",
              "duration": 7678982942
            }
          },
          {
            "keyword": "And ",
            "name": "DuckDuckGo is the default search engine",
            "line": 58,
            "match": {
              "location": "features/step_definitions/browser.rb:437"
            },
            "result": {
              "status": "passed",
              "duration": 4947107503
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Tor Browser",
            "line": 58,
            "match": {
              "location": "features/step_definitions/browser.rb:122"
            },
            "result": {
              "status": "passed",
              "duration": 5162895478
            }
          },
          {
            "keyword": "And ",
            "name": "the screen keyboard works in Thunderbird",
            "line": 58,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:211"
            },
            "result": {
              "status": "passed",
              "duration": 3625894915
            }
          },
          {
            "keyword": "And ",
            "name": "the layout of the screen keyboard is set to \"us\"",
            "line": 58,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1742"
            },
            "result": {
              "status": "passed",
              "duration": 279704013
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 615470355
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 21240
            }
          }
        ]
      },
      {
        "id": "localization;tails-doesn't-store-localization-preferences-in-cleartext-unless-it's-asked-to",
        "keyword": "Scenario",
        "name": "Tails doesn't store localization preferences in cleartext unless it's asked to",
        "description": "",
        "line": 60,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 10921
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2485960
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive without a persistent partition and stopped at Tails Greeter's login screen",
            "line": 61,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 21630719277
            }
          },
          {
            "keyword": "When ",
            "name": "I set the language to Italian (it)",
            "line": 62,
            "match": {
              "location": "features/step_definitions/common_steps.rb:484"
            },
            "result": {
              "status": "passed",
              "duration": 4558920970
            }
          },
          {
            "keyword": "Then ",
            "name": "the language and keyboard have not been saved in cleartext storage",
            "line": 63,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1882"
            },
            "result": {
              "status": "passed",
              "duration": 2114186722
            }
          },
          {
            "keyword": "When ",
            "name": "I shutdown Tails and wait for the computer to power off",
            "line": 64,
            "match": {
              "location": "features/step_definitions/common_steps.rb:908"
            },
            "result": {
              "status": "passed",
              "duration": 3907387460
            }
          },
          {
            "keyword": "And ",
            "name": "I start Tails from USB drive \"__internal\" with network unplugged",
            "line": 65,
            "match": {
              "location": "features/step_definitions/common_steps.rb:235"
            },
            "result": {
              "status": "passed",
              "duration": 36193613595
            }
          },
          {
            "keyword": "Then ",
            "name": "the Welcome Screen's language is set to English",
            "line": 66,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1911"
            },
            "result": {
              "status": "passed",
              "duration": 180171290
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 729324922
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 20844605
            }
          }
        ]
      },
      {
        "id": "localization;tails-stores-localization-preferences-when-it's-asked-to",
        "keyword": "Scenario",
        "name": "Tails stores localization preferences when it's asked to",
        "description": "",
        "line": 68,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 15058
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 1554963
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive without a persistent partition and stopped at Tails Greeter's login screen",
            "line": 69,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 7757461975
            }
          },
          {
            "keyword": "When ",
            "name": "I set the language to Italian (it)",
            "line": 70,
            "match": {
              "location": "features/step_definitions/common_steps.rb:484"
            },
            "result": {
              "status": "passed",
              "duration": 4468253910
            }
          },
          {
            "keyword": "And ",
            "name": "I save the language and keyboard options in cleartext storage",
            "line": 71,
            "match": {
              "location": "features/step_definitions/common_steps.rb:503"
            },
            "result": {
              "status": "passed",
              "duration": 2442168035
            }
          },
          {
            "keyword": "Then ",
            "name": "the \"it\" language and keyboard have been saved in cleartext storage",
            "line": 72,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1890"
            },
            "result": {
              "status": "passed",
              "duration": 1156078373
            }
          },
          {
            "keyword": "When ",
            "name": "I set the language to French (fr)",
            "line": 73,
            "match": {
              "location": "features/step_definitions/common_steps.rb:484"
            },
            "result": {
              "status": "passed",
              "duration": 4473034533
            }
          },
          {
            "keyword": "Then ",
            "name": "the \"fr\" language and keyboard have been saved in cleartext storage",
            "line": 74,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1890"
            },
            "result": {
              "status": "passed",
              "duration": 86583053
            }
          },
          {
            "keyword": "And ",
            "name": "I shutdown Tails and wait for the computer to power off",
            "line": 75,
            "match": {
              "location": "features/step_definitions/common_steps.rb:908"
            },
            "result": {
              "status": "passed",
              "duration": 3964714222
            }
          },
          {
            "keyword": "And ",
            "name": "I start Tails from USB drive \"__internal\" with network unplugged",
            "line": 76,
            "match": {
              "location": "features/step_definitions/common_steps.rb:235"
            },
            "result": {
              "status": "passed",
              "duration": 35943975346
            }
          },
          {
            "keyword": "Then ",
            "name": "the \"fr\" language and keyboard have been saved in cleartext storage",
            "line": 77,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1890"
            },
            "result": {
              "status": "passed",
              "duration": 259733137
            }
          },
          {
            "keyword": "And ",
            "name": "the Welcome Screen's language is set to French",
            "line": 78,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1911"
            },
            "result": {
              "status": "passed",
              "duration": 781920054
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session",
            "line": 79,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 6269018211
            }
          },
          {
            "keyword": "Then ",
            "name": "the language is set to French",
            "line": 80,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1928"
            },
            "result": {
              "status": "passed",
              "duration": 33757105
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 550762262
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 31823747
            }
          }
        ]
      },
      {
        "id": "localization;cleartext-localization-preferences-have-priority-over-persistent-storage",
        "keyword": "Scenario",
        "name": "Cleartext localization preferences have priority over Persistent Storage",
        "description": "",
        "line": 82,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 15389
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 1425771
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive without a persistent partition and logged in",
            "line": 83,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 8464962000
            }
          },
          {
            "keyword": "Then ",
            "name": "Tails is running from USB drive \"__internal\"",
            "line": 85,
            "comments": [
              {
                "value": "# The first boot simulates a legacy Tails, where locale is only saved in Persistent Storage",
                "line": 84
              }
            ],
            "match": {
              "location": "features/step_definitions/usb.rb:942"
            },
            "result": {
              "status": "passed",
              "duration": 267883457
            }
          },
          {
            "keyword": "And ",
            "name": "I create a persistent partition",
            "line": 86,
            "match": {
              "location": "features/step_definitions/usb.rb:349"
            },
            "result": {
              "status": "passed",
              "duration": 30183918978
            }
          },
          {
            "keyword": "And ",
            "name": "I manually store legacy localization settings in Persistent Storage",
            "line": 87,
            "match": {
              "location": "features/step_definitions/usb.rb:1610"
            },
            "result": {
              "status": "passed",
              "duration": 187383091
            }
          },
          {
            "keyword": "When ",
            "name": "I shutdown Tails and wait for the computer to power off",
            "line": 88,
            "match": {
              "location": "features/step_definitions/common_steps.rb:908"
            },
            "result": {
              "status": "passed",
              "duration": 5330345912
            }
          },
          {
            "keyword": "And ",
            "name": "I start Tails from USB drive \"__internal\" with network unplugged",
            "line": 90,
            "comments": [
              {
                "value": "# The second boot verifies that the legacy setting still works",
                "line": 89
              }
            ],
            "match": {
              "location": "features/step_definitions/common_steps.rb:235"
            },
            "result": {
              "status": "passed",
              "duration": 32338996152
            }
          },
          {
            "keyword": "Then ",
            "name": "the Welcome Screen's language is set to English",
            "line": 91,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1911"
            },
            "result": {
              "status": "passed",
              "duration": 369737693
            }
          },
          {
            "keyword": "And ",
            "name": "the Welcome Screen's formats is set to United States",
            "line": 92,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1921"
            },
            "result": {
              "status": "passed",
              "duration": 100216989
            }
          },
          {
            "keyword": "When ",
            "name": "I enable persistence",
            "line": 93,
            "match": {
              "location": "features/step_definitions/usb.rb:728"
            },
            "result": {
              "status": "passed",
              "duration": 11830756460
            }
          },
          {
            "keyword": "Then ",
            "name": "the Welcome Screen's language is set to German",
            "line": 94,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1911"
            },
            "result": {
              "status": "passed",
              "duration": 284607192
            }
          },
          {
            "keyword": "And ",
            "name": "the Welcome Screen's formats is set to France",
            "line": 95,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1921"
            },
            "result": {
              "status": "passed",
              "duration": 103314409
            }
          },
          {
            "keyword": "When ",
            "name": "I set the language to Italian (it)",
            "line": 96,
            "match": {
              "location": "features/step_definitions/common_steps.rb:484"
            },
            "result": {
              "status": "passed",
              "duration": 4412219646
            }
          },
          {
            "keyword": "Then ",
            "name": "the language and keyboard have not been saved in cleartext storage",
            "line": 97,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1882"
            },
            "result": {
              "status": "passed",
              "duration": 2070288839
            }
          },
          {
            "keyword": "When ",
            "name": "I save the language and keyboard options in cleartext storage",
            "line": 98,
            "match": {
              "location": "features/step_definitions/common_steps.rb:503"
            },
            "result": {
              "status": "passed",
              "duration": 2266235097
            }
          },
          {
            "keyword": "Then ",
            "name": "the \"it\" language and keyboard have been saved in cleartext storage",
            "line": 99,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1890"
            },
            "result": {
              "status": "passed",
              "duration": 94584760
            }
          },
          {
            "keyword": "And ",
            "name": "I shutdown Tails and wait for the computer to power off",
            "line": 100,
            "match": {
              "location": "features/step_definitions/common_steps.rb:908"
            },
            "result": {
              "status": "passed",
              "duration": 2680659287
            }
          },
          {
            "keyword": "And ",
            "name": "I start Tails from USB drive \"__internal\" with network unplugged",
            "line": 102,
            "comments": [
              {
                "value": "# The third boot verifies that cleartext has priority",
                "line": 101
              }
            ],
            "match": {
              "location": "features/step_definitions/common_steps.rb:235"
            },
            "result": {
              "status": "passed",
              "duration": 32967317106
            }
          },
          {
            "keyword": "Then ",
            "name": "the Welcome Screen's language is set to Italian",
            "line": 103,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1911"
            },
            "result": {
              "status": "passed",
              "duration": 767413680
            }
          },
          {
            "keyword": "And ",
            "name": "the Welcome Screen's formats is set to Italy",
            "line": 104,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1921"
            },
            "result": {
              "status": "passed",
              "duration": 248399506
            }
          },
          {
            "keyword": "When ",
            "name": "I enable persistence",
            "line": 105,
            "match": {
              "location": "features/step_definitions/usb.rb:728"
            },
            "result": {
              "status": "passed",
              "duration": 12701452158
            }
          },
          {
            "keyword": "Then ",
            "name": "the Welcome Screen's formats is set to France",
            "line": 107,
            "comments": [
              {
                "value": "# Only formats are loaded from persistence",
                "line": 106
              }
            ],
            "match": {
              "location": "features/step_definitions/common_steps.rb:1921"
            },
            "result": {
              "status": "passed",
              "duration": 151871784
            }
          },
          {
            "keyword": "And ",
            "name": "the Welcome Screen's language is set to Italian",
            "line": 108,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1911"
            },
            "result": {
              "status": "passed",
              "duration": 554044804
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 851493883
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 16673231
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/mac_spoofing.feature",
    "id": "spoofing-mac-addresses",
    "keyword": "Feature",
    "name": "Spoofing MAC addresses",
    "description": "  In order to not reveal information about the physical location\n  As a Tails user\n  I want to be able to control whether my network devices MAC addresses should be spoofed\n  And I want this feature to fail safe and notify me in case of errors",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "spoofing-mac-addresses;mac-address-spoofing-is-disabled",
        "keyword": "Scenario",
        "name": "MAC address spoofing is disabled",
        "description": "",
        "line": 8,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 14245
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 1517853
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and stopped at Tails Greeter's login screen",
            "line": 9,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6333989975
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:188"
            },
            "result": {
              "status": "passed",
              "duration": 4125961
            }
          },
          {
            "keyword": "When ",
            "name": "I disable MAC spoofing in Tails Greeter",
            "line": 11,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:10"
            },
            "result": {
              "status": "passed",
              "duration": 7986106720
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session",
            "line": 12,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 9764863436
            }
          },
          {
            "keyword": "And ",
            "name": "the network is plugged",
            "line": 13,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 39483886
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 14,
            "match": {
              "location": "features/step_definitions/common_steps.rb:655"
            },
            "result": {
              "status": "passed",
              "duration": 8182953377
            }
          },
          {
            "keyword": "Then ",
            "name": "1 network interface is enabled",
            "line": 15,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:83"
            },
            "result": {
              "status": "passed",
              "duration": 53653070
            }
          },
          {
            "keyword": "And ",
            "name": "the 1st network device has its real MAC address configured",
            "line": 16,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:18"
            },
            "result": {
              "status": "passed",
              "duration": 59544559
            }
          },
          {
            "keyword": "When ",
            "name": "I hotplug a network device and wait for it to be initialized",
            "line": 17,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:106"
            },
            "result": {
              "status": "passed",
              "duration": 166416821
            }
          },
          {
            "keyword": "Then ",
            "name": "2 network interfaces are enabled",
            "line": 18,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:83"
            },
            "result": {
              "status": "passed",
              "duration": 79728881
            }
          },
          {
            "keyword": "And ",
            "name": "the 2nd network device has its real MAC address configured",
            "line": 19,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:18"
            },
            "result": {
              "status": "passed",
              "duration": 52307770
            }
          },
          {
            "keyword": "And ",
            "name": "some network device leaked the real MAC address",
            "line": 20,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:51"
            },
            "result": {
              "status": "passed",
              "duration": 106702717
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 850696995
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 51207246
            }
          }
        ]
      },
      {
        "id": "spoofing-mac-addresses;mac-address-spoofing-is-successful",
        "keyword": "Scenario",
        "name": "MAC address spoofing is successful",
        "description": "",
        "line": 22,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 14396
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2291697
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and stopped at Tails Greeter's login screen",
            "line": 23,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6381573938
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 24,
            "match": {
              "location": "features/step_definitions/common_steps.rb:188"
            },
            "result": {
              "status": "passed",
              "duration": 2936782
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session",
            "line": 25,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 9302748527
            }
          },
          {
            "keyword": "And ",
            "name": "the network is plugged",
            "line": 26,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 90532536
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 27,
            "match": {
              "location": "features/step_definitions/common_steps.rb:655"
            },
            "result": {
              "status": "passed",
              "duration": 10206848869
            }
          },
          {
            "keyword": "Then ",
            "name": "1 network interface is enabled",
            "line": 28,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:83"
            },
            "result": {
              "status": "passed",
              "duration": 55480722
            }
          },
          {
            "keyword": "And ",
            "name": "the 1st network device has a spoofed MAC address configured",
            "line": 29,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:18"
            },
            "result": {
              "status": "passed",
              "duration": 44261011
            }
          },
          {
            "keyword": "When ",
            "name": "I hotplug a network device and wait for it to be initialized",
            "line": 30,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:106"
            },
            "result": {
              "status": "passed",
              "duration": 204434279
            }
          },
          {
            "keyword": "Then ",
            "name": "2 network interfaces are enabled",
            "line": 31,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:83"
            },
            "result": {
              "status": "passed",
              "duration": 53904009
            }
          },
          {
            "keyword": "And ",
            "name": "the 2nd network device has a spoofed MAC address configured",
            "line": 32,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:18"
            },
            "result": {
              "status": "passed",
              "duration": 35891040
            }
          },
          {
            "keyword": "And ",
            "name": "no network device leaked the real MAC address",
            "line": 33,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:42"
            },
            "result": {
              "status": "passed",
              "duration": 81508283
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 681609680
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 44874577
            }
          }
        ]
      },
      {
        "id": "spoofing-mac-addresses;mac-address-spoofing-fails-and-macchanger-returns-false",
        "keyword": "Scenario",
        "name": "MAC address spoofing fails and macchanger returns false",
        "description": "",
        "line": 35,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 12212
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2150462
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and stopped at Tails Greeter's login screen",
            "line": 36,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6199305123
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 37,
            "match": {
              "location": "features/step_definitions/common_steps.rb:188"
            },
            "result": {
              "status": "passed",
              "duration": 2935659
            }
          },
          {
            "keyword": "And ",
            "name": "the network is plugged",
            "line": 38,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 29409642
            }
          },
          {
            "keyword": "And ",
            "name": "macchanger will fail by not spoofing and always returns false",
            "line": 39,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:57"
            },
            "result": {
              "status": "passed",
              "duration": 71837762
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session",
            "line": 40,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 9832340903
            }
          },
          {
            "keyword": "Then ",
            "name": "no network interfaces are enabled",
            "line": 41,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:83"
            },
            "result": {
              "status": "passed",
              "duration": 50923357
            }
          },
          {
            "keyword": "And ",
            "name": "no network device leaked the real MAC address",
            "line": 42,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:42"
            },
            "result": {
              "status": "passed",
              "duration": 74197848
            }
          },
          {
            "keyword": "And ",
            "name": "I see the \"Wired Network Disabled\" notification after at most 60 seconds",
            "line": 43,
            "match": {
              "location": "features/step_definitions/common_steps.rb:631"
            },
            "result": {
              "status": "passed",
              "duration": 1441114549
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 924376847
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 66469734
            }
          }
        ]
      },
      {
        "id": "spoofing-mac-addresses;mac-address-spoofing-fails-and-macchanger-returns-true",
        "keyword": "Scenario",
        "name": "MAC address spoofing fails and macchanger returns true",
        "description": "",
        "line": 45,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 12573
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2367840
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and stopped at Tails Greeter's login screen",
            "line": 46,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6240864320
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 47,
            "match": {
              "location": "features/step_definitions/common_steps.rb:188"
            },
            "result": {
              "status": "passed",
              "duration": 3120073
            }
          },
          {
            "keyword": "And ",
            "name": "the network is plugged",
            "line": 48,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 35052375
            }
          },
          {
            "keyword": "And ",
            "name": "macchanger will fail by not spoofing and always returns true",
            "line": 49,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:57"
            },
            "result": {
              "status": "passed",
              "duration": 103476631
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session",
            "line": 50,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 10299647173
            }
          },
          {
            "keyword": "Then ",
            "name": "no network interfaces are enabled",
            "line": 51,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:83"
            },
            "result": {
              "status": "passed",
              "duration": 47226550
            }
          },
          {
            "keyword": "And ",
            "name": "no network device leaked the real MAC address",
            "line": 52,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:42"
            },
            "result": {
              "status": "passed",
              "duration": 73248720
            }
          },
          {
            "keyword": "And ",
            "name": "I see the \"Wired Network Disabled\" notification after at most 60 seconds",
            "line": 53,
            "match": {
              "location": "features/step_definitions/common_steps.rb:631"
            },
            "result": {
              "status": "passed",
              "duration": 1635646686
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 691841576
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 29607524
            }
          }
        ]
      },
      {
        "id": "spoofing-mac-addresses;mac-address-spoofing-fails-and-the-module-is-not-removed",
        "keyword": "Scenario",
        "name": "MAC address spoofing fails and the module is not removed",
        "description": "",
        "line": 55,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 11241
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2263625
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and stopped at Tails Greeter's login screen",
            "line": 56,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6234848065
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 57,
            "match": {
              "location": "features/step_definitions/common_steps.rb:188"
            },
            "result": {
              "status": "passed",
              "duration": 4302921
            }
          },
          {
            "keyword": "And ",
            "name": "the network is plugged",
            "line": 58,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 37866628
            }
          },
          {
            "keyword": "And ",
            "name": "macchanger will fail by not spoofing and always returns true",
            "line": 59,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:57"
            },
            "result": {
              "status": "passed",
              "duration": 68041411
            }
          },
          {
            "keyword": "And ",
            "name": "no network interface modules can be unloaded",
            "line": 60,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:62"
            },
            "result": {
              "status": "passed",
              "duration": 143403445
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session",
            "line": 61,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 11624544641
            }
          },
          {
            "keyword": "Then ",
            "name": "1 network interface is enabled",
            "line": 62,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:83"
            },
            "result": {
              "status": "passed",
              "duration": 40102763
            }
          },
          {
            "keyword": "But ",
            "name": "the MAC spoofing panic mode disabled networking",
            "line": 63,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:90"
            },
            "result": {
              "status": "passed",
              "duration": 237681637
            }
          },
          {
            "keyword": "And ",
            "name": "no network device leaked the real MAC address",
            "line": 64,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:42"
            },
            "result": {
              "status": "passed",
              "duration": 75862991
            }
          },
          {
            "keyword": "And ",
            "name": "I see the \"All Networking Disabled\" notification after at most 60 seconds",
            "line": 65,
            "match": {
              "location": "features/step_definitions/common_steps.rb:631"
            },
            "result": {
              "status": "passed",
              "duration": 1595682792
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 604486145
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 55345334
            }
          }
        ]
      },
      {
        "id": "spoofing-mac-addresses;the-mac-address-is-not-leaked-when-booting-tails",
        "keyword": "Scenario",
        "name": "The MAC address is not leaked when booting Tails",
        "description": "",
        "line": 67,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 10028
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2258767
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 68,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 78217795
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 69,
            "match": {
              "location": "features/step_definitions/common_steps.rb:188"
            },
            "result": {
              "status": "passed",
              "duration": 1778510
            }
          },
          {
            "keyword": "When ",
            "name": "I start the computer",
            "line": 70,
            "match": {
              "location": "features/step_definitions/common_steps.rb:205"
            },
            "result": {
              "status": "passed",
              "duration": 617662448
            }
          },
          {
            "keyword": "Then ",
            "name": "the computer boots Tails",
            "line": 71,
            "match": {
              "location": "features/step_definitions/common_steps.rb:405"
            },
            "result": {
              "status": "passed",
              "duration": 29307149990
            }
          },
          {
            "keyword": "And ",
            "name": "no network interfaces are enabled",
            "line": 72,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:83"
            },
            "result": {
              "status": "passed",
              "duration": 53513846
            }
          },
          {
            "keyword": "And ",
            "name": "no network device leaked the real MAC address",
            "line": 73,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:42"
            },
            "result": {
              "status": "passed",
              "duration": 74848297
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 528155876
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 74254909
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/mat.feature",
    "id": "metadata-anonymization-toolkit",
    "keyword": "Feature",
    "name": "Metadata Anonymization Toolkit",
    "description": "  As a Tails user\n  I want to be able to remove leaky metadata from documents and media files",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "metadata-anonymization-toolkit;mat-can-clean-a-png-file",
        "keyword": "Scenario",
        "name": "MAT can clean a PNG file",
        "description": "",
        "line": 7,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 6
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 13445
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 1397428
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 8,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 77672128
            }
          },
          {
            "keyword": "And ",
            "name": "I start Tails from DVD with network unplugged and I login",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:214"
            },
            "result": {
              "status": "passed",
              "duration": 43961688014
            }
          },
          {
            "keyword": "And ",
            "name": "I plug and mount a USB drive containing a sample PNG",
            "line": 10,
            "match": {
              "location": "features/step_definitions/checks.rb:258"
            },
            "result": {
              "status": "passed",
              "duration": 8099918108
            }
          },
          {
            "keyword": "Then ",
            "name": "MAT can clean some sample PNG file",
            "line": 11,
            "match": {
              "location": "features/step_definitions/checks.rb:267"
            },
            "result": {
              "status": "passed",
              "duration": 722759070
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 756651003
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 5632703
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/networking.feature",
    "id": "networking",
    "keyword": "Feature",
    "name": "Networking",
    "description": "",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "networking;no-initial-network",
        "keyword": "Scenario",
        "name": "No initial network",
        "description": "",
        "line": 4,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 11801
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 1503436
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 5,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 18849225990
            }
          },
          {
            "keyword": "And ",
            "name": "I wait between 30 and 60 seconds",
            "line": 6,
            "output": [
              "Slept for 53 seconds"
            ],
            "match": {
              "location": "features/step_definitions/common_steps.rb:1410"
            },
            "result": {
              "status": "passed",
              "duration": 53000152779
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Status icon tells me that Tor is not usable",
            "line": 7,
            "match": {
              "location": "features/step_definitions/checks.rb:333"
            },
            "result": {
              "status": "passed",
              "duration": 236452235
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 8,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 29881896
            }
          },
          {
            "keyword": "Then ",
            "name": "I successfully configure Tor",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:680"
            },
            "result": {
              "status": "passed",
              "duration": 9077434475
            }
          },
          {
            "keyword": "And ",
            "name": "the Tor Status icon tells me that Tor is usable",
            "line": 10,
            "match": {
              "location": "features/step_definitions/checks.rb:333"
            },
            "result": {
              "status": "passed",
              "duration": 266888915
            }
          },
          {
            "keyword": "And ",
            "name": "all notifications have disappeared",
            "line": 11,
            "match": {
              "location": "features/step_definitions/common_steps.rb:767"
            },
            "result": {
              "status": "passed",
              "duration": 7854761647
            }
          },
          {
            "keyword": "And ",
            "name": "the time has synced",
            "line": 12,
            "match": {
              "location": "features/step_definitions/common_steps.rb:757"
            },
            "result": {
              "status": "passed",
              "duration": 38338682
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 857891450
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 22593
            }
          }
        ]
      },
      {
        "id": "networking;the-tails-greeter-\"disable-all-networking\"-option-disables-networking-within-tails",
        "keyword": "Scenario",
        "name": "The Tails Greeter \"disable all networking\" option disables networking within Tails",
        "description": "",
        "line": 15,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 14
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 11622
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2296757
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and stopped at Tails Greeter's login screen",
            "line": 16,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6457787712
            }
          },
          {
            "keyword": "And ",
            "name": "I disable networking in Tails Greeter",
            "line": 17,
            "match": {
              "location": "features/step_definitions/common_steps.rb:570"
            },
            "result": {
              "status": "passed",
              "duration": 8003233026
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session",
            "line": 18,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 10599535967
            }
          },
          {
            "keyword": "Then ",
            "name": "no network interfaces are enabled",
            "line": 19,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:83"
            },
            "result": {
              "status": "passed",
              "duration": 43376114
            }
          },
          {
            "keyword": "When ",
            "name": "I hotplug a network device",
            "line": 20,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:106"
            },
            "result": {
              "status": "passed",
              "duration": 58631910
            }
          },
          {
            "keyword": "And ",
            "name": "I wait 10 seconds",
            "line": 21,
            "output": [
              "Slept for 10 seconds"
            ],
            "match": {
              "location": "features/step_definitions/common_steps.rb:1410"
            },
            "result": {
              "status": "passed",
              "duration": 10000471836
            }
          },
          {
            "keyword": "Then ",
            "name": "no network interfaces are enabled",
            "line": 22,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:83"
            },
            "result": {
              "status": "passed",
              "duration": 49127640
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 1599613864
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 62788
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/onioncircuits.feature",
    "id": "onion-circuits",
    "keyword": "Feature",
    "name": "Onion Circuits",
    "description": "",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "onion-circuits;onion-circuits-shows-some-circuits",
        "keyword": "Scenario",
        "name": "Onion Circuits shows some circuits",
        "description": "",
        "line": 4,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 12573
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2657249
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 5,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 10505882707
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Onion Circuits\" via GNOME Activities Overview",
            "line": 6,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1205"
            },
            "result": {
              "status": "passed",
              "duration": 8725362786
            }
          },
          {
            "keyword": "Then ",
            "name": "Onion Circuits starts",
            "line": 7,
            "match": {
              "location": "features/step_definitions/onioncircuits.rb:5"
            },
            "result": {
              "status": "passed",
              "duration": 610005210
            }
          },
          {
            "keyword": "And ",
            "name": "Onion Circuits shows some circuits",
            "line": 8,
            "match": {
              "location": "features/step_definitions/onioncircuits.rb:9"
            },
            "result": {
              "status": "passed",
              "duration": 208577238
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 624813559
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 22702
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/persistence.feature",
    "id": "tails-persistence",
    "keyword": "Feature",
    "name": "Tails persistence",
    "description": "  As a Tails user\n  I want to use a Persistent Storage",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "tails-persistence;tails-persistent-storage-behave-tests",
        "keyword": "Scenario",
        "name": "Tails Persistent Storage behave tests",
        "description": "",
        "line": 6,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 12884
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2218781
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in with an administration password and the network is connected",
            "line": 7,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 90319214979
            }
          },
          {
            "keyword": "And ",
            "name": "I update the APT lists using apt",
            "line": 8,
            "match": {
              "location": "features/step_definitions/apt.rb:54"
            },
            "result": {
              "status": "passed",
              "duration": 35197531287
            }
          },
          {
            "keyword": "And ",
            "name": "I install \"python3-behave\" using apt",
            "line": 9,
            "match": {
              "location": "features/step_definitions/apt.rb:76"
            },
            "result": {
              "status": "passed",
              "duration": 3501634835
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tails Persistent Storage behave tests pass",
            "line": 10,
            "match": {
              "location": "features/step_definitions/usb.rb:1706"
            },
            "result": {
              "status": "passed",
              "duration": 796434551
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 909509173
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 20549
            }
          }
        ]
      },
      {
        "id": "tails-persistence;booting-tails-from-a-usb-drive-with-a-disabled-persistent-partition",
        "keyword": "Scenario",
        "name": "Booting Tails from a USB drive with a disabled persistent partition",
        "description": "",
        "line": 12,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 9799
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2363210
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition and stopped at Tails Greeter's login screen",
            "line": 13,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 8344863791
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session without activating the Persistent Storage",
            "line": 14,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 12224411685
            }
          },
          {
            "keyword": "Then ",
            "name": "Tails is running from USB drive \"__internal\"",
            "line": 15,
            "match": {
              "location": "features/step_definitions/usb.rb:942"
            },
            "result": {
              "status": "passed",
              "duration": 190459798
            }
          },
          {
            "keyword": "And ",
            "name": "persistence is disabled",
            "line": 16,
            "match": {
              "location": "features/step_definitions/usb.rb:854"
            },
            "result": {
              "status": "passed",
              "duration": 78489697
            }
          },
          {
            "keyword": "But ",
            "name": "a Tails persistence partition exists on USB drive \"__internal\"",
            "line": 17,
            "match": {
              "location": "features/step_definitions/usb.rb:655"
            },
            "result": {
              "status": "passed",
              "duration": 5488641940
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 852267649
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 23033
            }
          }
        ]
      },
      {
        "id": "tails-persistence;creating-a-persistent-storage",
        "keyword": "Scenario",
        "name": "Creating a Persistent Storage",
        "description": "",
        "line": 19,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 10580
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2358742
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive without a persistent partition and logged in",
            "line": 20,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 8582267129
            }
          },
          {
            "keyword": "Then ",
            "name": "Tails is running from USB drive \"__internal\"",
            "line": 21,
            "match": {
              "location": "features/step_definitions/usb.rb:942"
            },
            "result": {
              "status": "passed",
              "duration": 273190820
            }
          },
          {
            "keyword": "When ",
            "name": "I create a file in the Persistent directory",
            "line": 22,
            "match": {
              "location": "features/step_definitions/usb.rb:1719"
            },
            "result": {
              "status": "passed",
              "duration": 124764281
            }
          },
          {
            "keyword": "And ",
            "name": "I create a persistent partition with the default settings",
            "line": 23,
            "match": {
              "location": "features/step_definitions/usb.rb:349"
            },
            "result": {
              "status": "passed",
              "duration": 17340489990
            }
          },
          {
            "keyword": "Then ",
            "name": "the file I created was copied to the Persistent Storage",
            "line": 24,
            "match": {
              "location": "features/step_definitions/usb.rb:1726"
            },
            "result": {
              "status": "passed",
              "duration": 50592195
            }
          },
          {
            "keyword": "When ",
            "name": "I shutdown Tails and wait for the computer to power off",
            "line": 25,
            "match": {
              "location": "features/step_definitions/common_steps.rb:908"
            },
            "result": {
              "status": "passed",
              "duration": 5197423675
            }
          },
          {
            "keyword": "And ",
            "name": "I start Tails from USB drive \"__internal\" with network unplugged and I login with persistence enabled",
            "line": 26,
            "match": {
              "location": "features/step_definitions/common_steps.rb:235"
            },
            "result": {
              "status": "passed",
              "duration": 60108849332
            }
          },
          {
            "keyword": "Then ",
            "name": "persistence for \"Persistent\" is active",
            "line": 27,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1068"
            },
            "result": {
              "status": "passed",
              "duration": 162994580
            }
          },
          {
            "keyword": "And ",
            "name": "the file I created in the Persistent directory exists",
            "line": 28,
            "match": {
              "location": "features/step_definitions/usb.rb:1737"
            },
            "result": {
              "status": "passed",
              "duration": 54722575
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 842165006
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 5533800
            }
          }
        ]
      },
      {
        "id": "tails-persistence;creating-a-persistent-storage-when-system-is-low-on-memory",
        "keyword": "Scenario",
        "name": "Creating a Persistent Storage when system is low on memory",
        "description": "",
        "line": 30,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 13615
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 1554761
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive without a persistent partition and logged in",
            "line": 31,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 8010034657
            }
          },
          {
            "keyword": "And ",
            "name": "the system is very low on memory",
            "line": 32,
            "match": {
              "location": "features/step_definitions/usb.rb:395"
            },
            "result": {
              "status": "passed",
              "duration": 4041699294
            }
          },
          {
            "keyword": "When ",
            "name": "I create a file in the Persistent directory",
            "line": 33,
            "match": {
              "location": "features/step_definitions/usb.rb:1719"
            },
            "result": {
              "status": "passed",
              "duration": 162069100
            }
          },
          {
            "keyword": "When ",
            "name": "I try to create a persistent partition",
            "line": 34,
            "match": {
              "location": "features/step_definitions/usb.rb:373"
            },
            "result": {
              "status": "passed",
              "duration": 4099533405
            }
          },
          {
            "keyword": "Then ",
            "name": "The Persistent Storage app shows the error message \"Not enough memory to create Persistent Storage\"",
            "line": 35,
            "match": {
              "location": "features/step_definitions/usb.rb:465"
            },
            "result": {
              "status": "passed",
              "duration": 102158665
            }
          },
          {
            "keyword": "When ",
            "name": "I close the Persistent Storage app",
            "line": 36,
            "match": {
              "location": "features/step_definitions/usb.rb:442"
            },
            "result": {
              "status": "passed",
              "duration": 2318605826
            }
          },
          {
            "keyword": "And ",
            "name": "I free up some memory",
            "line": 37,
            "match": {
              "location": "features/step_definitions/usb.rb:435"
            },
            "result": {
              "status": "passed",
              "duration": 417297781
            }
          },
          {
            "keyword": "And ",
            "name": "I create a persistent partition with the default settings",
            "line": 38,
            "match": {
              "location": "features/step_definitions/usb.rb:349"
            },
            "result": {
              "status": "passed",
              "duration": 8629615151
            }
          },
          {
            "keyword": "Then ",
            "name": "the file I created was copied to the Persistent Storage",
            "line": 39,
            "match": {
              "location": "features/step_definitions/usb.rb:1726"
            },
            "result": {
              "status": "passed",
              "duration": 35506455
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 870124206
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 22371
            }
          }
        ]
      },
      {
        "id": "tails-persistence;booting-tails-from-a-usb-drive-with-an-enabled-persistent-partition-and-reconfiguring-it",
        "keyword": "Scenario",
        "name": "Booting Tails from a USB drive with an enabled persistent partition and reconfiguring it",
        "description": "",
        "line": 41,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 11672
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2383819
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition enabled and logged in",
            "line": 42,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 8210001544
            }
          },
          {
            "keyword": "Then ",
            "name": "Tails is running from USB drive \"__internal\"",
            "line": 43,
            "match": {
              "location": "features/step_definitions/usb.rb:942"
            },
            "result": {
              "status": "passed",
              "duration": 256731904
            }
          },
          {
            "keyword": "And ",
            "name": "all tps features are active",
            "line": 44,
            "match": {
              "location": "features/step_definitions/usb.rb:785"
            },
            "result": {
              "status": "passed",
              "duration": 7596890074
            }
          },
          {
            "keyword": "And ",
            "name": "all persistent directories have safe access rights",
            "line": 45,
            "match": {
              "location": "features/step_definitions/usb.rb:1044"
            },
            "result": {
              "status": "passed",
              "duration": 1821686526
            }
          },
          {
            "keyword": "When ",
            "name": "I disable the first tps feature",
            "line": 46,
            "match": {
              "location": "features/step_definitions/usb.rb:302"
            },
            "result": {
              "status": "passed",
              "duration": 2458724732
            }
          },
          {
            "keyword": "Then ",
            "name": "all tps features but the first one are active",
            "line": 47,
            "match": {
              "location": "features/step_definitions/usb.rb:785"
            },
            "result": {
              "status": "passed",
              "duration": 7628581227
            }
          },
          {
            "keyword": "And ",
            "name": "I shutdown Tails and wait for the computer to power off",
            "line": 48,
            "match": {
              "location": "features/step_definitions/common_steps.rb:908"
            },
            "result": {
              "status": "passed",
              "duration": 5157354894
            }
          },
          {
            "keyword": "And ",
            "name": "I start Tails from USB drive \"__internal\" with network unplugged and I login with persistence enabled",
            "line": 49,
            "match": {
              "location": "features/step_definitions/common_steps.rb:235"
            },
            "result": {
              "status": "passed",
              "duration": 61851815977
            }
          },
          {
            "keyword": "Then ",
            "name": "all tps features but the first one are active",
            "line": 50,
            "match": {
              "location": "features/step_definitions/usb.rb:785"
            },
            "result": {
              "status": "passed",
              "duration": 7406516031
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 773464185
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 37176472
            }
          }
        ]
      },
      {
        "id": "tails-persistence;activating-and-deactivating-persistent-storage-features",
        "keyword": "Scenario",
        "name": "Activating and deactivating Persistent Storage features",
        "description": "",
        "line": 52,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 16702
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 1700774
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition enabled and logged in",
            "line": 53,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 7929036658
            }
          },
          {
            "keyword": "Then ",
            "name": "persistence for \"Persistent\" is active",
            "line": 54,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1068"
            },
            "result": {
              "status": "passed",
              "duration": 65542188
            }
          },
          {
            "keyword": "And ",
            "name": "I create a file in the Persistent directory",
            "line": 55,
            "match": {
              "location": "features/step_definitions/usb.rb:1719"
            },
            "result": {
              "status": "passed",
              "duration": 50246197
            }
          },
          {
            "keyword": "Then ",
            "name": "the file I created was copied to the Persistent Storage",
            "line": 56,
            "match": {
              "location": "features/step_definitions/usb.rb:1726"
            },
            "result": {
              "status": "passed",
              "duration": 62949317
            }
          },
          {
            "keyword": "When ",
            "name": "I disable the first tps feature",
            "line": 57,
            "match": {
              "location": "features/step_definitions/usb.rb:302"
            },
            "result": {
              "status": "passed",
              "duration": 2474019596
            }
          },
          {
            "keyword": "Then ",
            "name": "persistence for \"Persistent\" is not active",
            "line": 58,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1068"
            },
            "result": {
              "status": "passed",
              "duration": 42145135
            }
          },
          {
            "keyword": "And ",
            "name": "the Persistent directory does not exist",
            "line": 59,
            "match": {
              "location": "features/step_definitions/usb.rb:1743"
            },
            "result": {
              "status": "passed",
              "duration": 21696498
            }
          },
          {
            "keyword": "When ",
            "name": "I enable the first tps feature",
            "line": 60,
            "match": {
              "location": "features/step_definitions/usb.rb:302"
            },
            "result": {
              "status": "passed",
              "duration": 2380692517
            }
          },
          {
            "keyword": "Then ",
            "name": "persistence for \"Persistent\" is active",
            "line": 61,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1068"
            },
            "result": {
              "status": "passed",
              "duration": 49113713
            }
          },
          {
            "keyword": "And ",
            "name": "the file I created in the Persistent directory exists",
            "line": 62,
            "match": {
              "location": "features/step_definitions/usb.rb:1737"
            },
            "result": {
              "status": "passed",
              "duration": 32256076
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 609779783
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 24195
            }
          }
        ]
      },
      {
        "id": "tails-persistence;deleting-data-of-a-persistent-storage-feature",
        "keyword": "Scenario",
        "name": "Deleting data of a Persistent Storage feature",
        "description": "",
        "line": 64,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 9607
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2396513
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition enabled and logged in",
            "line": 65,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 7736930863
            }
          },
          {
            "keyword": "Then ",
            "name": "persistence for \"Persistent\" is active",
            "line": 66,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1068"
            },
            "result": {
              "status": "passed",
              "duration": 51611587
            }
          },
          {
            "keyword": "When ",
            "name": "I create a file in the Persistent directory",
            "line": 67,
            "match": {
              "location": "features/step_definitions/usb.rb:1719"
            },
            "result": {
              "status": "passed",
              "duration": 47900129
            }
          },
          {
            "keyword": "And ",
            "name": "I disable the first tps feature",
            "line": 68,
            "match": {
              "location": "features/step_definitions/usb.rb:302"
            },
            "result": {
              "status": "passed",
              "duration": 2444621814
            }
          },
          {
            "keyword": "And ",
            "name": "I delete the data of the Persistent Folder feature",
            "line": 69,
            "match": {
              "location": "features/step_definitions/usb.rb:1747"
            },
            "result": {
              "status": "passed",
              "duration": 2819905039
            }
          },
          {
            "keyword": "Then ",
            "name": "the file I created does not exist on the Persistent Storage",
            "line": 70,
            "match": {
              "location": "features/step_definitions/usb.rb:1732"
            },
            "result": {
              "status": "passed",
              "duration": 34531072
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 555954317
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 23976
            }
          }
        ]
      },
      {
        "id": "tails-persistence;writing-files-to-a-read/write-enabled-persistent-partition",
        "keyword": "Scenario",
        "name": "Writing files to a read/write-enabled persistent partition",
        "description": "",
        "line": 72,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 10760
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2250060
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition enabled and logged in",
            "line": 73,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 7512694244
            }
          },
          {
            "keyword": "And ",
            "name": "the network is plugged",
            "line": 74,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 27942947
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 75,
            "match": {
              "location": "features/step_definitions/common_steps.rb:655"
            },
            "result": {
              "status": "passed",
              "duration": 11300598101
            }
          },
          {
            "keyword": "And ",
            "name": "I take note of which tps features are available",
            "line": 76,
            "match": {
              "location": "features/step_definitions/usb.rb:1122"
            },
            "result": {
              "status": "passed",
              "duration": 6338213670
            }
          },
          {
            "keyword": "When ",
            "name": "I write some files expected to persist",
            "line": 77,
            "match": {
              "location": "features/step_definitions/usb.rb:1082"
            },
            "result": {
              "status": "passed",
              "duration": 955904288
            }
          },
          {
            "keyword": "And ",
            "name": "I shutdown Tails and wait for the computer to power off",
            "line": 78,
            "match": {
              "location": "features/step_definitions/common_steps.rb:908"
            },
            "result": {
              "status": "passed",
              "duration": 5209407359
            }
          },
          {
            "keyword": "Then ",
            "name": "only the expected files are present on the persistence partition on USB drive \"__internal\"",
            "line": 80,
            "comments": [
              {
                "value": "# XXX: The next step succeeds (and the --debug output confirms that it's actually looking for the files) but will fail in a subsequent scenario restoring the same snapshot. This exactly what we want, but why does it work? What is guestfs's behaviour when qcow2 internal snapshots are involved? (tails/tails#10330)",
                "line": 79
              }
            ],
            "match": {
              "location": "features/step_definitions/usb.rb:1161"
            },
            "result": {
              "status": "passed",
              "duration": 11032099771
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 360228332
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 18735
            }
          }
        ]
      },
      {
        "id": "tails-persistence;creating-and-using-a-persistent-networkmanager-connection",
        "keyword": "Scenario",
        "name": "Creating and using a persistent NetworkManager connection",
        "description": "",
        "line": 82,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 12394
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2453781
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition enabled and logged in",
            "line": 83,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 7463249855
            }
          },
          {
            "keyword": "And ",
            "name": "the network is plugged",
            "line": 84,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 43973489
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 85,
            "match": {
              "location": "features/step_definitions/common_steps.rb:655"
            },
            "result": {
              "status": "passed",
              "duration": 8043111013
            }
          },
          {
            "keyword": "And ",
            "name": "I add a wired DHCP NetworkManager connection called \"persistent-con-current\"",
            "line": 86,
            "match": {
              "location": "features/step_definitions/common_steps.rb:974"
            },
            "result": {
              "status": "passed",
              "duration": 95870967
            }
          },
          {
            "keyword": "And ",
            "name": "I shutdown Tails and wait for the computer to power off",
            "line": 87,
            "match": {
              "location": "features/step_definitions/common_steps.rb:908"
            },
            "result": {
              "status": "passed",
              "duration": 6482742295
            }
          },
          {
            "keyword": "Given ",
            "name": "I start Tails from USB drive \"__internal\" with network unplugged and I login with persistence enabled",
            "line": 88,
            "match": {
              "location": "features/step_definitions/common_steps.rb:235"
            },
            "result": {
              "status": "passed",
              "duration": 60691561579
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 89,
            "match": {
              "location": "features/step_definitions/common_steps.rb:188"
            },
            "result": {
              "status": "passed",
              "duration": 3005240
            }
          },
          {
            "keyword": "And ",
            "name": "the network is plugged",
            "line": 90,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 30393471
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 91,
            "match": {
              "location": "features/step_definitions/common_steps.rb:655"
            },
            "result": {
              "status": "passed",
              "duration": 10302507142
            }
          },
          {
            "keyword": "And ",
            "name": "I switch to the \"persistent-con-current\" NetworkManager connection",
            "line": 92,
            "match": {
              "location": "features/step_definitions/common_steps.rb:989"
            },
            "result": {
              "status": "passed",
              "duration": 364537321
            }
          },
          {
            "keyword": "And ",
            "name": "the 1st network device has a spoofed MAC address configured",
            "line": 93,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:18"
            },
            "result": {
              "status": "passed",
              "duration": 43581288
            }
          },
          {
            "keyword": "And ",
            "name": "no network device leaked the real MAC address",
            "line": 94,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:42"
            },
            "result": {
              "status": "passed",
              "duration": 97354029
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 560361558
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 96775325
            }
          }
        ]
      },
      {
        "id": "tails-persistence;creating-persistence-from-the-welcome-screen",
        "keyword": "Scenario",
        "name": "Creating persistence from the Welcome Screen",
        "description": "",
        "line": 96,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 14797
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 1719039
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive without a persistent partition and stopped at Tails Greeter's login screen",
            "line": 97,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 34482256914
            }
          },
          {
            "keyword": "And ",
            "name": "I enable persistence creation in Tails Greeter",
            "line": 98,
            "match": {
              "location": "features/step_definitions/usb.rb:330"
            },
            "result": {
              "status": "passed",
              "duration": 1092142372
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session expecting no warning about the Persistent Storage not being activated",
            "line": 99,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 11954349158
            }
          },
          {
            "keyword": "Then ",
            "name": "I create a persistent partition with the default settings using the wizard that was already open",
            "line": 100,
            "match": {
              "location": "features/step_definitions/usb.rb:349"
            },
            "result": {
              "status": "passed",
              "duration": 14005812340
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 698888328
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 23063
            }
          }
        ]
      },
      {
        "id": "tails-persistence;persistent-greeter-options",
        "keyword": "Scenario",
        "name": "Persistent Greeter options",
        "description": "",
        "line": 102,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 10090
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2256111
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition and stopped at Tails Greeter's login screen",
            "line": 103,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 8263404638
            }
          },
          {
            "keyword": "When ",
            "name": "I enable persistence",
            "line": 104,
            "match": {
              "location": "features/step_definitions/usb.rb:728"
            },
            "result": {
              "status": "passed",
              "duration": 20265932311
            }
          },
          {
            "keyword": "Then ",
            "name": "no persistent Greeter options were restored",
            "line": 105,
            "match": {
              "location": "features/step_definitions/usb.rb:1694"
            },
            "result": {
              "status": "passed",
              "duration": 13629000574
            }
          },
          {
            "keyword": "When ",
            "name": "I set all Greeter options to non-default values",
            "line": 106,
            "match": {
              "location": "features/step_definitions/usb.rb:1634"
            },
            "result": {
              "status": "passed",
              "duration": 37818550020
            }
          },
          {
            "keyword": "Then ",
            "name": "the Welcome Screen's language is set to English",
            "line": 107,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1911"
            },
            "result": {
              "status": "passed",
              "duration": 350764378
            }
          },
          {
            "keyword": "And ",
            "name": "the Welcome Screen's formats is set to United States",
            "line": 108,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1921"
            },
            "result": {
              "status": "passed",
              "duration": 278964487
            }
          },
          {
            "keyword": "When ",
            "name": "I set the formats to \"Belgien - Deutsch\"",
            "line": 110,
            "comments": [
              {
                "value": "# We need to set a format explicitly, or it won't be restored later",
                "line": 109
              }
            ],
            "match": {
              "location": "features/step_definitions/common_steps.rb:470"
            },
            "result": {
              "status": "passed",
              "duration": 4491680363
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session in German (de) after having activated the Persistent Storage",
            "line": 111,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 21373243972
            }
          },
          {
            "keyword": "Then ",
            "name": "all Persistent Greeter options are set to non-default values",
            "line": 112,
            "match": {
              "location": "features/step_definitions/usb.rb:1658"
            },
            "result": {
              "status": "passed",
              "duration": 181067551
            }
          },
          {
            "keyword": "When ",
            "name": "I cold reboot the computer",
            "line": 113,
            "match": {
              "location": "features/step_definitions/common_steps.rb:282"
            },
            "result": {
              "status": "passed",
              "duration": 5972778058
            }
          },
          {
            "keyword": "And ",
            "name": "the computer reboots Tails",
            "line": 114,
            "match": {
              "location": "features/step_definitions/common_steps.rb:405"
            },
            "result": {
              "status": "passed",
              "duration": 32351122071
            }
          },
          {
            "keyword": "Then ",
            "name": "the Welcome Screen's language is set to English",
            "line": 115,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1911"
            },
            "result": {
              "status": "passed",
              "duration": 293051079
            }
          },
          {
            "keyword": "And ",
            "name": "the Welcome Screen's formats is set to United States",
            "line": 116,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1921"
            },
            "result": {
              "status": "passed",
              "duration": 105542645
            }
          },
          {
            "keyword": "Given ",
            "name": "I enable persistence",
            "line": 117,
            "match": {
              "location": "features/step_definitions/usb.rb:728"
            },
            "result": {
              "status": "passed",
              "duration": 12456096976
            }
          },
          {
            "keyword": "Then ",
            "name": "persistent Greeter options were restored",
            "line": 118,
            "match": {
              "location": "features/step_definitions/usb.rb:1694"
            },
            "result": {
              "status": "passed",
              "duration": 66046151
            }
          },
          {
            "keyword": "And ",
            "name": "the Welcome Screen's formats is set to Belgium",
            "line": 119,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1921"
            },
            "result": {
              "status": "passed",
              "duration": 135052169
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session after having activated the Persistent Storage",
            "line": 120,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 6144784092
            }
          },
          {
            "keyword": "Then ",
            "name": "all Persistent Greeter options are set to non-default values",
            "line": 121,
            "match": {
              "location": "features/step_definitions/usb.rb:1658"
            },
            "result": {
              "status": "passed",
              "duration": 134591279
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 864742349
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 8325700
            }
          }
        ]
      },
      {
        "id": "tails-persistence;changing-the-persistent-storage-passphrase",
        "keyword": "Scenario",
        "name": "Changing the Persistent Storage passphrase",
        "description": "",
        "line": 123,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 13094
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 1548110
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition enabled and logged in",
            "line": 124,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 8306823752
            }
          },
          {
            "keyword": "When ",
            "name": "I change the passphrase of the Persistent Storage",
            "line": 128,
            "comments": [
              {
                "value": "# Note that if anything fails after the passphrase was changed and",
                "line": 125
              },
              {
                "value": "# before it's changed back below, subsequent scenarios might fail",
                "line": 126
              },
              {
                "value": "# because the Persistent Storage doesn't have the expected passphrase.",
                "line": 127
              }
            ],
            "match": {
              "location": "features/step_definitions/usb.rb:469"
            },
            "result": {
              "status": "passed",
              "duration": 27261615875
            }
          },
          {
            "keyword": "And ",
            "name": "I shutdown Tails and wait for the computer to power off",
            "line": 129,
            "match": {
              "location": "features/step_definitions/common_steps.rb:908"
            },
            "result": {
              "status": "passed",
              "duration": 5111326455
            }
          },
          {
            "keyword": "Then ",
            "name": "I start Tails from USB drive \"__internal\" with network unplugged and I login with the changed persistence passphrase",
            "line": 130,
            "match": {
              "location": "features/step_definitions/common_steps.rb:235"
            },
            "result": {
              "status": "passed",
              "duration": 61378841988
            }
          },
          {
            "keyword": "And ",
            "name": "I change the passphrase of the Persistent Storage back to the original",
            "line": 131,
            "match": {
              "location": "features/step_definitions/usb.rb:469"
            },
            "result": {
              "status": "passed",
              "duration": 20983745188
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 871190928
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 5240533
            }
          }
        ]
      },
      {
        "id": "tails-persistence;deleting-a-tails-persistent-partition",
        "keyword": "Scenario",
        "name": "Deleting a Tails persistent partition",
        "description": "",
        "line": 133,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 84226
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 1521941
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition and stopped at Tails Greeter's login screen",
            "line": 134,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 8119696723
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session without activating the Persistent Storage",
            "line": 135,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 12502731985
            }
          },
          {
            "keyword": "Then ",
            "name": "persistence is disabled",
            "line": 136,
            "match": {
              "location": "features/step_definitions/usb.rb:854"
            },
            "result": {
              "status": "passed",
              "duration": 69337180
            }
          },
          {
            "keyword": "But ",
            "name": "a Tails persistence partition exists on USB drive \"__internal\"",
            "line": 137,
            "match": {
              "location": "features/step_definitions/usb.rb:655"
            },
            "result": {
              "status": "passed",
              "duration": 5235047462
            }
          },
          {
            "keyword": "And ",
            "name": "all notifications have disappeared",
            "line": 138,
            "match": {
              "location": "features/step_definitions/common_steps.rb:767"
            },
            "result": {
              "status": "passed",
              "duration": 8433615099
            }
          },
          {
            "keyword": "When ",
            "name": "I delete the persistent partition",
            "line": 139,
            "match": {
              "location": "features/step_definitions/usb.rb:1201"
            },
            "result": {
              "status": "passed",
              "duration": 2710688058
            }
          },
          {
            "keyword": "Then ",
            "name": "there is no persistence partition on USB drive \"__internal\"",
            "line": 140,
            "match": {
              "location": "features/step_definitions/usb.rb:613"
            },
            "result": {
              "status": "passed",
              "duration": 244496835
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 931576998
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 22091
            }
          }
        ]
      },
      {
        "id": "tails-persistence;dotfiles-persistence",
        "keyword": "Scenario",
        "name": "Dotfiles persistence",
        "description": "",
        "line": 142,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 10339
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2645449
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition enabled and logged in",
            "line": 143,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 7964313367
            }
          },
          {
            "keyword": "When ",
            "name": "I write some dotfile expected to persist",
            "line": 144,
            "match": {
              "location": "features/step_definitions/usb.rb:1092"
            },
            "result": {
              "status": "passed",
              "duration": 50102167
            }
          },
          {
            "keyword": "And ",
            "name": "I shutdown Tails and wait for the computer to power off",
            "line": 145,
            "match": {
              "location": "features/step_definitions/common_steps.rb:908"
            },
            "result": {
              "status": "passed",
              "duration": 5222255253
            }
          },
          {
            "keyword": "And ",
            "name": "I start Tails from USB drive \"__internal\" with network unplugged and I login with persistence enabled",
            "line": 146,
            "match": {
              "location": "features/step_definitions/common_steps.rb:235"
            },
            "result": {
              "status": "passed",
              "duration": 61178736158
            }
          },
          {
            "keyword": "Then ",
            "name": "the expected persistent dotfile is present in the filesystem",
            "line": 147,
            "match": {
              "location": "features/step_definitions/usb.rb:1147"
            },
            "result": {
              "status": "passed",
              "duration": 168793018
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 603210897
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 26990490
            }
          }
        ]
      },
      {
        "id": "tails-persistence;feature-activation-fails",
        "keyword": "Scenario",
        "name": "Feature activation fails",
        "description": "",
        "line": 149,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 13775
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2303540
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition and stopped at Tails Greeter's login screen",
            "line": 150,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 8326774703
            }
          },
          {
            "keyword": "And ",
            "name": "I create a symlink \"/home/amnesia/Persistent\" to \"/etc\"",
            "line": 151,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1774"
            },
            "result": {
              "status": "passed",
              "duration": 49071816
            }
          },
          {
            "keyword": "When ",
            "name": "I try to enable persistence",
            "line": 152,
            "match": {
              "location": "features/step_definitions/usb.rb:697"
            },
            "result": {
              "status": "passed",
              "duration": 1243641729
            }
          },
          {
            "keyword": "Then ",
            "name": "the Welcome Screen tells me that the Persistent Folder feature couldn't be activated",
            "line": 153,
            "match": {
              "location": "features/step_definitions/usb.rb:1780"
            },
            "result": {
              "status": "passed",
              "duration": 12833308290
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session after having activated the Persistent Storage",
            "line": 154,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 7468590407
            }
          },
          {
            "keyword": "And ",
            "name": "all notifications have disappeared",
            "line": 155,
            "match": {
              "location": "features/step_definitions/common_steps.rb:767"
            },
            "result": {
              "status": "passed",
              "duration": 8127876546
            }
          },
          {
            "keyword": "Then ",
            "name": "the Persistent Storage settings tell me that the Persistent Folder feature couldn't be activated",
            "line": 156,
            "match": {
              "location": "features/step_definitions/usb.rb:1803"
            },
            "result": {
              "status": "passed",
              "duration": 1203477365
            }
          },
          {
            "keyword": "And ",
            "name": "all tps features are enabled",
            "line": 157,
            "match": {
              "location": "features/step_definitions/usb.rb:805"
            },
            "result": {
              "status": "passed",
              "duration": 7348970983
            }
          },
          {
            "keyword": "And ",
            "name": "all tps features but the first one are active",
            "line": 158,
            "match": {
              "location": "features/step_definitions/usb.rb:785"
            },
            "result": {
              "status": "passed",
              "duration": 7571041200
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 545653430
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 36176
            }
          }
        ]
      },
      {
        "id": "tails-persistence;luks-header-is-automatically-upgraded-when-unlocking-the-persistent-storage",
        "keyword": "Scenario",
        "name": "LUKS header is automatically upgraded when unlocking the Persistent Storage",
        "description": "",
        "line": 160,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 12283
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 3074330
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a LUKS 1 persistent partition and stopped at Tails Greeter's login screen",
            "line": 161,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 116877999480
            }
          },
          {
            "keyword": "And ",
            "name": "I enable persistence",
            "line": 162,
            "match": {
              "location": "features/step_definitions/usb.rb:728"
            },
            "result": {
              "status": "passed",
              "duration": 24089244522
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session after having activated the Persistent Storage",
            "line": 163,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 6836492684
            }
          },
          {
            "keyword": "Then ",
            "name": "a Tails persistence partition with LUKS version 2 and argon2id exists on USB drive \"__internal\"",
            "line": 164,
            "match": {
              "location": "features/step_definitions/usb.rb:643"
            },
            "result": {
              "status": "passed",
              "duration": 487928010
            }
          },
          {
            "keyword": "And ",
            "name": "persistence is enabled",
            "line": 165,
            "match": {
              "location": "features/step_definitions/usb.rb:858"
            },
            "result": {
              "status": "passed",
              "duration": 7733640877
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 729350615
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 24015
            }
          }
        ]
      },
      {
        "id": "tails-persistence;luks-backup-header-is-restored-if-something-goes-wrong-during-upgrade",
        "keyword": "Scenario",
        "name": "LUKS backup header is restored if something goes wrong during upgrade",
        "description": "",
        "line": 167,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 12944
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2157006
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a LUKS 1 persistent partition and stopped at Tails Greeter's login screen",
            "line": 168,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 7393542320
            }
          },
          {
            "keyword": "And ",
            "name": "I enable persistence but something goes wrong during the LUKS header upgrade",
            "line": 169,
            "match": {
              "location": "features/step_definitions/usb.rb:733"
            },
            "result": {
              "status": "passed",
              "duration": 21128411341
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tails persistence partition on USB drive \"__internal\" still has LUKS version 1",
            "line": 170,
            "match": {
              "location": "features/step_definitions/usb.rb:650"
            },
            "result": {
              "status": "passed",
              "duration": 438971428
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 716514785
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 21219
            }
          }
        ]
      },
      {
        "id": "tails-persistence;automatic-filesystem-repair",
        "keyword": "Scenario",
        "name": "Automatic filesystem repair",
        "description": "",
        "line": 172,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 11802
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2182424
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition and stopped at Tails Greeter's login screen",
            "line": 173,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 8507539269
            }
          },
          {
            "keyword": "And ",
            "name": "I corrupt the Persistent Storage filesystem on USB drive \"__internal\"",
            "line": 174,
            "match": {
              "location": "features/step_definitions/usb.rb:1830"
            },
            "result": {
              "status": "passed",
              "duration": 9229044638
            }
          },
          {
            "keyword": "When ",
            "name": "I enable persistence",
            "line": 175,
            "match": {
              "location": "features/step_definitions/usb.rb:728"
            },
            "result": {
              "status": "passed",
              "duration": 13020380655
            }
          },
          {
            "keyword": "Then ",
            "name": "the filesystem of the Persistent Storage was repaired",
            "line": 176,
            "match": {
              "location": "features/step_definitions/usb.rb:1872"
            },
            "result": {
              "status": "passed",
              "duration": 41143518
            }
          },
          {
            "keyword": "And ",
            "name": "persistence is successfully enabled",
            "line": 177,
            "match": {
              "location": "features/step_definitions/usb.rb:708"
            },
            "result": {
              "status": "passed",
              "duration": 7393253060
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 980659982
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 24105
            }
          }
        ]
      },
      {
        "id": "tails-persistence;manual-filesystem-repair-is-successful",
        "keyword": "Scenario",
        "name": "Manual filesystem repair is successful",
        "description": "",
        "line": 179,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 13265
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2227830
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition and stopped at Tails Greeter's login screen",
            "line": 180,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 8432655191
            }
          },
          {
            "keyword": "And ",
            "name": "I corrupt the Persistent Storage filesystem on USB drive \"__internal\" in a way which can't be automatically repaired",
            "line": 181,
            "match": {
              "location": "features/step_definitions/usb.rb:1830"
            },
            "result": {
              "status": "passed",
              "duration": 10310002756
            }
          },
          {
            "keyword": "When ",
            "name": "I try to enable persistence",
            "line": 182,
            "match": {
              "location": "features/step_definitions/usb.rb:697"
            },
            "result": {
              "status": "passed",
              "duration": 1217778817
            }
          },
          {
            "keyword": "Then ",
            "name": "the Welcome Screen tells me that filesystem errors were found on the Persistent Storage",
            "line": 183,
            "match": {
              "location": "features/step_definitions/usb.rb:1788"
            },
            "result": {
              "status": "passed",
              "duration": 2272476075
            }
          },
          {
            "keyword": "When ",
            "name": "I repair the filesystem of the Persistent Storage",
            "line": 184,
            "match": {
              "location": "features/step_definitions/usb.rb:1880"
            },
            "result": {
              "status": "passed",
              "duration": 1111971186
            }
          },
          {
            "keyword": "Then ",
            "name": "the Welcome Screen tells me that the filesystem was repaired successfully",
            "line": 185,
            "match": {
              "location": "features/step_definitions/usb.rb:1884"
            },
            "result": {
              "status": "passed",
              "duration": 130583129
            }
          },
          {
            "keyword": "And ",
            "name": "the filesystem of the Persistent Storage was repaired",
            "line": 186,
            "match": {
              "location": "features/step_definitions/usb.rb:1872"
            },
            "result": {
              "status": "passed",
              "duration": 52804467
            }
          },
          {
            "keyword": "When ",
            "name": "I close the filesystem repair dialog",
            "line": 187,
            "match": {
              "location": "features/step_definitions/usb.rb:1890"
            },
            "result": {
              "status": "passed",
              "duration": 1213453785
            }
          },
          {
            "keyword": "Then ",
            "name": "persistence is successfully enabled",
            "line": 188,
            "match": {
              "location": "features/step_definitions/usb.rb:708"
            },
            "result": {
              "status": "passed",
              "duration": 3198366678
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 790540146
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 22662
            }
          }
        ]
      },
      {
        "id": "tails-persistence;manual-filesystem-repair-fails",
        "keyword": "Scenario",
        "name": "Manual filesystem repair fails",
        "description": "",
        "line": 191,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@doc",
            "line": 190
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 11501
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2494486
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition and stopped at Tails Greeter's login screen",
            "line": 192,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 7962485190
            }
          },
          {
            "keyword": "And ",
            "name": "the Persistent Storage filesystem is corrupted beyond what e2fsck can repair",
            "line": 193,
            "match": {
              "location": "features/step_definitions/usb.rb:1863"
            },
            "result": {
              "status": "passed",
              "duration": 54721705
            }
          },
          {
            "keyword": "When ",
            "name": "I try to enable persistence",
            "line": 194,
            "match": {
              "location": "features/step_definitions/usb.rb:697"
            },
            "result": {
              "status": "passed",
              "duration": 1192869672
            }
          },
          {
            "keyword": "Then ",
            "name": "the Welcome Screen tells me that filesystem errors were found on the Persistent Storage",
            "line": 195,
            "match": {
              "location": "features/step_definitions/usb.rb:1788"
            },
            "result": {
              "status": "passed",
              "duration": 11015123787
            }
          },
          {
            "keyword": "When ",
            "name": "I repair the filesystem of the Persistent Storage",
            "line": 196,
            "match": {
              "location": "features/step_definitions/usb.rb:1880"
            },
            "result": {
              "status": "passed",
              "duration": 1254921136
            }
          },
          {
            "keyword": "Then ",
            "name": "the Welcome Screen tells me that it failed to repair the Persistent Storage",
            "line": 197,
            "match": {
              "location": "features/step_definitions/usb.rb:1795"
            },
            "result": {
              "status": "passed",
              "duration": 25641412
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session",
            "line": 198,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 7327561630
            }
          },
          {
            "keyword": "And ",
            "name": "all notifications have disappeared",
            "line": 199,
            "match": {
              "location": "features/step_definitions/common_steps.rb:767"
            },
            "result": {
              "status": "passed",
              "duration": 8371730391
            }
          },
          {
            "keyword": "Then ",
            "name": "WhisperBack is prefilled for fsck with summary: \"Failed to repair the file system of your Persistent Storage\"",
            "line": 205,
            "comments": [
              {
                "value": "# Now both WhisperBack and Tor Browser has started at the same",
                "line": 200
              },
              {
                "value": "# time, so we do not know which window is focused. The steps about",
                "line": 201
              },
              {
                "value": "# Tor Browser care about that, but the ones about WhisperBack do",
                "line": 202
              },
              {
                "value": "# not, so we first deal with WhisperBack and then kill it to",
                "line": 203
              },
              {
                "value": "# ensure that Tor Browser is focused.",
                "line": 204
              }
            ],
            "match": {
              "location": "features/step_definitions/common_steps.rb:1871"
            },
            "result": {
              "status": "passed",
              "duration": 222887453
            }
          },
          {
            "keyword": "And ",
            "name": "the file \"/var/lib/gdm3/post-greeter-whisperback.json\" is empty",
            "line": 206,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1040"
            },
            "result": {
              "status": "passed",
              "duration": 147045848
            }
          },
          {
            "keyword": "When ",
            "name": "I close the \"whisperback\" window",
            "line": 207,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1243"
            },
            "result": {
              "status": "passed",
              "duration": 1217779274
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Browser starts",
            "line": 208,
            "match": {
              "location": "features/step_definitions/browser.rb:502"
            },
            "result": {
              "status": "passed",
              "duration": 1004345265
            }
          },
          {
            "keyword": "And ",
            "name": "\"Tails - Recovering data from the Persistent Storage when it has file system errors\" has loaded in the Tor Browser",
            "line": 209,
            "match": {
              "location": "features/step_definitions/browser.rb:275"
            },
            "result": {
              "status": "passed",
              "duration": 911070798
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 1031456322
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 19736
            }
          }
        ]
      },
      {
        "id": "tails-persistence;filesystem-and-i/o-errors",
        "keyword": "Scenario",
        "name": "Filesystem and I/O errors",
        "description": "",
        "line": 212,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@doc",
            "line": 211
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 13456
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2211558
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition and stopped at Tails Greeter's login screen",
            "line": 213,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 7928443098
            }
          },
          {
            "keyword": "And ",
            "name": "I corrupt the Persistent Storage filesystem on USB drive \"__internal\" in a way which can't be automatically repaired",
            "line": 214,
            "match": {
              "location": "features/step_definitions/usb.rb:1830"
            },
            "result": {
              "status": "passed",
              "duration": 9493832974
            }
          },
          {
            "keyword": "And ",
            "name": "Tails detects disk read failures on the boot device",
            "line": 215,
            "match": {
              "location": "features/step_definitions/hardware.rb:5"
            },
            "result": {
              "status": "passed",
              "duration": 1286454632
            }
          },
          {
            "keyword": "When ",
            "name": "I try to enable persistence",
            "line": 216,
            "match": {
              "location": "features/step_definitions/usb.rb:697"
            },
            "result": {
              "status": "passed",
              "duration": 1170184437
            }
          },
          {
            "keyword": "Then ",
            "name": "the Welcome Screen tells me that my hardware is probably failing",
            "line": 217,
            "match": {
              "location": "features/step_definitions/usb.rb:1898"
            },
            "result": {
              "status": "passed",
              "duration": 2418584194
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session",
            "line": 218,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 7398886976
            }
          },
          {
            "keyword": "And ",
            "name": "all notifications have disappeared",
            "line": 219,
            "match": {
              "location": "features/step_definitions/common_steps.rb:767"
            },
            "result": {
              "status": "passed",
              "duration": 5977096680
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Browser starts",
            "line": 220,
            "match": {
              "location": "features/step_definitions/browser.rb:502"
            },
            "result": {
              "status": "passed",
              "duration": 1079595421
            }
          },
          {
            "keyword": "And ",
            "name": "\"Tails - Recovering data from the Persistent Storage when it has file system errors\" has loaded in the Tor Browser",
            "line": 221,
            "match": {
              "location": "features/step_definitions/browser.rb:275"
            },
            "result": {
              "status": "passed",
              "duration": 891810423
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 634430475
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 21030
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/persistent_tor_bridges.feature",
    "id": "using-persistent-tor-bridges-and-pluggable-transports",
    "keyword": "Feature",
    "name": "Using persistent Tor bridges and pluggable transports",
    "description": "  As a Tails user\n  I want to save Tor bridges in Persistent Storage\n  And be given the option to use them again",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 15099
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2436369
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive without a persistent partition and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 8290333139
            }
          },
          {
            "keyword": "And ",
            "name": "I create a persistent partition with the default settings",
            "line": 9,
            "match": {
              "location": "features/step_definitions/usb.rb:349"
            },
            "result": {
              "status": "passed",
              "duration": 17535036524
            }
          },
          {
            "keyword": "Then ",
            "name": "the \"TorConfiguration\" tps feature is not enabled",
            "line": 10,
            "match": {
              "location": "features/step_definitions/usb.rb:829"
            },
            "result": {
              "status": "passed",
              "duration": 349368447
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 11,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 28313681
            }
          },
          {
            "keyword": "And ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 12,
            "match": {
              "location": "features/step_definitions/tor.rb:409"
            },
            "result": {
              "status": "passed",
              "duration": 4661534362
            }
          },
          {
            "keyword": "And ",
            "name": "I configure some persistent obfs4 bridges in the Tor Connection Assistant",
            "line": 13,
            "match": {
              "location": "features/step_definitions/tor.rb:655"
            },
            "result": {
              "status": "passed",
              "duration": 10267521075
            }
          },
          {
            "keyword": "And ",
            "name": "I wait until Tor is ready",
            "line": 14,
            "match": {
              "location": "features/step_definitions/common_steps.rb:710"
            },
            "result": {
              "status": "passed",
              "duration": 867089953
            }
          },
          {
            "keyword": "Then ",
            "name": "tca.conf includes the configured bridges",
            "line": 15,
            "match": {
              "location": "features/step_definitions/tor.rb:1200"
            },
            "result": {
              "status": "passed",
              "duration": 6357988
            }
          },
          {
            "keyword": "And ",
            "name": "the \"TorConfiguration\" tps feature is enabled and active",
            "line": 16,
            "match": {
              "location": "features/step_definitions/usb.rb:849"
            },
            "result": {
              "status": "passed",
              "duration": 766135167
            }
          },
          {
            "keyword": "When ",
            "name": "I cold reboot the computer",
            "line": 17,
            "match": {
              "location": "features/step_definitions/common_steps.rb:282"
            },
            "result": {
              "status": "passed",
              "duration": 4627737744
            }
          },
          {
            "keyword": "And ",
            "name": "the computer reboots Tails",
            "line": 18,
            "match": {
              "location": "features/step_definitions/common_steps.rb:405"
            },
            "result": {
              "status": "passed",
              "duration": 32398783936
            }
          },
          {
            "keyword": "And ",
            "name": "I enable persistence",
            "line": 19,
            "match": {
              "location": "features/step_definitions/usb.rb:728"
            },
            "result": {
              "status": "passed",
              "duration": 10672060835
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 20,
            "match": {
              "location": "features/step_definitions/common_steps.rb:188"
            },
            "result": {
              "status": "passed",
              "duration": 2716900
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session",
            "line": 21,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 7352409002
            }
          },
          {
            "keyword": "Then ",
            "name": "tca.conf includes the configured bridges",
            "line": 22,
            "match": {
              "location": "features/step_definitions/tor.rb:1200"
            },
            "result": {
              "status": "passed",
              "duration": 7680677
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 23,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 32524562
            }
          },
          {
            "keyword": "And ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 24,
            "match": {
              "location": "features/step_definitions/tor.rb:409"
            },
            "result": {
              "status": "passed",
              "duration": 4349842250
            }
          }
        ]
      },
      {
        "id": "using-persistent-tor-bridges-and-pluggable-transports;using-persistent-tor-bridges",
        "keyword": "Scenario",
        "name": "Using Persistent Tor bridges",
        "description": "",
        "line": 26,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "When ",
            "name": "I choose to connect to Tor automatically",
            "line": 27,
            "match": {
              "location": "features/step_definitions/tor.rb:548"
            },
            "result": {
              "status": "passed",
              "duration": 1268644882
            }
          },
          {
            "keyword": "And ",
            "name": "I accept Tor Connection's offer to use my persistent bridges",
            "line": 28,
            "match": {
              "location": "features/step_definitions/tor.rb:880"
            },
            "result": {
              "status": "passed",
              "duration": 1579505610
            }
          },
          {
            "keyword": "And ",
            "name": "I click \"Connect to Tor\"",
            "line": 29,
            "match": {
              "location": "features/step_definitions/tor.rb:961"
            },
            "result": {
              "status": "passed",
              "duration": 1271383383
            }
          },
          {
            "keyword": "Then ",
            "name": "I wait until Tor is ready",
            "line": 30,
            "match": {
              "location": "features/step_definitions/common_steps.rb:710"
            },
            "result": {
              "status": "passed",
              "duration": 5681116889
            }
          },
          {
            "keyword": "And ",
            "name": "tca.conf includes the configured bridges",
            "line": 31,
            "match": {
              "location": "features/step_definitions/tor.rb:1200"
            },
            "result": {
              "status": "passed",
              "duration": 5606795
            }
          },
          {
            "keyword": "And ",
            "name": "the \"TorConfiguration\" tps feature is enabled and active",
            "line": 32,
            "match": {
              "location": "features/step_definitions/usb.rb:849"
            },
            "result": {
              "status": "passed",
              "duration": 854200531
            }
          },
          {
            "keyword": "And ",
            "name": "all Internet traffic has only flowed through the configured bridges or connectivity check service",
            "line": 33,
            "output": [
              "Warning: these queries were allowed but not needed: [\"fedoraproject.org.\"]"
            ],
            "match": {
              "location": "features/step_definitions/tor.rb:1059"
            },
            "result": {
              "status": "passed",
              "duration": 377081337
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 974548207
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 52945851
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 20838
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 1755047
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive without a persistent partition and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 8049960865
            }
          },
          {
            "keyword": "And ",
            "name": "I create a persistent partition with the default settings",
            "line": 9,
            "match": {
              "location": "features/step_definitions/usb.rb:349"
            },
            "result": {
              "status": "passed",
              "duration": 16676895696
            }
          },
          {
            "keyword": "Then ",
            "name": "the \"TorConfiguration\" tps feature is not enabled",
            "line": 10,
            "match": {
              "location": "features/step_definitions/usb.rb:829"
            },
            "result": {
              "status": "passed",
              "duration": 369192602
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 11,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 26508222
            }
          },
          {
            "keyword": "And ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 12,
            "match": {
              "location": "features/step_definitions/tor.rb:409"
            },
            "result": {
              "status": "passed",
              "duration": 1633704339
            }
          },
          {
            "keyword": "And ",
            "name": "I configure some persistent obfs4 bridges in the Tor Connection Assistant",
            "line": 13,
            "match": {
              "location": "features/step_definitions/tor.rb:655"
            },
            "result": {
              "status": "passed",
              "duration": 10239006027
            }
          },
          {
            "keyword": "And ",
            "name": "I wait until Tor is ready",
            "line": 14,
            "match": {
              "location": "features/step_definitions/common_steps.rb:710"
            },
            "result": {
              "status": "passed",
              "duration": 864588231
            }
          },
          {
            "keyword": "Then ",
            "name": "tca.conf includes the configured bridges",
            "line": 15,
            "match": {
              "location": "features/step_definitions/tor.rb:1200"
            },
            "result": {
              "status": "passed",
              "duration": 5342872
            }
          },
          {
            "keyword": "And ",
            "name": "the \"TorConfiguration\" tps feature is enabled and active",
            "line": 16,
            "match": {
              "location": "features/step_definitions/usb.rb:849"
            },
            "result": {
              "status": "passed",
              "duration": 792766726
            }
          },
          {
            "keyword": "When ",
            "name": "I cold reboot the computer",
            "line": 17,
            "match": {
              "location": "features/step_definitions/common_steps.rb:282"
            },
            "result": {
              "status": "passed",
              "duration": 4631195918
            }
          },
          {
            "keyword": "And ",
            "name": "the computer reboots Tails",
            "line": 18,
            "match": {
              "location": "features/step_definitions/common_steps.rb:405"
            },
            "result": {
              "status": "passed",
              "duration": 31363641266
            }
          },
          {
            "keyword": "And ",
            "name": "I enable persistence",
            "line": 19,
            "match": {
              "location": "features/step_definitions/usb.rb:728"
            },
            "result": {
              "status": "passed",
              "duration": 10609681827
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 20,
            "match": {
              "location": "features/step_definitions/common_steps.rb:188"
            },
            "result": {
              "status": "passed",
              "duration": 2894963
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session",
            "line": 21,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 6856262198
            }
          },
          {
            "keyword": "Then ",
            "name": "tca.conf includes the configured bridges",
            "line": 22,
            "match": {
              "location": "features/step_definitions/tor.rb:1200"
            },
            "result": {
              "status": "passed",
              "duration": 5483496
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 23,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 36082774
            }
          },
          {
            "keyword": "And ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 24,
            "match": {
              "location": "features/step_definitions/tor.rb:409"
            },
            "result": {
              "status": "passed",
              "duration": 4356174492
            }
          }
        ]
      },
      {
        "id": "using-persistent-tor-bridges-and-pluggable-transports;disabling-persistence-of-tor-bridges",
        "keyword": "Scenario",
        "name": "Disabling persistence of Tor bridges",
        "description": "",
        "line": 35,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "When ",
            "name": "I choose to connect to Tor automatically",
            "line": 36,
            "match": {
              "location": "features/step_definitions/tor.rb:548"
            },
            "result": {
              "status": "passed",
              "duration": 1316237875
            }
          },
          {
            "keyword": "And ",
            "name": "I accept Tor Connection's offer to use my persistent bridges",
            "line": 37,
            "match": {
              "location": "features/step_definitions/tor.rb:880"
            },
            "result": {
              "status": "passed",
              "duration": 1716957840
            }
          },
          {
            "keyword": "And ",
            "name": "I disable saving bridges to Persistent Storage",
            "line": 38,
            "match": {
              "location": "features/step_definitions/tor.rb:779"
            },
            "result": {
              "status": "passed",
              "duration": 1202565950
            }
          },
          {
            "keyword": "And ",
            "name": "I configure a direct connection in the Tor Connection Assistant",
            "line": 39,
            "match": {
              "location": "features/step_definitions/tor.rb:552"
            },
            "result": {
              "status": "passed",
              "duration": 5566480643
            }
          },
          {
            "keyword": "Then ",
            "name": "I wait until Tor is ready",
            "line": 40,
            "match": {
              "location": "features/step_definitions/common_steps.rb:710"
            },
            "result": {
              "status": "passed",
              "duration": 472008372
            }
          },
          {
            "keyword": "And ",
            "name": "tca.conf includes no bridge",
            "line": 41,
            "match": {
              "location": "features/step_definitions/tor.rb:1196"
            },
            "result": {
              "status": "passed",
              "duration": 4679445
            }
          },
          {
            "keyword": "And ",
            "name": "the \"TorConfiguration\" tps feature is not enabled and not active",
            "line": 42,
            "match": {
              "location": "features/step_definitions/usb.rb:849"
            },
            "result": {
              "status": "passed",
              "duration": 804032729
            }
          },
          {
            "keyword": "And ",
            "name": "all Internet traffic has only flowed through Tor or connectivity check service",
            "line": 43,
            "output": [
              "Warning: these queries were allowed but not needed: [\"fedoraproject.org.\"]"
            ],
            "match": {
              "location": "features/step_definitions/tor.rb:1059"
            },
            "result": {
              "status": "passed",
              "duration": 405666649
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 734228724
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 49723644
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/qt.feature",
    "id": "the-right-version-of-qt-packages-are-installed",
    "keyword": "Feature",
    "name": "The right version of Qt packages are installed",
    "description": "    We don't ship software which depends on Qt5.\n    As a Tails developer, I want to ensure we don't ship Qt5.",
    "line": 2,
    "tags": [
      {
        "name": "@source",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "the-right-version-of-qt-packages-are-installed;no-qt5-package-is-installed",
        "keyword": "Scenario",
        "name": "No Qt5 package is installed",
        "description": "",
        "line": 6,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 15339
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:552"
            },
            "result": {
              "status": "passed",
              "duration": 104175
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have the build manifest for the image under test",
            "line": 7,
            "match": {
              "location": "features/step_definitions/needed_package_updates.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 838966
            }
          },
          {
            "keyword": "Then ",
            "name": "no Qt5 package is installed",
            "line": 8,
            "match": {
              "location": "features/step_definitions/needed_package_updates.rb:27"
            },
            "result": {
              "status": "passed",
              "duration": 20704466
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:559"
            },
            "result": {
              "status": "passed",
              "duration": 77906
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 3997
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/random_seed.feature",
    "id": "random-seed",
    "keyword": "Feature",
    "name": "Random Seed",
    "description": "  As a Tails user\n  I want Tails to use secure random numbers",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "random-seed;a-random-seed-is-read-during-boot-and-written-during-boot-and-shutdown",
        "keyword": "Scenario",
        "name": "A random seed is read during boot and written during boot and shutdown",
        "description": "",
        "line": 6,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 5210
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 1754745
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 7,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 85338582
            }
          },
          {
            "keyword": "And ",
            "name": "I temporarily create a 7200 MiB disk named \"temp\"",
            "line": 8,
            "match": {
              "location": "features/step_definitions/common_steps.rb:114"
            },
            "result": {
              "status": "passed",
              "duration": 19488878
            }
          },
          {
            "keyword": "And ",
            "name": "I plug USB drive \"temp\"",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:126"
            },
            "result": {
              "status": "passed",
              "duration": 1050768760
            }
          },
          {
            "keyword": "And ",
            "name": "I write the Tails USB image to disk \"temp\"",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1794"
            },
            "result": {
              "status": "passed",
              "duration": 12904531137
            }
          },
          {
            "keyword": "Then ",
            "name": "there is no random seed on USB drive \"temp\"",
            "line": 11,
            "match": {
              "location": "features/step_definitions/random_seed.rb:31"
            },
            "result": {
              "status": "passed",
              "duration": 2549961917
            }
          },
          {
            "keyword": "When ",
            "name": "I start Tails from USB drive \"temp\" with network unplugged",
            "line": 12,
            "match": {
              "location": "features/step_definitions/common_steps.rb:235"
            },
            "result": {
              "status": "passed",
              "duration": 44414590225
            }
          },
          {
            "keyword": "Then ",
            "name": "the random seed was written multiple times on first boot",
            "line": 13,
            "match": {
              "location": "features/step_definitions/random_seed.rb:72"
            },
            "result": {
              "status": "passed",
              "duration": 260026483
            }
          },
          {
            "keyword": "And ",
            "name": "there is a random seed on USB drive \"temp\"",
            "line": 14,
            "match": {
              "location": "features/step_definitions/random_seed.rb:31"
            },
            "result": {
              "status": "passed",
              "duration": 2463232475
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session",
            "line": 15,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 6412710453
            }
          },
          {
            "keyword": "And ",
            "name": "I wait for the random seed to be updated",
            "line": 16,
            "match": {
              "location": "features/step_definitions/random_seed.rb:22"
            },
            "result": {
              "status": "passed",
              "duration": 1055030790
            }
          },
          {
            "keyword": "Then ",
            "name": "there is a random seed on USB drive \"temp\"",
            "line": 17,
            "match": {
              "location": "features/step_definitions/random_seed.rb:31"
            },
            "result": {
              "status": "passed",
              "duration": 2573882204
            }
          },
          {
            "keyword": "And ",
            "name": "the random seed is different from the previous one",
            "line": 18,
            "match": {
              "location": "features/step_definitions/random_seed.rb:65"
            },
            "result": {
              "status": "passed",
              "duration": 44483
            }
          },
          {
            "keyword": "And ",
            "name": "I shutdown Tails and wait for the computer to power off",
            "line": 19,
            "match": {
              "location": "features/step_definitions/common_steps.rb:908"
            },
            "result": {
              "status": "passed",
              "duration": 3814074526
            }
          },
          {
            "keyword": "Then ",
            "name": "there is a random seed on USB drive \"temp\"",
            "line": 20,
            "match": {
              "location": "features/step_definitions/random_seed.rb:31"
            },
            "result": {
              "status": "passed",
              "duration": 2453928884
            }
          },
          {
            "keyword": "And ",
            "name": "the random seed is different from the previous one",
            "line": 21,
            "match": {
              "location": "features/step_definitions/random_seed.rb:65"
            },
            "result": {
              "status": "passed",
              "duration": 114556
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 201588754
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 116555725
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/sane_defaults.feature",
    "id": "tails-has-a-sane-default-configuration",
    "keyword": "Feature",
    "name": "Tails has a sane default configuration",
    "description": "",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "tails-has-a-sane-default-configuration;users-are-set-up-correctly",
        "keyword": "Scenario",
        "name": "Users are set up correctly",
        "description": "",
        "line": 4,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 14025
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 1501698
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 5,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6889701245
            }
          },
          {
            "keyword": "Then ",
            "name": "the live user has been setup by live-boot",
            "line": 6,
            "match": {
              "location": "features/step_definitions/checks.rb:112"
            },
            "result": {
              "status": "passed",
              "duration": 84957132
            }
          },
          {
            "keyword": "And ",
            "name": "the live user is a member of only its own group and \"cdrom dialout floppy video plugdev netdev scanner lp lpadmin users\"",
            "line": 7,
            "match": {
              "location": "features/step_definitions/checks.rb:122"
            },
            "result": {
              "status": "passed",
              "duration": 55652192
            }
          },
          {
            "keyword": "And ",
            "name": "the live user owns its home directory which has strict permissions",
            "line": 8,
            "match": {
              "location": "features/step_definitions/checks.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 92902640
            }
          },
          {
            "keyword": "And ",
            "name": "the root user owns its home directory which has strict permissions",
            "line": 9,
            "match": {
              "location": "features/step_definitions/checks.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 108213395
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 895736949
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 22582
            }
          }
        ]
      },
      {
        "id": "tails-has-a-sane-default-configuration;no-unexpected-network-services",
        "keyword": "Scenario",
        "name": "No unexpected network services",
        "description": "",
        "line": 12,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 11
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 6812
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2394379
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 13,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 10200295591
            }
          },
          {
            "keyword": "Then ",
            "name": "no unexpected services are listening for network connections",
            "line": 14,
            "output": [
              "Service 'onion-grater' is listening on 0.0.0.0:951 but has an exception",
              "Service 'tor' is listening on 10.200.1.1:9050 but has an exception"
            ],
            "match": {
              "location": "features/step_definitions/checks.rb:177"
            },
            "result": {
              "status": "passed",
              "duration": 115639643
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 782801030
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 21950
            }
          }
        ]
      },
      {
        "id": "tails-has-a-sane-default-configuration;the-live-user-can-only-access-the-expected-local-services",
        "keyword": "Scenario",
        "name": "The live user can only access the expected local services",
        "description": "",
        "line": 16,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 6974
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2950437
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 17,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 9334171548
            }
          },
          {
            "keyword": "Then ",
            "name": "the live user can only access allowed local services",
            "line": 18,
            "output": [
              "amnesia could access tor on 127.0.0.1:5353 (UDP) as expected",
              "amnesia could access tor on 127.0.0.1:9040 (TCP) as expected",
              "amnesia could access tor on 127.0.0.1:9050 (TCP) as expected",
              "amnesia could not access tor on 127.0.0.1:9052 (TCP) as expected",
              "amnesia could access onion-grater on 0.0.0.0:951 (TCP) as expected",
              "amnesia could not access tor on 127.0.0.1:9063 (TCP) as expected",
              "amnesia could access tor on 127.0.0.1:9062 (TCP) as expected",
              "amnesia could access cupsd on 127.0.0.1:631 (TCP) as expected",
              "amnesia could access tor on 10.200.1.1:9050 (TCP) as expected"
            ],
            "match": {
              "location": "features/step_definitions/checks.rb:192"
            },
            "result": {
              "status": "passed",
              "duration": 5018069529
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 750495171
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 35937
            }
          }
        ]
      },
      {
        "id": "tails-has-a-sane-default-configuration;no-unexpected-error-messages-in-the-journal-after-booting-from-dvd",
        "keyword": "Scenario",
        "name": "No unexpected error messages in the journal after booting from DVD",
        "description": "",
        "line": 20,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 7614
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2166443
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 21,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 7000037030
            }
          },
          {
            "keyword": "Then ",
            "name": "there are no unexpected messages of priority \"err\" or higher in the journal",
            "line": 22,
            "match": {
              "location": "features/step_definitions/checks.rb:234"
            },
            "result": {
              "status": "passed",
              "duration": 58942803
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 678687208
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 25608
            }
          }
        ]
      },
      {
        "id": "tails-has-a-sane-default-configuration;no-unexpected-error-messages-in-the-journal-after-booting-from-usb-drive",
        "keyword": "Scenario",
        "name": "No unexpected error messages in the journal after booting from USB drive",
        "description": "",
        "line": 24,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 9398
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2351479
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition enabled and logged in",
            "line": 25,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 8138891982
            }
          },
          {
            "keyword": "Then ",
            "name": "there are no unexpected messages of priority \"err\" or higher in the journal",
            "line": 26,
            "match": {
              "location": "features/step_definitions/checks.rb:234"
            },
            "result": {
              "status": "passed",
              "duration": 46583277
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 982968933
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 22412
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/secrets.feature",
    "id": "using-secrets",
    "keyword": "Feature",
    "name": "Using Secrets",
    "description": "",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "using-secrets;i-can-easily-access-kdbx-files-in-/home/amnesia/persistent",
        "keyword": "Scenario",
        "name": "I can easily access kdbx files in /home/amnesia/Persistent",
        "description": "",
        "line": 4,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 10919
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2564386
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition and stopped at Tails Greeter's login screen",
            "line": 5,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 8845872211
            }
          },
          {
            "keyword": "And ",
            "name": "I enable persistence",
            "line": 6,
            "match": {
              "location": "features/step_definitions/usb.rb:728"
            },
            "result": {
              "status": "passed",
              "duration": 22428407995
            }
          },
          {
            "keyword": "And ",
            "name": "I write a file \"/home/amnesia/Persistent/Passwords.kdbx\" with contents \"\"",
            "line": 7,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1766"
            },
            "result": {
              "status": "passed",
              "duration": 6889185
            }
          },
          {
            "keyword": "And ",
            "name": "I change ownership of file \"/home/amnesia/Persistent/Passwords.kdbx\" to \"amnesia:\"",
            "line": 8,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1770"
            },
            "result": {
              "status": "passed",
              "duration": 48093406
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 7466871650
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Secrets\" via GNOME Activities Overview",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1205"
            },
            "result": {
              "status": "passed",
              "duration": 9774130460
            }
          },
          {
            "keyword": "Then ",
            "name": "Secrets tries to open \"/home/amnesia/Persistent/Passwords.kdbx\"",
            "line": 11,
            "match": {
              "location": "features/step_definitions/secrets.rb:5"
            },
            "result": {
              "status": "passed",
              "duration": 1980281958
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 936105524
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 24897
            }
          }
        ]
      },
      {
        "id": "using-secrets;i-can-open-kdbx-files-in-secrets",
        "keyword": "Scenario",
        "name": "I can open kdbx files in Secrets",
        "description": "",
        "line": 13,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 7214
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2461223
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 14,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 7094999964
            }
          },
          {
            "keyword": "And ",
            "name": "I have a \"MyPass.kdbx\" file in my home",
            "line": 15,
            "match": {
              "location": "features/step_definitions/secrets.rb:9"
            },
            "result": {
              "status": "passed",
              "duration": 8769637
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Files\" via GNOME Activities Overview",
            "line": 16,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1205"
            },
            "result": {
              "status": "passed",
              "duration": 7630818034
            }
          },
          {
            "keyword": "And ",
            "name": "I open \"MyPass.kdbx\" in Files",
            "line": 17,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1982"
            },
            "result": {
              "status": "passed",
              "duration": 5697824961
            }
          },
          {
            "keyword": "Then ",
            "name": "Secrets tries to open \"/home/amnesia/MyPass.kdbx\"",
            "line": 18,
            "match": {
              "location": "features/step_definitions/secrets.rb:5"
            },
            "result": {
              "status": "passed",
              "duration": 2564971135
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 1073458771
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 21330
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/shutdown_applet.feature",
    "id": "shutdown-buttons-in-the-system-menu",
    "keyword": "Feature",
    "name": "Shutdown buttons in the system menu",
    "description": "",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "shutdown-buttons-in-the-system-menu;i-can-shutdown-tails-via-the-system-menu",
        "keyword": "Scenario",
        "name": "I can shutdown Tails via the system menu",
        "description": "",
        "line": 4,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 13966
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 13349453
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 5,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 9836506258
            }
          },
          {
            "keyword": "When ",
            "name": "I open the system menu",
            "line": 6,
            "match": {
              "location": "features/step_definitions/common_steps.rb:923"
            },
            "result": {
              "status": "passed",
              "duration": 2431196471
            }
          },
          {
            "keyword": "And ",
            "name": "I request a shutdown using the system menu",
            "line": 7,
            "match": {
              "location": "features/step_definitions/common_steps.rb:927"
            },
            "result": {
              "status": "passed",
              "duration": 3770765499
            }
          },
          {
            "keyword": "Then ",
            "name": "Tails eventually shuts down",
            "line": 8,
            "match": {
              "location": "features/step_definitions/common_steps.rb:890"
            },
            "result": {
              "status": "passed",
              "duration": 5248153544
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 492345786
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 17704
            }
          }
        ]
      },
      {
        "id": "shutdown-buttons-in-the-system-menu;i-can-reboot-tails-via-the-system-menu",
        "keyword": "Scenario",
        "name": "I can reboot Tails via the system menu",
        "description": "",
        "line": 11,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 10
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 15469
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2422791
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 12,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 9401881807
            }
          },
          {
            "keyword": "When ",
            "name": "I open the system menu",
            "line": 13,
            "match": {
              "location": "features/step_definitions/common_steps.rb:923"
            },
            "result": {
              "status": "passed",
              "duration": 2579278484
            }
          },
          {
            "keyword": "When ",
            "name": "I request a reboot using the system menu",
            "line": 14,
            "match": {
              "location": "features/step_definitions/common_steps.rb:927"
            },
            "result": {
              "status": "passed",
              "duration": 3576618540
            }
          },
          {
            "keyword": "Then ",
            "name": "Tails eventually restarts",
            "line": 15,
            "match": {
              "location": "features/step_definitions/common_steps.rb:890"
            },
            "result": {
              "status": "passed",
              "duration": 35507818572
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 3482094109
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 22722
            }
          }
        ]
      },
      {
        "id": "shutdown-buttons-in-the-system-menu;the-logout-button-is-not-visible",
        "keyword": "Scenario",
        "name": "The logout button is not visible",
        "description": "",
        "line": 17,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 12241
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2153047
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 18,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 9491940674
            }
          },
          {
            "keyword": "When ",
            "name": "I open the system menu",
            "line": 19,
            "match": {
              "location": "features/step_definitions/common_steps.rb:923"
            },
            "result": {
              "status": "passed",
              "duration": 2483381215
            }
          },
          {
            "keyword": "Then ",
            "name": "the logout button is not visible",
            "line": 20,
            "match": {
              "location": "features/step_definitions/common_steps.rb:942"
            },
            "result": {
              "status": "passed",
              "duration": 3842299208
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 845559277
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 23534
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/ssh.feature",
    "id": "logging-in-via-ssh",
    "keyword": "Feature",
    "name": "Logging in via SSH",
    "description": "  As a Tails user\n  When I connect to SSH servers on the Internet\n  all Internet traffic should flow only through Tor",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 7904
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2171311
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 1364517
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 9399418477
            }
          }
        ]
      },
      {
        "id": "logging-in-via-ssh;connecting-to-an-ssh-server-on-the-internet-works-and-uses-the-default-socksport",
        "keyword": "Scenario",
        "name": "Connecting to an SSH server on the Internet works and uses the default SocksPort",
        "description": "",
        "line": 11,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 10
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I monitor the network connections of SSH",
            "line": 12,
            "match": {
              "location": "features/step_definitions/tor.rb:354"
            },
            "result": {
              "status": "passed",
              "duration": 39862985
            }
          },
          {
            "keyword": "And ",
            "name": "I have the SSH key pair for an SSH server",
            "line": 13,
            "match": {
              "location": "features/step_definitions/ssh.rb:37"
            },
            "result": {
              "status": "passed",
              "duration": 248896385
            }
          },
          {
            "keyword": "When ",
            "name": "I connect to an SSH server on the Internet",
            "line": 14,
            "match": {
              "location": "features/step_definitions/ssh.rb:87"
            },
            "result": {
              "status": "passed",
              "duration": 7136199952
            }
          },
          {
            "keyword": "Then ",
            "name": "I have successfully logged into the SSH server",
            "line": 15,
            "match": {
              "location": "features/step_definitions/ssh.rb:115"
            },
            "result": {
              "status": "passed",
              "duration": 121569541
            }
          },
          {
            "keyword": "And ",
            "name": "I see that SSH is properly stream isolated",
            "line": 16,
            "match": {
              "location": "features/step_definitions/tor.rb:366"
            },
            "result": {
              "status": "passed",
              "duration": 6300607
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:535"
            },
            "result": {
              "status": "passed",
              "duration": 304478605
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 885079879
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 103865
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 12354
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2943532
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 2827737
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 9203579338
            }
          }
        ]
      },
      {
        "id": "logging-in-via-ssh;connecting-to-an-ssh-server-on-the-lan",
        "keyword": "Scenario",
        "name": "Connecting to an SSH server on the LAN",
        "description": "",
        "line": 19,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 18
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have the SSH key pair for an SSH server",
            "line": 20,
            "match": {
              "location": "features/step_definitions/ssh.rb:37"
            },
            "result": {
              "status": "passed",
              "duration": 130168168
            }
          },
          {
            "keyword": "And ",
            "name": "an SSH server is running on the LAN",
            "line": 21,
            "match": {
              "location": "features/step_definitions/ssh.rb:78"
            },
            "result": {
              "status": "passed",
              "duration": 86477128
            }
          },
          {
            "keyword": "When ",
            "name": "I connect to an SSH server on the LAN",
            "line": 22,
            "match": {
              "location": "features/step_definitions/ssh.rb:87"
            },
            "result": {
              "status": "passed",
              "duration": 5341109515
            }
          },
          {
            "keyword": "Then ",
            "name": "I am prompted to verify the SSH fingerprint for the SSH server",
            "line": 23,
            "match": {
              "location": "features/step_definitions/ssh.rb:61"
            },
            "result": {
              "status": "passed",
              "duration": 1582177071
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:535"
            },
            "result": {
              "status": "passed",
              "duration": 211682326
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 563304142
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 605931
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/thunderbird.feature",
    "id": "thunderbird-email-client",
    "keyword": "Feature",
    "name": "Thunderbird email client",
    "description": "  As a Tails user\n  I may want to use an email client",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      },
      {
        "name": "@check_tor_leaks",
        "line": 1
      }
    ],
    "elements": [
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 6,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 11421
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2339385
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 1471857
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in with an administration password and the network is connected",
            "line": 7,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 77385219725
            }
          },
          {
            "keyword": "And ",
            "name": "I have not configured an email account yet",
            "line": 8,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:36"
            },
            "result": {
              "status": "passed",
              "duration": 36887551
            }
          },
          {
            "keyword": "And ",
            "name": "Thunderbird is installed",
            "line": 9,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:289"
            },
            "result": {
              "status": "passed",
              "duration": 51688464979
            }
          },
          {
            "keyword": "When ",
            "name": "I start Thunderbird",
            "line": 10,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:23"
            },
            "result": {
              "status": "passed",
              "duration": 1819633290
            }
          },
          {
            "keyword": "Then ",
            "name": "I am prompted to setup an email account",
            "line": 11,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:44"
            },
            "result": {
              "status": "passed",
              "duration": 109605035
            }
          }
        ]
      },
      {
        "id": "thunderbird-email-client;no-add-ons-are-installed",
        "keyword": "Scenario",
        "name": "No add-ons are installed",
        "description": "",
        "line": 13,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I cancel setting up an email account",
            "line": 14,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:48"
            },
            "result": {
              "status": "passed",
              "duration": 2277639640
            }
          },
          {
            "keyword": "When ",
            "name": "I open Thunderbird's Add-ons Manager",
            "line": 15,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:53"
            },
            "result": {
              "status": "passed",
              "duration": 1454666356
            }
          },
          {
            "keyword": "And ",
            "name": "I open the Extensions tab",
            "line": 16,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:67"
            },
            "result": {
              "status": "passed",
              "duration": 1028501850
            }
          },
          {
            "keyword": "Then ",
            "name": "I see that no add-ons are enabled in Thunderbird",
            "line": 17,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:81"
            },
            "result": {
              "status": "passed",
              "duration": 10198418499
            }
          },
          {
            "keyword": "And ",
            "name": "no unexpected connection has leaked from Thunderbird",
            "line": 18,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:251"
            },
            "result": {
              "status": "passed",
              "duration": 364019376
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:535"
            },
            "result": {
              "status": "passed",
              "duration": 1488416004
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 897255104
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 9058917
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 6,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 12443
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2687977
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 1840154
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in with an administration password and the network is connected",
            "line": 7,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 9239998727
            }
          },
          {
            "keyword": "And ",
            "name": "I have not configured an email account yet",
            "line": 8,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:36"
            },
            "result": {
              "status": "passed",
              "duration": 62881528
            }
          },
          {
            "keyword": "And ",
            "name": "Thunderbird is installed",
            "line": 9,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:289"
            },
            "result": {
              "status": "passed",
              "duration": 51836532218
            }
          },
          {
            "keyword": "When ",
            "name": "I start Thunderbird",
            "line": 10,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:23"
            },
            "result": {
              "status": "passed",
              "duration": 1816756232
            }
          },
          {
            "keyword": "Then ",
            "name": "I am prompted to setup an email account",
            "line": 11,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:44"
            },
            "result": {
              "status": "passed",
              "duration": 842501375
            }
          }
        ]
      },
      {
        "id": "thunderbird-email-client;i-can-send-emails,-and-receive-emails-over-imap",
        "keyword": "Scenario",
        "name": "I can send emails, and receive emails over IMAP",
        "description": "",
        "line": 20,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "When ",
            "name": "I enter my email credentials into the autoconfiguration wizard",
            "line": 21,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:85"
            },
            "result": {
              "status": "passed",
              "duration": 32883277452
            }
          },
          {
            "keyword": "Then ",
            "name": "the autoconfiguration wizard's choice for the incoming server is secure IMAP",
            "line": 22,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:109"
            },
            "result": {
              "status": "passed",
              "duration": 304838256
            }
          },
          {
            "keyword": "And ",
            "name": "the autoconfiguration wizard's choice for the outgoing server is secure SMTP",
            "line": 23,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:109"
            },
            "result": {
              "status": "passed",
              "duration": 147614075
            }
          },
          {
            "keyword": "When ",
            "name": "I accept the autoconfiguration wizard's configuration",
            "line": 24,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:132"
            },
            "result": {
              "status": "passed",
              "duration": 26850365312
            }
          },
          {
            "keyword": "And ",
            "name": "I send an email to myself",
            "line": 25,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:167"
            },
            "result": {
              "status": "passed",
              "duration": 5516541358
            }
          },
          {
            "keyword": "And ",
            "name": "I fetch my email",
            "line": 26,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:127"
            },
            "result": {
              "status": "passed",
              "duration": 1251698754
            }
          },
          {
            "keyword": "Then ",
            "name": "I can find the email I sent to myself in my inbox",
            "line": 27,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:188"
            },
            "result": {
              "status": "passed",
              "duration": 5059530856
            }
          },
          {
            "keyword": "And ",
            "name": "the system only established connections with my email server",
            "line": 28,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:263"
            },
            "result": {
              "status": "passed",
              "duration": 497398565
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:535"
            },
            "result": {
              "status": "passed",
              "duration": 1591711990
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 819860863
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 8722671
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/tor_connection.feature",
    "id": "tor-connection-helps-the-user-in-connecting-to-tor",
    "keyword": "Feature",
    "name": "Tor Connection helps the user in connecting to Tor",
    "description": "    As a Tails user\n    I want to use Tor",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 6,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 15880
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2917986
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 7,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 18736055122
            }
          }
        ]
      },
      {
        "id": "tor-connection-helps-the-user-in-connecting-to-tor;starting-tor-connection-before-connecting-to-wi-fi",
        "keyword": "Scenario",
        "name": "Starting Tor Connection before connecting to Wi-Fi",
        "description": "",
        "line": 9,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "When ",
            "name": "I start \"Tor Connection\" via GNOME Activities Overview",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1205"
            },
            "result": {
              "status": "passed",
              "duration": 8492084984
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant reports that I am not connected to a local network",
            "line": 11,
            "match": {
              "location": "features/step_definitions/tor.rb:1247"
            },
            "result": {
              "status": "passed",
              "duration": 1232200940
            }
          },
          {
            "keyword": "When ",
            "name": "I plug a Wi-Fi adapter",
            "line": 12,
            "match": {
              "location": "features/step_definitions/tor.rb:1250"
            },
            "result": {
              "status": "passed",
              "duration": 244584068
            }
          },
          {
            "keyword": "Then ",
            "name": "Tor Connection suggests me to connect to Wi-Fi",
            "line": 13,
            "match": {
              "location": "features/step_definitions/tor.rb:1254"
            },
            "result": {
              "status": "passed",
              "duration": 874804186
            }
          },
          {
            "keyword": "And ",
            "name": "I click on the Wi-Fi settings",
            "line": 14,
            "match": {
              "location": "features/step_definitions/tor.rb:1259"
            },
            "result": {
              "status": "passed",
              "duration": 1102913843
            }
          },
          {
            "keyword": "And ",
            "name": "The Wi-Fi settings are displayed",
            "line": 15,
            "match": {
              "location": "features/step_definitions/tor.rb:1263"
            },
            "result": {
              "status": "passed",
              "duration": 1855309665
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 716570087
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 24746
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 6,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 8496
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2763910
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 7,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6215369634
            }
          }
        ]
      },
      {
        "id": "tor-connection-helps-the-user-in-connecting-to-tor;bridges-are-not-enabled-in-automatic-mode-when-going-back-from-hiding-tor",
        "keyword": "Scenario",
        "name": "Bridges are not enabled in automatic mode when going back from hiding Tor",
        "description": "",
        "line": 43,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 42
          }
        ],
        "comments": [
          {
            "value": "# regression test for #18546",
            "line": 41
          }
        ],
        "steps": [
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 44,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 25198822
            }
          },
          {
            "keyword": "And ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 45,
            "match": {
              "location": "features/step_definitions/tor.rb:409"
            },
            "result": {
              "status": "passed",
              "duration": 1799346901
            }
          },
          {
            "keyword": "And ",
            "name": "I look at the hide mode but then I go back",
            "line": 46,
            "match": {
              "location": "features/step_definitions/tor.rb:556"
            },
            "result": {
              "status": "passed",
              "duration": 3619829719
            }
          },
          {
            "keyword": "And ",
            "name": "I choose to connect to Tor automatically",
            "line": 47,
            "match": {
              "location": "features/step_definitions/tor.rb:548"
            },
            "result": {
              "status": "passed",
              "duration": 1269314457
            }
          },
          {
            "keyword": "Then ",
            "name": "Tor Connection does not propose me to use Tor bridges",
            "line": 48,
            "match": {
              "location": "features/step_definitions/tor.rb:899"
            },
            "result": {
              "status": "passed",
              "duration": 89048142
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 614135346
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 19596
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 6,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 8827
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2614350
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 7,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6205519849
            }
          }
        ]
      },
      {
        "id": "tor-connection-helps-the-user-in-connecting-to-tor;i-can-use-a-network-with-captive-portal",
        "keyword": "Scenario",
        "name": "I can use a network with captive portal",
        "description": "",
        "line": 50,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "the Tor network and default bridges are blocked",
            "line": 51,
            "match": {
              "location": "features/step_definitions/tor.rb:1120"
            },
            "result": {
              "status": "passed",
              "duration": 967526885
            }
          },
          {
            "keyword": "And ",
            "name": "the network is plugged",
            "line": 52,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 33208461
            }
          },
          {
            "keyword": "And ",
            "name": "I make sure time sync before Tor connects indicates a captive portal",
            "line": 53,
            "match": {
              "location": "features/step_definitions/time_syncing.rb:54"
            },
            "result": {
              "status": "passed",
              "duration": 1116745978
            }
          },
          {
            "keyword": "And ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 54,
            "match": {
              "location": "features/step_definitions/tor.rb:409"
            },
            "result": {
              "status": "passed",
              "duration": 842218716
            }
          },
          {
            "keyword": "When ",
            "name": "I choose to connect to Tor automatically",
            "line": 55,
            "match": {
              "location": "features/step_definitions/tor.rb:548"
            },
            "result": {
              "status": "passed",
              "duration": 1334575631
            }
          },
          {
            "keyword": "And ",
            "name": "I click \"Connect to Tor\"",
            "line": 56,
            "match": {
              "location": "features/step_definitions/tor.rb:961"
            },
            "result": {
              "status": "passed",
              "duration": 1089328786
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant fails to connect to Tor",
            "line": 57,
            "match": {
              "location": "features/step_definitions/tor.rb:462"
            },
            "result": {
              "status": "passed",
              "duration": 25995852129
            }
          },
          {
            "keyword": "And ",
            "name": "the Tor Connection Assistant knows that it's not the time sync that failed",
            "line": 58,
            "match": {
              "location": "features/step_definitions/tor.rb:474"
            },
            "result": {
              "status": "passed",
              "duration": 10719049520
            }
          },
          {
            "keyword": "And ",
            "name": "the Tor Connection Assistant knows that there might be a captive portal",
            "line": 59,
            "match": {
              "location": "features/step_definitions/tor.rb:480"
            },
            "result": {
              "status": "passed",
              "duration": 96728750
            }
          },
          {
            "keyword": "When ",
            "name": "I open the Unsafe Browser from Tor Connection",
            "line": 60,
            "match": {
              "location": "features/step_definitions/tor.rb:1215"
            },
            "result": {
              "status": "passed",
              "duration": 4458902280
            }
          },
          {
            "keyword": "And ",
            "name": "I log-in to the Captive Portal",
            "line": 61,
            "match": {
              "location": "features/step_definitions/browser.rb:471"
            },
            "result": {
              "status": "passed",
              "duration": 4145171141
            }
          },
          {
            "keyword": "And ",
            "name": "I close the Unsafe Browser",
            "line": 62,
            "match": {
              "location": "features/step_definitions/browser.rb:118"
            },
            "result": {
              "status": "passed",
              "duration": 120944343
            }
          },
          {
            "keyword": "And ",
            "name": "the Tor network and default bridges are unblocked",
            "line": 63,
            "match": {
              "location": "features/step_definitions/tor.rb:1120"
            },
            "result": {
              "status": "passed",
              "duration": 920375759
            }
          },
          {
            "keyword": "And ",
            "name": "I allow time sync before Tor connects to work again",
            "line": 64,
            "match": {
              "location": "features/step_definitions/time_syncing.rb:48"
            },
            "result": {
              "status": "passed",
              "duration": 44491574
            }
          },
          {
            "keyword": "And ",
            "name": "I click \"Connect to Tor\"",
            "line": 65,
            "match": {
              "location": "features/step_definitions/tor.rb:961"
            },
            "result": {
              "status": "passed",
              "duration": 1097532050
            }
          },
          {
            "keyword": "Then ",
            "name": "I wait until Tor is ready",
            "line": 66,
            "match": {
              "location": "features/step_definitions/common_steps.rb:710"
            },
            "result": {
              "status": "passed",
              "duration": 4762110023
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 712784681
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 668919
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/tor_enforcement.feature",
    "id": "the-tor-enforcement-is-effective",
    "keyword": "Feature",
    "name": "The Tor enforcement is effective",
    "description": "  As a Tails user\n  I want all direct Internet connections I do by mistake or applications do by misconfiguration or buggy leaks to be blocked\n  And as a Tails developer\n  I want to ensure that the automated test suite detects firewall leaks reliably",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "the-tor-enforcement-is-effective;the-firewall-configuration-is-very-restrictive",
        "keyword": "Scenario",
        "name": "The firewall configuration is very restrictive",
        "description": "",
        "line": 8,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 7975
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2616164
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 9,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 9952920997
            }
          },
          {
            "keyword": "Then ",
            "name": "the firewall's policy is to drop all IPv4 traffic",
            "line": 10,
            "match": {
              "location": "features/step_definitions/tor.rb:64"
            },
            "result": {
              "status": "passed",
              "duration": 60237172
            }
          },
          {
            "keyword": "And ",
            "name": "the firewall is configured to only allow the clearnet and debian-tor users to connect directly to the Internet over IPv4",
            "line": 11,
            "match": {
              "location": "features/step_definitions/tor.rb:74"
            },
            "result": {
              "status": "passed",
              "duration": 115662894
            }
          },
          {
            "keyword": "And ",
            "name": "the firewall's NAT rules only redirect traffic for the Unsafe Browser, Tor's TransPort, and DNSPort",
            "line": 12,
            "match": {
              "location": "features/step_definitions/tor.rb:145"
            },
            "result": {
              "status": "passed",
              "duration": 37325970
            }
          },
          {
            "keyword": "And ",
            "name": "the firewall is configured to block all external IPv6 traffic",
            "line": 13,
            "match": {
              "location": "features/step_definitions/tor.rb:216"
            },
            "result": {
              "status": "passed",
              "duration": 49608785
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 882789554
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 23394
            }
          }
        ]
      },
      {
        "id": "the-tor-enforcement-is-effective;anti-test:-detecting-tcp-leaks-from-the-unsafe-browser-with-the-firewall-leak-detector",
        "keyword": "Scenario",
        "name": "Anti test: Detecting TCP leaks from the Unsafe Browser with the firewall leak detector",
        "description": "",
        "line": 16,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@doc",
            "line": 15
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 10920
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2677999
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 17,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 9286221465
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 18,
            "match": {
              "location": "features/step_definitions/common_steps.rb:188"
            },
            "result": {
              "status": "passed",
              "duration": 3099796
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully start the Unsafe Browser",
            "line": 19,
            "match": {
              "location": "features/step_definitions/browser.rb:110"
            },
            "result": {
              "status": "passed",
              "duration": 6021265883
            }
          },
          {
            "keyword": "And ",
            "name": "I open the Tails homepage in the Unsafe Browser",
            "line": 20,
            "match": {
              "location": "features/step_definitions/browser.rb:365"
            },
            "result": {
              "status": "passed",
              "duration": 6735639498
            }
          },
          {
            "keyword": "And ",
            "name": "the Tails homepage loads in the Unsafe Browser",
            "line": 21,
            "match": {
              "location": "features/step_definitions/unsafe_browser.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 327736255
            }
          },
          {
            "keyword": "Then ",
            "name": "the firewall leak detector has detected leaks",
            "line": 22,
            "match": {
              "location": "features/step_definitions/firewall_leaks.rb:1"
            },
            "result": {
              "status": "passed",
              "duration": 137060346
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 627361670
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 54007737
            }
          }
        ]
      },
      {
        "id": "the-tor-enforcement-is-effective;anti-test:-detecting-tcp-leaks-of-dns-lookups-with-the-firewall-leak-detector",
        "keyword": "Scenario",
        "name": "Anti test: Detecting TCP leaks of DNS lookups with the firewall leak detector",
        "description": "",
        "line": 24,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 49984
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2717844
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 25,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 9173433555
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 26,
            "match": {
              "location": "features/step_definitions/common_steps.rb:188"
            },
            "result": {
              "status": "passed",
              "duration": 3285033
            }
          },
          {
            "keyword": "And ",
            "name": "I disable Tails' firewall",
            "line": 27,
            "match": {
              "location": "features/step_definitions/firewall_leaks.rb:7"
            },
            "result": {
              "status": "passed",
              "duration": 99989231
            }
          },
          {
            "keyword": "When ",
            "name": "I do a TCP DNS lookup of \"torproject.org\"",
            "line": 28,
            "match": {
              "location": "features/step_definitions/firewall_leaks.rb:19"
            },
            "result": {
              "status": "passed",
              "duration": 138165247
            }
          },
          {
            "keyword": "Then ",
            "name": "the firewall leak detector has detected leaks",
            "line": 29,
            "match": {
              "location": "features/step_definitions/firewall_leaks.rb:1"
            },
            "result": {
              "status": "passed",
              "duration": 119704551
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 562210945
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 57672686
            }
          }
        ]
      },
      {
        "id": "the-tor-enforcement-is-effective;anti-test:-detecting-udp-leaks-of-dns-lookups-with-the-firewall-leak-detector",
        "keyword": "Scenario",
        "name": "Anti test: Detecting UDP leaks of DNS lookups with the firewall leak detector",
        "description": "",
        "line": 31,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 16780
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2619630
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 32,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 9134898328
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 33,
            "match": {
              "location": "features/step_definitions/common_steps.rb:188"
            },
            "result": {
              "status": "passed",
              "duration": 3184634
            }
          },
          {
            "keyword": "And ",
            "name": "I disable Tails' firewall",
            "line": 34,
            "match": {
              "location": "features/step_definitions/firewall_leaks.rb:7"
            },
            "result": {
              "status": "passed",
              "duration": 126139931
            }
          },
          {
            "keyword": "When ",
            "name": "I do a UDP DNS lookup of \"torproject.org\"",
            "line": 35,
            "match": {
              "location": "features/step_definitions/firewall_leaks.rb:25"
            },
            "result": {
              "status": "passed",
              "duration": 155264861
            }
          },
          {
            "keyword": "Then ",
            "name": "the firewall leak detector has detected leaks",
            "line": 36,
            "match": {
              "location": "features/step_definitions/firewall_leaks.rb:1"
            },
            "result": {
              "status": "passed",
              "duration": 128204074
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 586789811
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 43157635
            }
          }
        ]
      },
      {
        "id": "the-tor-enforcement-is-effective;anti-test:-detecting-icmp-leaks-of-ping-with-the-firewall-leak-detector",
        "keyword": "Scenario",
        "name": "Anti test: Detecting ICMP leaks of ping with the firewall leak detector",
        "description": "",
        "line": 38,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 14196
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2468237
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 39,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 9188946695
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 40,
            "match": {
              "location": "features/step_definitions/common_steps.rb:188"
            },
            "result": {
              "status": "passed",
              "duration": 3424672
            }
          },
          {
            "keyword": "And ",
            "name": "I disable Tails' firewall",
            "line": 41,
            "match": {
              "location": "features/step_definitions/firewall_leaks.rb:7"
            },
            "result": {
              "status": "passed",
              "duration": 92749447
            }
          },
          {
            "keyword": "When ",
            "name": "I send some ICMP pings",
            "line": 42,
            "match": {
              "location": "features/step_definitions/firewall_leaks.rb:30"
            },
            "result": {
              "status": "passed",
              "duration": 4055473446
            }
          },
          {
            "keyword": "Then ",
            "name": "the firewall leak detector has detected leaks",
            "line": 43,
            "match": {
              "location": "features/step_definitions/firewall_leaks.rb:1"
            },
            "result": {
              "status": "passed",
              "duration": 102197833
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 664330426
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 54793524
            }
          }
        ]
      },
      {
        "id": "the-tor-enforcement-is-effective;the-tor-enforcement-is-effective-at-blocking-untorified-udp-connection-attempts",
        "keyword": "Scenario",
        "name": "The Tor enforcement is effective at blocking untorified UDP connection attempts",
        "description": "",
        "line": 46,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 45
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 15550
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 3166510
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 2102915
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 47,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 9190705990
            }
          },
          {
            "keyword": "When ",
            "name": "I open an untorified UDP connection to 1.2.3.4 on port 42",
            "line": 48,
            "match": {
              "location": "features/step_definitions/tor.rb:250"
            },
            "result": {
              "status": "passed",
              "duration": 183295722
            }
          },
          {
            "keyword": "Then ",
            "name": "the untorified connection fails",
            "line": 49,
            "match": {
              "location": "features/step_definitions/tor.rb:280"
            },
            "result": {
              "status": "passed",
              "duration": 40404
            }
          },
          {
            "keyword": "And ",
            "name": "the untorified connection is logged as dropped by the firewall",
            "line": 50,
            "match": {
              "location": "features/step_definitions/tor.rb:299"
            },
            "result": {
              "status": "passed",
              "duration": 79399932
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:535"
            },
            "result": {
              "status": "passed",
              "duration": 291470240
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 891625201
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 91770
            }
          }
        ]
      },
      {
        "id": "the-tor-enforcement-is-effective;the-tor-enforcement-is-effective-at-blocking-untorified-icmp-connection-attempts",
        "keyword": "Scenario",
        "name": "The Tor enforcement is effective at blocking untorified ICMP connection attempts",
        "description": "",
        "line": 53,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 52
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 155060
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 14626840
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 3995237
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 54,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 9368457355
            }
          },
          {
            "keyword": "When ",
            "name": "I open an untorified ICMP connection to 1.2.3.4",
            "line": 55,
            "match": {
              "location": "features/step_definitions/tor.rb:250"
            },
            "result": {
              "status": "passed",
              "duration": 5291707048
            }
          },
          {
            "keyword": "Then ",
            "name": "the untorified connection fails",
            "line": 56,
            "match": {
              "location": "features/step_definitions/tor.rb:280"
            },
            "result": {
              "status": "passed",
              "duration": 40145
            }
          },
          {
            "keyword": "And ",
            "name": "the untorified connection is logged as dropped by the firewall",
            "line": 57,
            "match": {
              "location": "features/step_definitions/tor.rb:299"
            },
            "result": {
              "status": "passed",
              "duration": 73853025
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:535"
            },
            "result": {
              "status": "passed",
              "duration": 218854676
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 687148873
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 67546
            }
          }
        ]
      },
      {
        "id": "the-tor-enforcement-is-effective;the-system-dns-is-always-set-up-to-use-tor's-dnsport",
        "keyword": "Scenario",
        "name": "The system DNS is always set up to use Tor's DNSPort",
        "description": "",
        "line": 59,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 50214
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2622856
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 60,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6240518785
            }
          },
          {
            "keyword": "And ",
            "name": "the system DNS is using the local DNS resolver",
            "line": 61,
            "match": {
              "location": "features/step_definitions/tor.rb:310"
            },
            "result": {
              "status": "passed",
              "duration": 7058875
            }
          },
          {
            "keyword": "And ",
            "name": "the network is plugged",
            "line": 62,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 43809930
            }
          },
          {
            "keyword": "And ",
            "name": "I successfully configure Tor",
            "line": 63,
            "match": {
              "location": "features/step_definitions/common_steps.rb:680"
            },
            "result": {
              "status": "passed",
              "duration": 9164798946
            }
          },
          {
            "keyword": "Then ",
            "name": "the system DNS is still using the local DNS resolver",
            "line": 64,
            "match": {
              "location": "features/step_definitions/tor.rb:310"
            },
            "result": {
              "status": "passed",
              "duration": 5785458
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 688739742
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 19757
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/tor_stream_isolation.feature",
    "id": "tor-stream-isolation-is-effective",
    "keyword": "Feature",
    "name": "Tor stream isolation is effective",
    "description": "  As a Tails user\n  I want my Tor streams to be sensibly isolated from each other to prevent identity correlation",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      },
      {
        "name": "@check_tor_leaks",
        "line": 1
      }
    ],
    "elements": [
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 6,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 8507
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2707684
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 1761227
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 7,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 9234200630
            }
          }
        ]
      },
      {
        "id": "tor-stream-isolation-is-effective;tails-security-check-is-using-the-tails-specific-socksport",
        "keyword": "Scenario",
        "name": "tails-security-check is using the Tails-specific SocksPort",
        "description": "",
        "line": 10,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 9
          }
        ],
        "steps": [
          {
            "keyword": "When ",
            "name": "I monitor the network connections of tails-security-check",
            "line": 11,
            "match": {
              "location": "features/step_definitions/tor.rb:354"
            },
            "result": {
              "status": "passed",
              "duration": 38737613
            }
          },
          {
            "keyword": "And ",
            "name": "I re-run tails-security-check",
            "line": 12,
            "match": {
              "location": "features/step_definitions/tor.rb:385"
            },
            "result": {
              "status": "passed",
              "duration": 105566548
            }
          },
          {
            "keyword": "Then ",
            "name": "I see that tails-security-check is properly stream isolated after 10 seconds",
            "line": 13,
            "match": {
              "location": "features/step_definitions/tor.rb:366"
            },
            "result": {
              "status": "passed",
              "duration": 10005428726
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:535"
            },
            "result": {
              "status": "passed",
              "duration": 256399198
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 782507085
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 77334
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 6,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 9188
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2647901
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 1606108
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 7,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 9215696173
            }
          }
        ]
      },
      {
        "id": "tor-stream-isolation-is-effective;htpdate-is-using-the-tails-specific-socksport",
        "keyword": "Scenario",
        "name": "htpdate is using the Tails-specific SocksPort",
        "description": "",
        "line": 16,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 15
          }
        ],
        "steps": [
          {
            "keyword": "When ",
            "name": "I monitor the network connections of htpdate",
            "line": 17,
            "match": {
              "location": "features/step_definitions/tor.rb:354"
            },
            "result": {
              "status": "passed",
              "duration": 50200759
            }
          },
          {
            "keyword": "And ",
            "name": "I re-run htpdate",
            "line": 18,
            "match": {
              "location": "features/step_definitions/tor.rb:392"
            },
            "result": {
              "status": "passed",
              "duration": 2225417821
            }
          },
          {
            "keyword": "Then ",
            "name": "I see that htpdate is properly stream isolated",
            "line": 19,
            "match": {
              "location": "features/step_definitions/tor.rb:366"
            },
            "result": {
              "status": "passed",
              "duration": 6631137
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:535"
            },
            "result": {
              "status": "passed",
              "duration": 237806243
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 921704368
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 73026
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 6,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 14026
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2729315
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 1605867
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 7,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 9199410545
            }
          }
        ]
      },
      {
        "id": "tor-stream-isolation-is-effective;tails-upgrade-frontend-wrapper-is-using-the-tails-specific-socksport",
        "keyword": "Scenario",
        "name": "tails-upgrade-frontend-wrapper is using the Tails-specific SocksPort",
        "description": "",
        "line": 22,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 21
          }
        ],
        "steps": [
          {
            "keyword": "When ",
            "name": "I monitor the network connections of tails-upgrade-frontend-wrapper",
            "line": 23,
            "match": {
              "location": "features/step_definitions/tor.rb:354"
            },
            "result": {
              "status": "passed",
              "duration": 45358341
            }
          },
          {
            "keyword": "And ",
            "name": "I re-run tails-upgrade-frontend-wrapper",
            "line": 24,
            "match": {
              "location": "features/step_definitions/tor.rb:399"
            },
            "result": {
              "status": "passed",
              "duration": 31547410525
            }
          },
          {
            "keyword": "Then ",
            "name": "I see that tails-upgrade-frontend-wrapper is properly stream isolated",
            "line": 25,
            "match": {
              "location": "features/step_definitions/tor.rb:366"
            },
            "result": {
              "status": "passed",
              "duration": 5217819
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:535"
            },
            "result": {
              "status": "passed",
              "duration": 290105161
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 943634481
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 78416
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 6,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 12132
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2479448
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 1654397
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 7,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 9241954106
            }
          }
        ]
      },
      {
        "id": "tor-stream-isolation-is-effective;the-tor-browser-is-using-the-web-browser-specific-socksport",
        "keyword": "Scenario",
        "name": "The Tor Browser is using the web browser-specific SocksPort",
        "description": "",
        "line": 27,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "When ",
            "name": "I monitor the network connections of Tor Browser",
            "line": 28,
            "match": {
              "location": "features/step_definitions/tor.rb:354"
            },
            "result": {
              "status": "passed",
              "duration": 47160998
            }
          },
          {
            "keyword": "And ",
            "name": "I start the Tor Browser",
            "line": 29,
            "match": {
              "location": "features/step_definitions/browser.rb:493"
            },
            "result": {
              "status": "passed",
              "duration": 8463246720
            }
          },
          {
            "keyword": "And ",
            "name": "I open the Tails homepage in the Tor Browser",
            "line": 30,
            "match": {
              "location": "features/step_definitions/browser.rb:365"
            },
            "result": {
              "status": "passed",
              "duration": 7002525535
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Browser loads the Tails homepage",
            "line": 31,
            "match": {
              "location": "features/step_definitions/browser.rb:604"
            },
            "result": {
              "status": "passed",
              "duration": 274781168
            }
          },
          {
            "keyword": "And ",
            "name": "I see that Tor Browser is properly stream isolated",
            "line": 32,
            "match": {
              "location": "features/step_definitions/tor.rb:366"
            },
            "result": {
              "status": "passed",
              "duration": 36175463
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:535"
            },
            "result": {
              "status": "passed",
              "duration": 299834121
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 865410850
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 207328
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/torified_browsing.feature",
    "id": "browsing-the-web-using-the-tor-browser",
    "keyword": "Feature",
    "name": "Browsing the web using the Tor Browser",
    "description": "  As a Tails user\n  when I browse the web using the Tor Browser\n  all Internet traffic should flow only through Tor",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "browsing-the-web-using-the-tor-browser;the-tor-browser-cannot-access-the-lan",
        "keyword": "Scenario",
        "name": "The Tor Browser cannot access the LAN",
        "description": "",
        "line": 7,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 10840
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2488033
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 9306837011
            }
          },
          {
            "keyword": "And ",
            "name": "a web server is running on the LAN",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1331"
            },
            "result": {
              "status": "passed",
              "duration": 1018124038
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:188"
            },
            "result": {
              "status": "passed",
              "duration": 2160732
            }
          },
          {
            "keyword": "When ",
            "name": "I start the Tor Browser",
            "line": 11,
            "match": {
              "location": "features/step_definitions/browser.rb:493"
            },
            "result": {
              "status": "passed",
              "duration": 7041926197
            }
          },
          {
            "keyword": "And ",
            "name": "I open a page on the LAN web server in the Tor Browser",
            "line": 12,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1400"
            },
            "result": {
              "status": "passed",
              "duration": 3523266671
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Browser shows the \"Unable to connect\" error",
            "line": 13,
            "match": {
              "location": "features/step_definitions/browser.rb:377"
            },
            "result": {
              "status": "passed",
              "duration": 130377839
            }
          },
          {
            "keyword": "And ",
            "name": "no traffic was sent to the web server on the LAN",
            "line": 14,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1404"
            },
            "result": {
              "status": "passed",
              "duration": 72521987
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 613454658
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 59234493
            }
          }
        ]
      },
      {
        "id": "browsing-the-web-using-the-tor-browser;the-downloads-directory-is-usable-in-tor-browser",
        "keyword": "Scenario",
        "name": "The Downloads directory is usable in Tor Browser",
        "description": "",
        "line": 17,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 16
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 16230
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2851422
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 4341723
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 18,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 9290646472
            }
          },
          {
            "keyword": "Then ",
            "name": "the live user's Downloads directory exists",
            "line": 19,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1308"
            },
            "result": {
              "status": "passed",
              "duration": 37924999
            }
          },
          {
            "keyword": "And ",
            "name": "there is a GNOME bookmark for the Downloads directory",
            "line": 20,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1312"
            },
            "result": {
              "status": "passed",
              "duration": 15491212649
            }
          },
          {
            "keyword": "When ",
            "name": "I start the Tor Browser",
            "line": 21,
            "match": {
              "location": "features/step_definitions/browser.rb:493"
            },
            "result": {
              "status": "passed",
              "duration": 6974795955
            }
          },
          {
            "keyword": "Then ",
            "name": "I can save the current page as \"index.html\" to the Downloads directory",
            "line": 22,
            "match": {
              "location": "features/step_definitions/browser.rb:652"
            },
            "result": {
              "status": "passed",
              "duration": 4127926588
            }
          },
          {
            "keyword": "And ",
            "name": "I can print the current page as \"output.pdf\" to the Downloads directory",
            "line": 23,
            "match": {
              "location": "features/step_definitions/browser.rb:641"
            },
            "result": {
              "status": "passed",
              "duration": 3114593821
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:535"
            },
            "result": {
              "status": "passed",
              "duration": 240040176
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 878769554
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 67916
            }
          }
        ]
      },
      {
        "id": "browsing-the-web-using-the-tor-browser;downloading-files-with-the-tor-browser",
        "keyword": "Scenario",
        "name": "Downloading files with the Tor Browser",
        "description": "",
        "line": 26,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 25
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 78827
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 24365601
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 2987316
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 27,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 9225429196
            }
          },
          {
            "keyword": "When ",
            "name": "I start the Tor Browser",
            "line": 28,
            "match": {
              "location": "features/step_definitions/browser.rb:493"
            },
            "result": {
              "status": "passed",
              "duration": 6727969658
            }
          },
          {
            "keyword": "When ",
            "name": "I download some file in the Tor Browser to the Downloads directory",
            "line": 29,
            "match": {
              "location": "features/step_definitions/browser.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 9432418901
            }
          },
          {
            "keyword": "Then ",
            "name": "the file is saved to the Downloads directory",
            "line": 30,
            "match": {
              "location": "features/step_definitions/browser.rb:360"
            },
            "result": {
              "status": "passed",
              "duration": 51859892
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:535"
            },
            "result": {
              "status": "passed",
              "duration": 237775114
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 578044563
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 188351
            }
          }
        ]
      },
      {
        "id": "browsing-the-web-using-the-tor-browser;playing-an-ogg-audio-track",
        "keyword": "Scenario",
        "name": "Playing an Ogg audio track",
        "description": "",
        "line": 33,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 32
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 12003
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 3437416
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 6454879
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 34,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 9210207296
            }
          },
          {
            "keyword": "When ",
            "name": "I start the Tor Browser",
            "line": 35,
            "match": {
              "location": "features/step_definitions/browser.rb:493"
            },
            "result": {
              "status": "passed",
              "duration": 7232796080
            }
          },
          {
            "keyword": "Then ",
            "name": "I can listen to an Ogg audio track in Tor Browser",
            "line": 36,
            "match": {
              "location": "features/step_definitions/browser.rb:401"
            },
            "result": {
              "status": "passed",
              "duration": 36874504956
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:535"
            },
            "result": {
              "status": "passed",
              "duration": 646491293
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 1019535143
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 2299131
            }
          }
        ]
      },
      {
        "id": "browsing-the-web-using-the-tor-browser;watching-a-webm-video",
        "keyword": "Scenario",
        "name": "Watching a WebM video",
        "description": "",
        "line": 39,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 38
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 11120
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2663641
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 2468337
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 40,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 9447728049
            }
          },
          {
            "keyword": "When ",
            "name": "I start the Tor Browser",
            "line": 41,
            "match": {
              "location": "features/step_definitions/browser.rb:493"
            },
            "result": {
              "status": "passed",
              "duration": 6721684997
            }
          },
          {
            "keyword": "Then ",
            "name": "I can watch a WebM video in Tor Browser",
            "line": 42,
            "match": {
              "location": "features/step_definitions/browser.rb:420"
            },
            "result": {
              "status": "passed",
              "duration": 6942754095
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:535"
            },
            "result": {
              "status": "passed",
              "duration": 247162061
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 877896003
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 89287
            }
          }
        ]
      },
      {
        "id": "browsing-the-web-using-the-tor-browser;i-can-view-a-file-stored-in-\"~/downloads\"-but-not-in-~/.gnupg",
        "keyword": "Scenario",
        "name": "I can view a file stored in \"~/Downloads\" but not in ~/.gnupg",
        "description": "",
        "line": 44,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 10601
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2780531
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 45,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 9309010106
            }
          },
          {
            "keyword": "And ",
            "name": "I copy \"/usr/share/synaptic/html/index.html\" to \"/home/amnesia/Downloads/synaptic.html\" as user \"amnesia\"",
            "line": 46,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1057"
            },
            "result": {
              "status": "passed",
              "duration": 41655101
            }
          },
          {
            "keyword": "And ",
            "name": "I copy \"/usr/share/synaptic/html/index.html\" to \"/home/amnesia/.gnupg/synaptic.html\" as user \"amnesia\"",
            "line": 47,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1057"
            },
            "result": {
              "status": "passed",
              "duration": 39561674
            }
          },
          {
            "keyword": "And ",
            "name": "I copy \"/usr/share/synaptic/html/index.html\" to \"/tmp/synaptic.html\" as user \"amnesia\"",
            "line": 48,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1057"
            },
            "result": {
              "status": "passed",
              "duration": 26392442
            }
          },
          {
            "keyword": "Then ",
            "name": "the file \"/home/amnesia/.gnupg/synaptic.html\" exists",
            "line": 49,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1026"
            },
            "result": {
              "status": "passed",
              "duration": 32519538
            }
          },
          {
            "keyword": "And ",
            "name": "the file \"/lib/live/mount/overlay/rw/home/amnesia/.gnupg/synaptic.html\" exists",
            "line": 50,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1026"
            },
            "result": {
              "status": "passed",
              "duration": 20688315
            }
          },
          {
            "keyword": "And ",
            "name": "the file \"/live/overlay/rw/home/amnesia/.gnupg/synaptic.html\" exists",
            "line": 51,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1026"
            },
            "result": {
              "status": "passed",
              "duration": 55218346
            }
          },
          {
            "keyword": "And ",
            "name": "the file \"/tmp/synaptic.html\" exists",
            "line": 52,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1026"
            },
            "result": {
              "status": "passed",
              "duration": 24933759
            }
          },
          {
            "keyword": "Given ",
            "name": "I start monitoring the AppArmor log of \"torbrowser_firefox\"",
            "line": 53,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1420"
            },
            "result": {
              "status": "passed",
              "duration": 77068821
            }
          },
          {
            "keyword": "When ",
            "name": "I start the Tor Browser",
            "line": 54,
            "match": {
              "location": "features/step_definitions/browser.rb:493"
            },
            "result": {
              "status": "passed",
              "duration": 7218117104
            }
          },
          {
            "keyword": "And ",
            "name": "I open the address \"file:///home/amnesia/Downloads/synaptic.html\" in the Tor Browser",
            "line": 55,
            "match": {
              "location": "features/step_definitions/browser.rb:211"
            },
            "result": {
              "status": "passed",
              "duration": 6925925965
            }
          },
          {
            "keyword": "Then ",
            "name": "I see \"TorBrowserSynapticManual.png\" after at most 5 seconds",
            "line": 56,
            "match": {
              "location": "features/step_definitions/common_steps.rb:802"
            },
            "result": {
              "status": "passed",
              "duration": 352434934
            }
          },
          {
            "keyword": "And ",
            "name": "AppArmor has not denied \"torbrowser_firefox\" from opening \"/home/amnesia/Downloads/synaptic.html\"",
            "line": 57,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1433"
            },
            "result": {
              "status": "passed",
              "duration": 46933853
            }
          },
          {
            "keyword": "When ",
            "name": "I open the address \"file:///home/amnesia/.gnupg/synaptic.html\" in the Tor Browser",
            "line": 58,
            "match": {
              "location": "features/step_definitions/browser.rb:211"
            },
            "result": {
              "status": "passed",
              "duration": 3926508010
            }
          },
          {
            "keyword": "Then ",
            "name": "I do not see \"TorBrowserSynapticManual.png\" after at most 5 seconds",
            "line": 59,
            "match": {
              "location": "features/step_definitions/common_steps.rb:802"
            },
            "result": {
              "status": "passed",
              "duration": 268126851
            }
          },
          {
            "keyword": "When ",
            "name": "I open the address \"file:///lib/live/mount/overlay/rw/home/amnesia/.gnupg/synaptic.html\" in the Tor Browser",
            "line": 60,
            "match": {
              "location": "features/step_definitions/browser.rb:211"
            },
            "result": {
              "status": "passed",
              "duration": 3526757410
            }
          },
          {
            "keyword": "Then ",
            "name": "I do not see \"TorBrowserSynapticManual.png\" after at most 5 seconds",
            "line": 61,
            "match": {
              "location": "features/step_definitions/common_steps.rb:802"
            },
            "result": {
              "status": "passed",
              "duration": 270617249
            }
          },
          {
            "keyword": "When ",
            "name": "I open the address \"file:///live/overlay/rw/home/amnesia/.gnupg/synaptic.html\" in the Tor Browser",
            "line": 62,
            "match": {
              "location": "features/step_definitions/browser.rb:211"
            },
            "result": {
              "status": "passed",
              "duration": 3687876933
            }
          },
          {
            "keyword": "Then ",
            "name": "I do not see \"TorBrowserSynapticManual.png\" after at most 5 seconds",
            "line": 63,
            "match": {
              "location": "features/step_definitions/common_steps.rb:802"
            },
            "result": {
              "status": "passed",
              "duration": 274772335
            }
          },
          {
            "keyword": "When ",
            "name": "I open the address \"file:///tmp/synaptic.html\" in the Tor Browser",
            "line": 64,
            "match": {
              "location": "features/step_definitions/browser.rb:211"
            },
            "result": {
              "status": "passed",
              "duration": 3844320208
            }
          },
          {
            "keyword": "Then ",
            "name": "I do not see \"TorBrowserSynapticManual.png\" after at most 5 seconds",
            "line": 65,
            "match": {
              "location": "features/step_definitions/common_steps.rb:802"
            },
            "result": {
              "status": "passed",
              "duration": 271783092
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 923028575
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 19806
            }
          }
        ]
      },
      {
        "id": "browsing-the-web-using-the-tor-browser;the-tor-browser-uses-tbb's-shared-libraries",
        "keyword": "Scenario",
        "name": "The Tor Browser uses TBB's shared libraries",
        "description": "",
        "line": 67,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 11491
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2463798
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 68,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 9244226076
            }
          },
          {
            "keyword": "When ",
            "name": "I start the Tor Browser",
            "line": 69,
            "match": {
              "location": "features/step_definitions/browser.rb:493"
            },
            "result": {
              "status": "passed",
              "duration": 7313540037
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Browser uses all expected TBB shared libraries",
            "line": 70,
            "match": {
              "location": "features/step_definitions/browser.rb:307"
            },
            "result": {
              "status": "passed",
              "duration": 477693331
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 624905185
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 19947
            }
          }
        ]
      },
      {
        "id": "browsing-the-web-using-the-tor-browser;the-tor-browser's-\"new-identity\"-feature-works-as-expected",
        "keyword": "Scenario",
        "name": "The Tor Browser's \"New identity\" feature works as expected",
        "description": "",
        "line": 73,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 72
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 9118
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2685102
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 1618571
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 74,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 9376826892
            }
          },
          {
            "keyword": "When ",
            "name": "I start the Tor Browser",
            "line": 75,
            "match": {
              "location": "features/step_definitions/browser.rb:493"
            },
            "result": {
              "status": "passed",
              "duration": 6831267979
            }
          },
          {
            "keyword": "And ",
            "name": "I open the Tails homepage in the Tor Browser",
            "line": 76,
            "match": {
              "location": "features/step_definitions/browser.rb:365"
            },
            "result": {
              "status": "passed",
              "duration": 6876002981
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Browser loads the Tails homepage",
            "line": 77,
            "match": {
              "location": "features/step_definitions/browser.rb:604"
            },
            "result": {
              "status": "passed",
              "duration": 395958141
            }
          },
          {
            "keyword": "And ",
            "name": "the Tor Browser has 2 tabs open",
            "line": 78,
            "match": {
              "location": "features/step_definitions/browser.rb:673"
            },
            "result": {
              "status": "passed",
              "duration": 63788453
            }
          },
          {
            "keyword": "When ",
            "name": "I request a new identity in Tor Browser",
            "line": 79,
            "match": {
              "location": "features/step_definitions/browser.rb:667"
            },
            "result": {
              "status": "passed",
              "duration": 3161914141
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Browser loads about:tor",
            "line": 80,
            "match": {
              "location": "features/step_definitions/browser.rb:531"
            },
            "result": {
              "status": "passed",
              "duration": 612401614
            }
          },
          {
            "keyword": "And ",
            "name": "the Tor Browser has 1 tab open",
            "line": 81,
            "match": {
              "location": "features/step_definitions/browser.rb:673"
            },
            "result": {
              "status": "passed",
              "duration": 60750301
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:535"
            },
            "result": {
              "status": "passed",
              "duration": 297344428
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 1377669225
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 202388
            }
          }
        ]
      },
      {
        "id": "browsing-the-web-using-the-tor-browser;the-tor-browser's-circuit-view-feature-works-as-expected",
        "keyword": "Scenario",
        "name": "The Tor Browser's circuit view feature works as expected",
        "description": "",
        "line": 86,
        "type": "scenario",
        "comments": [
          {
            "value": "# If you think that the \"the Tor Browser loads the Tails homepage\" implies @doc, think",
            "line": 83
          },
          {
            "value": "# again: it depends on reaching the public website, not on using the copy of the",
            "line": 84
          },
          {
            "value": "# website which is bundled in.",
            "line": 85
          }
        ],
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 12434
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2541223
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 87,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 9227006496
            }
          },
          {
            "keyword": "When ",
            "name": "I start the Tor Browser",
            "line": 88,
            "match": {
              "location": "features/step_definitions/browser.rb:493"
            },
            "result": {
              "status": "passed",
              "duration": 7159027401
            }
          },
          {
            "keyword": "And ",
            "name": "I open the Tails homepage in the Tor Browser",
            "line": 89,
            "match": {
              "location": "features/step_definitions/browser.rb:365"
            },
            "result": {
              "status": "passed",
              "duration": 6832768129
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Browser loads the Tails homepage",
            "line": 90,
            "match": {
              "location": "features/step_definitions/browser.rb:604"
            },
            "result": {
              "status": "passed",
              "duration": 404581792
            }
          },
          {
            "keyword": "And ",
            "name": "Tor Browser's circuit view is working",
            "line": 91,
            "match": {
              "location": "features/step_definitions/browser.rb:483"
            },
            "result": {
              "status": "passed",
              "duration": 1404068231
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 690682288
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 20369
            }
          }
        ]
      },
      {
        "id": "browsing-the-web-using-the-tor-browser;webrtc-is-disabled-in-tor-browser",
        "keyword": "Scenario",
        "name": "WebRTC is disabled in Tor Browser",
        "description": "",
        "line": 93,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 11450
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2528819
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 94,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 9181409865
            }
          },
          {
            "keyword": "When ",
            "name": "I start the Tor Browser",
            "line": 95,
            "match": {
              "location": "features/step_definitions/browser.rb:493"
            },
            "result": {
              "status": "passed",
              "duration": 7045723728
            }
          },
          {
            "keyword": "When ",
            "name": "I open the address \"https://net.ipcalf.com/\" in the Tor Browser",
            "line": 96,
            "match": {
              "location": "features/step_definitions/browser.rb:211"
            },
            "result": {
              "status": "passed",
              "duration": 6373125523
            }
          },
          {
            "keyword": "Then ",
            "name": "Tor Browser displays a 'ifconfig | grep inet | grep -v inet6 | cut -d\" \" -f2 | tail -n1' heading on the \"Network IP Address via ipcalf.com\" page",
            "line": 97,
            "match": {
              "location": "features/step_definitions/browser.rb:395"
            },
            "result": {
              "status": "passed",
              "duration": 116778371
            }
          },
          {
            "keyword": "When ",
            "name": "I open the address \"https://mozilla.github.io/webrtc-landing/pc_test.html\" in the Tor Browser",
            "line": 98,
            "match": {
              "location": "features/step_definitions/browser.rb:211"
            },
            "result": {
              "status": "passed",
              "duration": 6657109234
            }
          },
          {
            "keyword": "Then ",
            "name": "Tor Browser displays a \"RTCPeerConnection is missing!\" heading on the \"Simple RTCPeerConnection Video Test\" page",
            "line": 99,
            "match": {
              "location": "features/step_definitions/browser.rb:389"
            },
            "result": {
              "status": "passed",
              "duration": 157908451
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 638255535
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 20179
            }
          }
        ]
      },
      {
        "id": "browsing-the-web-using-the-tor-browser;the-persistent-directory-is-usable-in-tor-browser",
        "keyword": "Scenario",
        "name": "The Persistent directory is usable in Tor Browser",
        "description": "",
        "line": 101,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 13315
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2560359
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition enabled and logged in",
            "line": 102,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 7898907678
            }
          },
          {
            "keyword": "And ",
            "name": "the network is plugged",
            "line": 103,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 27766300
            }
          },
          {
            "keyword": "And ",
            "name": "I successfully configure Tor",
            "line": 104,
            "match": {
              "location": "features/step_definitions/common_steps.rb:680"
            },
            "result": {
              "status": "passed",
              "duration": 8100592733
            }
          },
          {
            "keyword": "And ",
            "name": "available upgrades have been checked",
            "line": 105,
            "match": {
              "location": "features/step_definitions/common_steps.rb:763"
            },
            "result": {
              "status": "passed",
              "duration": 2128838064
            }
          },
          {
            "keyword": "And ",
            "name": "all notifications have disappeared",
            "line": 106,
            "match": {
              "location": "features/step_definitions/common_steps.rb:767"
            },
            "result": {
              "status": "passed",
              "duration": 7520336895
            }
          },
          {
            "keyword": "And ",
            "name": "there is a GNOME bookmark for the Persistent directory",
            "line": 107,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1312"
            },
            "result": {
              "status": "passed",
              "duration": 13782182681
            }
          },
          {
            "keyword": "When ",
            "name": "I start the Tor Browser",
            "line": 108,
            "match": {
              "location": "features/step_definitions/browser.rb:493"
            },
            "result": {
              "status": "passed",
              "duration": 9937925758
            }
          },
          {
            "keyword": "And ",
            "name": "I download some file in the Tor Browser to the Persistent directory",
            "line": 109,
            "match": {
              "location": "features/step_definitions/browser.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 8969260460
            }
          },
          {
            "keyword": "Then ",
            "name": "the file is saved to the Persistent directory",
            "line": 110,
            "match": {
              "location": "features/step_definitions/browser.rb:360"
            },
            "result": {
              "status": "passed",
              "duration": 43888715
            }
          },
          {
            "keyword": "When ",
            "name": "I open the address \"https://tails.net/about\" in the Tor Browser",
            "line": 111,
            "match": {
              "location": "features/step_definitions/browser.rb:211"
            },
            "result": {
              "status": "passed",
              "duration": 6945208091
            }
          },
          {
            "keyword": "Then ",
            "name": "\"Tails - How Tails works\" has loaded in the Tor Browser",
            "line": 112,
            "match": {
              "location": "features/step_definitions/browser.rb:275"
            },
            "result": {
              "status": "passed",
              "duration": 1471986434
            }
          },
          {
            "keyword": "And ",
            "name": "I can print the current page as \"output.pdf\" to the Persistent directory",
            "line": 113,
            "match": {
              "location": "features/step_definitions/browser.rb:641"
            },
            "result": {
              "status": "passed",
              "duration": 8539255069
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 805792225
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 20088
            }
          }
        ]
      },
      {
        "id": "browsing-the-web-using-the-tor-browser;the-default-xdg-directories-are-usable-in-tor-browser;;2",
        "keyword": "Scenario Outline",
        "name": "The default XDG directories are usable in Tor Browser",
        "description": "",
        "line": 123,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 10310
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2554958
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 123,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6423241740
            }
          },
          {
            "keyword": "Then ",
            "name": "the live user's Documents directory exists",
            "line": 123,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1308"
            },
            "result": {
              "status": "passed",
              "duration": 38222592
            }
          },
          {
            "keyword": "And ",
            "name": "there is a GNOME bookmark for the Documents directory",
            "line": 123,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1312"
            },
            "result": {
              "status": "passed",
              "duration": 14616458409
            }
          },
          {
            "keyword": "Then ",
            "name": "I start the Tor Browser in offline mode",
            "line": 123,
            "match": {
              "location": "features/step_definitions/browser.rb:493"
            },
            "result": {
              "status": "passed",
              "duration": 9787495498
            }
          },
          {
            "keyword": "And ",
            "name": "I can save the current page as \"index.html\" to the Documents GNOME bookmark",
            "line": 123,
            "match": {
              "location": "features/step_definitions/browser.rb:652"
            },
            "result": {
              "status": "passed",
              "duration": 6865133677
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 957624867
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 23435
            }
          }
        ]
      },
      {
        "id": "browsing-the-web-using-the-tor-browser;the-default-xdg-directories-are-usable-in-tor-browser;;3",
        "keyword": "Scenario Outline",
        "name": "The default XDG directories are usable in Tor Browser",
        "description": "",
        "line": 124,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 9188
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2627134
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 124,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6588002681
            }
          },
          {
            "keyword": "Then ",
            "name": "the live user's Downloads directory exists",
            "line": 124,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1308"
            },
            "result": {
              "status": "passed",
              "duration": 47574777
            }
          },
          {
            "keyword": "And ",
            "name": "there is a GNOME bookmark for the Downloads directory",
            "line": 124,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1312"
            },
            "result": {
              "status": "passed",
              "duration": 17438918190
            }
          },
          {
            "keyword": "Then ",
            "name": "I start the Tor Browser in offline mode",
            "line": 124,
            "match": {
              "location": "features/step_definitions/browser.rb:493"
            },
            "result": {
              "status": "passed",
              "duration": 9632194930
            }
          },
          {
            "keyword": "And ",
            "name": "I can save the current page as \"index.html\" to the Downloads GNOME bookmark",
            "line": 124,
            "match": {
              "location": "features/step_definitions/browser.rb:652"
            },
            "result": {
              "status": "passed",
              "duration": 7037645010
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 1009256714
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 20057
            }
          }
        ]
      },
      {
        "id": "browsing-the-web-using-the-tor-browser;the-default-xdg-directories-are-usable-in-tor-browser;;4",
        "keyword": "Scenario Outline",
        "name": "The default XDG directories are usable in Tor Browser",
        "description": "",
        "line": 125,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 9909
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2706230
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 125,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 18004948125
            }
          },
          {
            "keyword": "Then ",
            "name": "the live user's Music directory exists",
            "line": 125,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1308"
            },
            "result": {
              "status": "passed",
              "duration": 70038055
            }
          },
          {
            "keyword": "And ",
            "name": "there is a GNOME bookmark for the Music directory",
            "line": 125,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1312"
            },
            "result": {
              "status": "passed",
              "duration": 17368092765
            }
          },
          {
            "keyword": "Then ",
            "name": "I start the Tor Browser in offline mode",
            "line": 125,
            "match": {
              "location": "features/step_definitions/browser.rb:493"
            },
            "result": {
              "status": "passed",
              "duration": 9923313216
            }
          },
          {
            "keyword": "And ",
            "name": "I can save the current page as \"index.html\" to the Music GNOME bookmark",
            "line": 125,
            "match": {
              "location": "features/step_definitions/browser.rb:652"
            },
            "result": {
              "status": "passed",
              "duration": 6759030043
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 534485267
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 21671
            }
          }
        ]
      },
      {
        "id": "browsing-the-web-using-the-tor-browser;the-default-xdg-directories-are-usable-in-tor-browser;;5",
        "keyword": "Scenario Outline",
        "name": "The default XDG directories are usable in Tor Browser",
        "description": "",
        "line": 126,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 10580
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2765421
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 126,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 30005950571
            }
          },
          {
            "keyword": "Then ",
            "name": "the live user's Pictures directory exists",
            "line": 126,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1308"
            },
            "result": {
              "status": "passed",
              "duration": 60562725
            }
          },
          {
            "keyword": "And ",
            "name": "there is a GNOME bookmark for the Pictures directory",
            "line": 126,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1312"
            },
            "result": {
              "status": "passed",
              "duration": 14591091029
            }
          },
          {
            "keyword": "Then ",
            "name": "I start the Tor Browser in offline mode",
            "line": 126,
            "match": {
              "location": "features/step_definitions/browser.rb:493"
            },
            "result": {
              "status": "passed",
              "duration": 9739010053
            }
          },
          {
            "keyword": "And ",
            "name": "I can save the current page as \"index.html\" to the Pictures GNOME bookmark",
            "line": 126,
            "match": {
              "location": "features/step_definitions/browser.rb:652"
            },
            "result": {
              "status": "passed",
              "duration": 6823425450
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 925581434
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 20840
            }
          }
        ]
      },
      {
        "id": "browsing-the-web-using-the-tor-browser;the-default-xdg-directories-are-usable-in-tor-browser;;6",
        "keyword": "Scenario Outline",
        "name": "The default XDG directories are usable in Tor Browser",
        "description": "",
        "line": 127,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 10220
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2710250
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 127,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6383945176
            }
          },
          {
            "keyword": "Then ",
            "name": "the live user's Videos directory exists",
            "line": 127,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1308"
            },
            "result": {
              "status": "passed",
              "duration": 35736078
            }
          },
          {
            "keyword": "And ",
            "name": "there is a GNOME bookmark for the Videos directory",
            "line": 127,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1312"
            },
            "result": {
              "status": "passed",
              "duration": 17419971014
            }
          },
          {
            "keyword": "Then ",
            "name": "I start the Tor Browser in offline mode",
            "line": 127,
            "match": {
              "location": "features/step_definitions/browser.rb:493"
            },
            "result": {
              "status": "passed",
              "duration": 9685681891
            }
          },
          {
            "keyword": "And ",
            "name": "I can save the current page as \"index.html\" to the Videos GNOME bookmark",
            "line": 127,
            "match": {
              "location": "features/step_definitions/browser.rb:652"
            },
            "result": {
              "status": "passed",
              "duration": 6767368982
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 895017219
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 20960
            }
          }
        ]
      },
      {
        "id": "browsing-the-web-using-the-tor-browser;persistent-browser-bookmarks",
        "keyword": "Scenario",
        "name": "Persistent browser bookmarks",
        "description": "",
        "line": 129,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 11552
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2525152
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition enabled and logged in",
            "line": 130,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 7793515572
            }
          },
          {
            "keyword": "And ",
            "name": "all tps features are active",
            "line": 131,
            "match": {
              "location": "features/step_definitions/usb.rb:785"
            },
            "result": {
              "status": "passed",
              "duration": 7222745684
            }
          },
          {
            "keyword": "And ",
            "name": "all persistent filesystems have safe access rights",
            "line": 132,
            "match": {
              "location": "features/step_definitions/usb.rb:999"
            },
            "result": {
              "status": "passed",
              "duration": 158776628
            }
          },
          {
            "keyword": "And ",
            "name": "all persistence configuration files have safe access rights",
            "line": 133,
            "match": {
              "location": "features/step_definitions/usb.rb:1016"
            },
            "result": {
              "status": "passed",
              "duration": 295455363
            }
          },
          {
            "keyword": "And ",
            "name": "all persistent directories have safe access rights",
            "line": 134,
            "match": {
              "location": "features/step_definitions/usb.rb:1044"
            },
            "result": {
              "status": "passed",
              "duration": 1576235546
            }
          },
          {
            "keyword": "When ",
            "name": "I start the Tor Browser in offline mode",
            "line": 135,
            "match": {
              "location": "features/step_definitions/browser.rb:493"
            },
            "result": {
              "status": "passed",
              "duration": 13517099860
            }
          },
          {
            "keyword": "And ",
            "name": "I add a bookmark to eff.org in the Tor Browser",
            "line": 136,
            "match": {
              "location": "features/step_definitions/browser.rb:624"
            },
            "result": {
              "status": "passed",
              "duration": 7906794572
            }
          },
          {
            "keyword": "And ",
            "name": "I cold reboot the computer",
            "line": 137,
            "match": {
              "location": "features/step_definitions/common_steps.rb:282"
            },
            "result": {
              "status": "passed",
              "duration": 5880297139
            }
          },
          {
            "keyword": "And ",
            "name": "the computer reboots Tails",
            "line": 138,
            "match": {
              "location": "features/step_definitions/common_steps.rb:405"
            },
            "result": {
              "status": "passed",
              "duration": 32350367941
            }
          },
          {
            "keyword": "And ",
            "name": "I enable persistence",
            "line": 139,
            "match": {
              "location": "features/step_definitions/usb.rb:728"
            },
            "result": {
              "status": "passed",
              "duration": 12959603504
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session",
            "line": 140,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 6895289668
            }
          },
          {
            "keyword": "And ",
            "name": "all notifications have disappeared",
            "line": 141,
            "match": {
              "location": "features/step_definitions/common_steps.rb:767"
            },
            "result": {
              "status": "passed",
              "duration": 8010485624
            }
          },
          {
            "keyword": "And ",
            "name": "I start the Tor Browser in offline mode",
            "line": 142,
            "match": {
              "location": "features/step_definitions/browser.rb:493"
            },
            "result": {
              "status": "passed",
              "duration": 7241885834
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Browser has a bookmark to eff.org",
            "line": 143,
            "match": {
              "location": "features/step_definitions/browser.rb:636"
            },
            "result": {
              "status": "passed",
              "duration": 441266506
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 963142380
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 19260850
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/torified_git.feature",
    "id": "cloning-a-git-repository",
    "keyword": "Feature",
    "name": "Cloning a Git repository",
    "description": "  As a Tails user\n  when I clone a Git repository\n  all Internet traffic should flow only through Tor",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      },
      {
        "name": "@check_tor_leaks",
        "line": 1
      }
    ],
    "elements": [
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 15249
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 1605377
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 1725169
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 9110507755
            }
          }
        ]
      },
      {
        "id": "cloning-a-git-repository;cloning-a-git-repository-anonymously-over-https",
        "keyword": "Scenario",
        "name": "Cloning a Git repository anonymously over HTTPS",
        "description": "",
        "line": 10,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "When ",
            "name": "I clone the Git repository \"https://github.com/intrigeri/Dist-Zilla-Plugin-LocaleMsgfmt.git\" in Console",
            "line": 11,
            "match": {
              "location": "features/step_definitions/git.rb:1"
            },
            "result": {
              "status": "passed",
              "duration": 5386905862
            }
          },
          {
            "keyword": "Then ",
            "name": "the Git repository \"Dist-Zilla-Plugin-LocaleMsgfmt\" has been cloned successfully",
            "line": 12,
            "match": {
              "location": "features/step_definitions/git.rb:26"
            },
            "result": {
              "status": "passed",
              "duration": 168048272
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:535"
            },
            "result": {
              "status": "passed",
              "duration": 233072282
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 756855855
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 86270
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 12923
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 3158275
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 2241364
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 9288058181
            }
          }
        ]
      },
      {
        "id": "cloning-a-git-repository;cloning-git-repository-over-ssh",
        "keyword": "Scenario",
        "name": "Cloning git repository over SSH",
        "description": "",
        "line": 14,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have the SSH key pair for a Git repository",
            "line": 15,
            "match": {
              "location": "features/step_definitions/ssh.rb:37"
            },
            "result": {
              "status": "passed",
              "duration": 172932187
            }
          },
          {
            "keyword": "When ",
            "name": "I clone the Git repository \"ssh://gitolite3@git.tails.net:3004/myprivatekeyispublic/testing.git\" in Console",
            "line": 16,
            "match": {
              "location": "features/step_definitions/git.rb:1"
            },
            "result": {
              "status": "passed",
              "duration": 16673684472
            }
          },
          {
            "keyword": "Then ",
            "name": "the Git repository \"testing\" has been cloned successfully",
            "line": 17,
            "match": {
              "location": "features/step_definitions/git.rb:26"
            },
            "result": {
              "status": "passed",
              "duration": 133784675
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:535"
            },
            "result": {
              "status": "passed",
              "duration": 223530619
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 675443991
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 75872
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/torified_misc.feature",
    "id": "various-checks-for-torified-software",
    "keyword": "Feature",
    "name": "Various checks for torified software",
    "description": "",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      },
      {
        "name": "@check_tor_leaks",
        "line": 1
      }
    ],
    "elements": [
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 4,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 13936
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2709387
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 1572887
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 5,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 9312794769
            }
          }
        ]
      },
      {
        "id": "various-checks-for-torified-software;wget(1)-should-work-for-https-and-go-through-tor",
        "keyword": "Scenario",
        "name": "wget(1) should work for HTTPS and go through Tor",
        "description": "",
        "line": 7,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "When ",
            "name": "I wget \"https://example.com/\" to stdout",
            "line": 8,
            "match": {
              "location": "features/step_definitions/torified_misc.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 245902377
            }
          },
          {
            "keyword": "Then ",
            "name": "the wget command is successful",
            "line": 9,
            "match": {
              "location": "features/step_definitions/torified_misc.rb:19"
            },
            "result": {
              "status": "passed",
              "duration": 45164
            }
          },
          {
            "keyword": "And ",
            "name": "the wget standard output contains \"Example Domain\"",
            "line": 10,
            "match": {
              "location": "features/step_definitions/torified_misc.rb:28"
            },
            "result": {
              "status": "passed",
              "duration": 20529
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:535"
            },
            "result": {
              "status": "passed",
              "duration": 242050207
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 871523423
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 71182
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 4,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 11410
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2792402
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 2144213
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 5,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 9318874844
            }
          }
        ]
      },
      {
        "id": "various-checks-for-torified-software;curl-should-work-for-https-and-go-through-tor",
        "keyword": "Scenario",
        "name": "curl should work for HTTPS and go through Tor",
        "description": "",
        "line": 12,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "When ",
            "name": "I curl \"https://example.com/\" to stdout",
            "line": 13,
            "match": {
              "location": "features/step_definitions/torified_misc.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 209575342
            }
          },
          {
            "keyword": "Then ",
            "name": "the curl command is successful",
            "line": 14,
            "match": {
              "location": "features/step_definitions/torified_misc.rb:19"
            },
            "result": {
              "status": "passed",
              "duration": 43992
            }
          },
          {
            "keyword": "And ",
            "name": "the curl standard output contains \"Example Domain\"",
            "line": 15,
            "match": {
              "location": "features/step_definitions/torified_misc.rb:28"
            },
            "result": {
              "status": "passed",
              "duration": 26379
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:535"
            },
            "result": {
              "status": "passed",
              "duration": 223790184
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 909425111
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 88806
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 4,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 14667
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2916103
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 1966511
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 5,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 9305865707
            }
          }
        ]
      },
      {
        "id": "various-checks-for-torified-software;transparent-proxying-through-tor",
        "keyword": "Scenario",
        "name": "Transparent proxying through Tor",
        "description": "",
        "line": 17,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 18,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 9580855913
            }
          },
          {
            "keyword": "When ",
            "name": "I open an untorified TCP connection to 8.8.8.8 on port 53",
            "line": 19,
            "match": {
              "location": "features/step_definitions/tor.rb:250"
            },
            "result": {
              "status": "passed",
              "duration": 198845062
            }
          },
          {
            "keyword": "Then ",
            "name": "the untorified TCP connection succeeds",
            "line": 20,
            "match": {
              "location": "features/step_definitions/tor.rb:294"
            },
            "result": {
              "status": "passed",
              "duration": 45966
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:535"
            },
            "result": {
              "status": "passed",
              "duration": 253096044
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 826040359
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 100959
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/uefi_ca.feature",
    "id": "user-gets-actionable-info-about-uefi-ca-expiry",
    "keyword": "Feature",
    "name": "User gets actionable info about UEFI CA expiry",
    "description": "  As a Tails user\n  When I'm using a computer which has Secure Boot, but doesn't have the Microsoft 2023 CA\n  Then I get a notification telling me what to do",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "user-gets-actionable-info-about-uefi-ca-expiry;i-am-warned-about-uefi-ca-expiry",
        "keyword": "Scenario",
        "name": "I am warned about UEFI CA expiry",
        "description": "",
        "line": 7,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 10931
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2660937
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and stopped at Tails Greeter's login screen",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 7102136203
            }
          },
          {
            "keyword": "And ",
            "name": "I simulate a computer with old UEFI CA",
            "line": 9,
            "match": {
              "location": "features/step_definitions/hardware.rb:136"
            },
            "result": {
              "status": "passed",
              "duration": 15050051
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 9517819389
            }
          },
          {
            "keyword": "And ",
            "name": "all notifications have disappeared",
            "line": 11,
            "match": {
              "location": "features/step_definitions/common_steps.rb:767"
            },
            "result": {
              "status": "passed",
              "duration": 7658765452
            }
          },
          {
            "keyword": "And ",
            "name": "I unblock tails-uefi-ca-notify",
            "line": 12,
            "match": {
              "location": "features/step_definitions/hardware.rb:152"
            },
            "result": {
              "status": "passed",
              "duration": 33199978
            }
          },
          {
            "keyword": "Then ",
            "name": "I see the \"Secure Boot Update Needed\" notification after at most 20 seconds",
            "line": 13,
            "match": {
              "location": "features/step_definitions/common_steps.rb:631"
            },
            "result": {
              "status": "passed",
              "duration": 843762893
            }
          },
          {
            "keyword": "And ",
            "name": "I can open the Secure Boot documentation from the notification",
            "line": 14,
            "match": {
              "location": "features/step_definitions/additional_software_packages.rb:134"
            },
            "result": {
              "status": "passed",
              "duration": 10431648301
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 904890989
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 19536
            }
          }
        ]
      },
      {
        "id": "user-gets-actionable-info-about-uefi-ca-expiry;i-am-not-warned-if-the-uefi-ca-is-up-to-date",
        "keyword": "Scenario",
        "name": "I am not warned if the UEFI CA is up-to-date",
        "description": "",
        "line": 16,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 11441
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2647042
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and stopped at Tails Greeter's login screen",
            "line": 17,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6635743901
            }
          },
          {
            "keyword": "And ",
            "name": "I simulate a computer with new UEFI CA",
            "line": 18,
            "match": {
              "location": "features/step_definitions/hardware.rb:136"
            },
            "result": {
              "status": "passed",
              "duration": 29168291
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session",
            "line": 19,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 9710423348
            }
          },
          {
            "keyword": "And ",
            "name": "all notifications have disappeared",
            "line": 20,
            "match": {
              "location": "features/step_definitions/common_steps.rb:767"
            },
            "result": {
              "status": "passed",
              "duration": 8118683725
            }
          },
          {
            "keyword": "And ",
            "name": "I unblock tails-uefi-ca-notify",
            "line": 21,
            "match": {
              "location": "features/step_definitions/hardware.rb:152"
            },
            "result": {
              "status": "passed",
              "duration": 37189134
            }
          },
          {
            "keyword": "Then ",
            "name": "I wait until amnesia's tails-uefi-ca-notify-user.service has completed",
            "line": 22,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1986"
            },
            "result": {
              "status": "passed",
              "duration": 1083113913
            }
          },
          {
            "keyword": "And ",
            "name": "I don't see the \"Secure Boot Update Needed\" notification after at most 10 seconds",
            "line": 23,
            "match": {
              "location": "features/step_definitions/common_steps.rb:631"
            },
            "result": {
              "status": "passed",
              "duration": 10689226199
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 1037878733
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 22873
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/unsafe_browser.feature",
    "id": "browsing-the-web-using-the-unsafe-browser",
    "keyword": "Feature",
    "name": "Browsing the web using the Unsafe Browser",
    "description": "  As a Tails user\n  when I browse the web using the Unsafe Browser\n  I should have direct access to the web",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "browsing-the-web-using-the-unsafe-browser;the-unsafe-browser-can-be-disabled",
        "keyword": "Scenario",
        "name": "The Unsafe Browser can be disabled",
        "description": "",
        "line": 7,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 10590
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2664214
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and stopped at Tails Greeter's login screen",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6296346778
            }
          },
          {
            "keyword": "And ",
            "name": "I disable the Unsafe Browser",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:587"
            },
            "result": {
              "status": "passed",
              "duration": 7831982787
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 9939190973
            }
          },
          {
            "keyword": "And ",
            "name": "the network is plugged",
            "line": 11,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 26131343
            }
          },
          {
            "keyword": "And ",
            "name": "all notifications have disappeared",
            "line": 12,
            "match": {
              "location": "features/step_definitions/common_steps.rb:767"
            },
            "result": {
              "status": "passed",
              "duration": 7735206735
            }
          },
          {
            "keyword": "When ",
            "name": "I try to start the Unsafe Browser",
            "line": 13,
            "match": {
              "location": "features/step_definitions/browser.rb:106"
            },
            "result": {
              "status": "passed",
              "duration": 54810194
            }
          },
          {
            "keyword": "Then ",
            "name": "the Unsafe Browser complains that it is disabled",
            "line": 14,
            "match": {
              "location": "features/step_definitions/unsafe_browser.rb:110"
            },
            "result": {
              "status": "passed",
              "duration": 1143134616
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 620398663
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 21340
            }
          }
        ]
      },
      {
        "id": "browsing-the-web-using-the-unsafe-browser;the-unsafe-browser-can-access-the-lan",
        "keyword": "Scenario",
        "name": "The Unsafe Browser can access the LAN",
        "description": "",
        "line": 16,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 9769
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2966687
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 17,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 21090552336
            }
          },
          {
            "keyword": "And ",
            "name": "a web server is running on the LAN",
            "line": 18,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1331"
            },
            "result": {
              "status": "passed",
              "duration": 1036557401
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully start the Unsafe Browser",
            "line": 19,
            "match": {
              "location": "features/step_definitions/browser.rb:110"
            },
            "result": {
              "status": "passed",
              "duration": 6212461240
            }
          },
          {
            "keyword": "And ",
            "name": "I open a page on the LAN web server in the Unsafe Browser",
            "line": 20,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1400"
            },
            "result": {
              "status": "passed",
              "duration": 3363055363
            }
          },
          {
            "keyword": "Then ",
            "name": "the Unsafe Browser displays the LAN web server hello message",
            "line": 21,
            "match": {
              "location": "features/step_definitions/unsafe_browser.rb:48"
            },
            "result": {
              "status": "passed",
              "duration": 68820813
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 903074306
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 465328
            }
          }
        ]
      },
      {
        "id": "browsing-the-web-using-the-unsafe-browser;starting-the-unsafe-browser-works-as-it-should",
        "keyword": "Scenario",
        "name": "Starting the Unsafe Browser works as it should",
        "description": "",
        "line": 24,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@doc",
            "line": 23
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 10840
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2675515
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 25,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 9238941834
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully start the Unsafe Browser",
            "line": 26,
            "match": {
              "location": "features/step_definitions/browser.rb:110"
            },
            "result": {
              "status": "passed",
              "duration": 5736016224
            }
          },
          {
            "keyword": "Then ",
            "name": "the Unsafe Browser runs as the expected user",
            "line": 27,
            "match": {
              "location": "features/step_definitions/browser.rb:325"
            },
            "result": {
              "status": "passed",
              "duration": 211900347
            }
          },
          {
            "keyword": "And ",
            "name": "the Unsafe Browser has a red theme",
            "line": 28,
            "match": {
              "location": "features/step_definitions/unsafe_browser.rb:44"
            },
            "result": {
              "status": "passed",
              "duration": 297063024
            }
          },
          {
            "keyword": "And ",
            "name": "the Unsafe Browser shows a warning as its start page",
            "line": 29,
            "match": {
              "location": "features/step_definitions/unsafe_browser.rb:55"
            },
            "result": {
              "status": "passed",
              "duration": 297651894
            }
          },
          {
            "keyword": "And ",
            "name": "the Unsafe Browser has no add-ons installed",
            "line": 30,
            "match": {
              "location": "features/step_definitions/unsafe_browser.rb:1"
            },
            "result": {
              "status": "passed",
              "duration": 3945554944
            }
          },
          {
            "keyword": "And ",
            "name": "the Unsafe Browser has no bookmarks",
            "line": 31,
            "match": {
              "location": "features/step_definitions/unsafe_browser.rb:11"
            },
            "result": {
              "status": "passed",
              "duration": 3943658203
            }
          },
          {
            "keyword": "And ",
            "name": "the Unsafe Browser uses all expected TBB shared libraries",
            "line": 32,
            "match": {
              "location": "features/step_definitions/browser.rb:307"
            },
            "result": {
              "status": "passed",
              "duration": 430562632
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 589613616
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 20137
            }
          }
        ]
      },
      {
        "id": "browsing-the-web-using-the-unsafe-browser;the-unsafe-browser-can-load-a-web-page-from-the-internet",
        "keyword": "Scenario",
        "name": "The Unsafe Browser can load a web page from the Internet",
        "description": "",
        "line": 35,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@doc",
            "line": 34
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 10690
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2517138
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 36,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 9428665279
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully start the Unsafe Browser",
            "line": 37,
            "match": {
              "location": "features/step_definitions/browser.rb:110"
            },
            "result": {
              "status": "passed",
              "duration": 5815540485
            }
          },
          {
            "keyword": "When ",
            "name": "I open the Tails homepage in the Unsafe Browser",
            "line": 38,
            "match": {
              "location": "features/step_definitions/browser.rb:365"
            },
            "result": {
              "status": "passed",
              "duration": 6952546952
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tails homepage loads in the Unsafe Browser",
            "line": 39,
            "match": {
              "location": "features/step_definitions/unsafe_browser.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 354740104
            }
          },
          {
            "keyword": "And ",
            "name": "the Unsafe Browser has sent packets out to the Internet",
            "line": 40,
            "match": {
              "location": "features/step_definitions/unsafe_browser.rb:130"
            },
            "result": {
              "status": "passed",
              "duration": 43443920
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 567563755
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 22472
            }
          }
        ]
      },
      {
        "id": "browsing-the-web-using-the-unsafe-browser;closing-the-unsafe-browser-shows-a-stop-notification-and-properly-tears-down-the-chroot",
        "keyword": "Scenario",
        "name": "Closing the Unsafe Browser shows a stop notification and properly tears down the chroot",
        "description": "",
        "line": 43,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 42
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 10290
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2742760
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 44,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 9338421156
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully start the Unsafe Browser",
            "line": 45,
            "match": {
              "location": "features/step_definitions/browser.rb:110"
            },
            "result": {
              "status": "passed",
              "duration": 6049395208
            }
          },
          {
            "keyword": "And ",
            "name": "I close the Unsafe Browser",
            "line": 46,
            "match": {
              "location": "features/step_definitions/browser.rb:118"
            },
            "result": {
              "status": "passed",
              "duration": 120791059
            }
          },
          {
            "keyword": "Then ",
            "name": "I see the \"Shutting down the Unsafe Browser...\" notification after at most 60 seconds",
            "line": 47,
            "match": {
              "location": "features/step_definitions/common_steps.rb:631"
            },
            "result": {
              "status": "passed",
              "duration": 668522427
            }
          },
          {
            "keyword": "And ",
            "name": "the Unsafe Browser chroot is torn down",
            "line": 48,
            "match": {
              "location": "features/step_definitions/browser.rb:317"
            },
            "result": {
              "status": "passed",
              "duration": 77469207
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 961203847
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 18996
            }
          }
        ]
      },
      {
        "id": "browsing-the-web-using-the-unsafe-browser;starting-a-second-instance-of-the-unsafe-browser-results-in-an-error-message-being-shown",
        "keyword": "Scenario",
        "name": "Starting a second instance of the Unsafe Browser results in an error message being shown",
        "description": "",
        "line": 51,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 50
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 11892
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2579914
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 52,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 9318942742
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully start the Unsafe Browser",
            "line": 53,
            "match": {
              "location": "features/step_definitions/browser.rb:110"
            },
            "result": {
              "status": "passed",
              "duration": 5763330751
            }
          },
          {
            "keyword": "And ",
            "name": "I wait 10 seconds",
            "line": 58,
            "comments": [
              {
                "value": "# Wait for whatever facility the GNOME Activities Overview uses to",
                "line": 54
              },
              {
                "value": "# learn about which applications are running to \"settle\". Without",
                "line": 55
              },
              {
                "value": "# this sleep, it is confused and it's impossible to start a new",
                "line": 56
              },
              {
                "value": "# instance (it will just switch to the one we already started).",
                "line": 57
              }
            ],
            "output": [
              "Slept for 10 seconds"
            ],
            "match": {
              "location": "features/step_definitions/common_steps.rb:1410"
            },
            "result": {
              "status": "passed",
              "duration": 10000172960
            }
          },
          {
            "keyword": "And ",
            "name": "I try to start the Unsafe Browser",
            "line": 59,
            "match": {
              "location": "features/step_definitions/browser.rb:106"
            },
            "result": {
              "status": "passed",
              "duration": 63610707
            }
          },
          {
            "keyword": "Then ",
            "name": "I see a warning about another instance already running",
            "line": 60,
            "match": {
              "location": "features/step_definitions/unsafe_browser.rb:68"
            },
            "result": {
              "status": "passed",
              "duration": 1116307413
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 1172930997
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 21881
            }
          }
        ]
      },
      {
        "id": "browsing-the-web-using-the-unsafe-browser;the-unsafe-browser-is-not-allowed-to-use-a-local-proxy",
        "keyword": "Scenario",
        "name": "The Unsafe Browser is not allowed to use a local proxy",
        "description": "",
        "line": 62,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 13775
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2788555
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 63,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 9220128675
            }
          },
          {
            "keyword": "When ",
            "name": "I configure the Unsafe Browser to use a local proxy",
            "line": 64,
            "match": {
              "location": "features/step_definitions/unsafe_browser.rb:81"
            },
            "result": {
              "status": "passed",
              "duration": 108172305
            }
          },
          {
            "keyword": "And ",
            "name": "I successfully start the Unsafe Browser",
            "line": 65,
            "match": {
              "location": "features/step_definitions/browser.rb:110"
            },
            "result": {
              "status": "passed",
              "duration": 6133079744
            }
          },
          {
            "keyword": "And ",
            "name": "I open the Tails homepage in the Unsafe Browser",
            "line": 66,
            "match": {
              "location": "features/step_definitions/browser.rb:365"
            },
            "result": {
              "status": "passed",
              "duration": 3793398475
            }
          },
          {
            "keyword": "Then ",
            "name": "the Unsafe Browser shows the \"The proxy server is refusing connections\" error",
            "line": 67,
            "match": {
              "location": "features/step_definitions/browser.rb:377"
            },
            "result": {
              "status": "passed",
              "duration": 200998284
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 724906855
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 20077
            }
          }
        ]
      },
      {
        "id": "browsing-the-web-using-the-unsafe-browser;the-unsafe-browser-only-makes-user-initiated-non-torified-connections",
        "keyword": "Scenario",
        "name": "The Unsafe Browser only makes user-initiated non-Torified connections",
        "description": "",
        "line": 70,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 69
          },
          {
            "name": "@check_tor_leaks",
            "line": 69
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 12934
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2535882
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 2338425
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 71,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 9254400646
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 72,
            "match": {
              "location": "features/step_definitions/common_steps.rb:188"
            },
            "result": {
              "status": "passed",
              "duration": 3739881
            }
          },
          {
            "keyword": "And ",
            "name": "I configure the Unsafe Browser to check for updates more frequently",
            "line": 73,
            "match": {
              "location": "features/step_definitions/unsafe_browser.rb:118"
            },
            "result": {
              "status": "passed",
              "duration": 37809776
            }
          },
          {
            "keyword": "But ",
            "name": "checking for updates is disabled in the Unsafe Browser's configuration",
            "line": 74,
            "match": {
              "location": "features/step_definitions/unsafe_browser.rb:125"
            },
            "result": {
              "status": "passed",
              "duration": 21357746
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully start the Unsafe Browser",
            "line": 75,
            "match": {
              "location": "features/step_definitions/browser.rb:110"
            },
            "result": {
              "status": "passed",
              "duration": 5723395425
            }
          },
          {
            "keyword": "And ",
            "name": "I wait 120 seconds",
            "line": 76,
            "output": [
              "Slept for 120 seconds"
            ],
            "match": {
              "location": "features/step_definitions/common_steps.rb:1410"
            },
            "result": {
              "status": "passed",
              "duration": 120000157256
            }
          },
          {
            "keyword": "Then ",
            "name": "the Unsafe Browser has not sent packets out to the Internet",
            "line": 77,
            "match": {
              "location": "features/step_definitions/unsafe_browser.rb:130"
            },
            "result": {
              "status": "passed",
              "duration": 349905728
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:535"
            },
            "result": {
              "status": "passed",
              "duration": 236297760
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 609695299
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 45632487
            }
          }
        ]
      },
      {
        "id": "browsing-the-web-using-the-unsafe-browser;the-unsafe-browser-cannot-be-started-when-i-am-offline",
        "keyword": "Scenario",
        "name": "The Unsafe Browser cannot be started when I am offline",
        "description": "",
        "line": 80,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 79
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 20889
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 3577515
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 81,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 9262114528
            }
          },
          {
            "keyword": "And ",
            "name": "the network is unplugged",
            "line": 82,
            "match": {
              "location": "features/step_definitions/common_steps.rb:154"
            },
            "result": {
              "status": "passed",
              "duration": 19519507
            }
          },
          {
            "keyword": "And ",
            "name": "I wait 10 seconds",
            "line": 84,
            "comments": [
              {
                "value": "# NetworkManager apparently needs some time to notice that the connection is now off",
                "line": 83
              }
            ],
            "output": [
              "Slept for 10 seconds"
            ],
            "match": {
              "location": "features/step_definitions/common_steps.rb:1410"
            },
            "result": {
              "status": "passed",
              "duration": 10000128239
            }
          },
          {
            "keyword": "When ",
            "name": "I try to start the Unsafe Browser",
            "line": 85,
            "match": {
              "location": "features/step_definitions/browser.rb:106"
            },
            "result": {
              "status": "passed",
              "duration": 102069352
            }
          },
          {
            "keyword": "Then ",
            "name": "I am told I cannot start the Unsafe Browser when I am offline",
            "line": 86,
            "match": {
              "location": "features/step_definitions/unsafe_browser.rb:102"
            },
            "result": {
              "status": "passed",
              "duration": 3553596772
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 930302755
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 21350
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/veracrypt.feature",
    "id": "using-veracrypt-encrypted-volumes",
    "keyword": "Feature",
    "name": "Using VeraCrypt encrypted volumes",
    "description": "  In order to collaborate with non-Tails users\n  As a Tails user\n  I want to unlock VeraCrypt encrypted volumes",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      },
      {
        "name": "@not_release_blocker",
        "line": 1
      }
    ],
    "elements": [
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 12063
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2688105
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 18254655141
            }
          }
        ]
      },
      {
        "id": "using-veracrypt-encrypted-volumes;use-unlock-veracrypt-volumes-to-unlock-a-usb-drive-that-has-a-basic-veracrypt-volume",
        "keyword": "Scenario",
        "name": "Use Unlock VeraCrypt Volumes to unlock a USB drive that has a basic VeraCrypt volume",
        "description": "",
        "line": 12,
        "type": "scenario",
        "comments": [
          {
            "value": "### Unlock VeraCrypt Volumes",
            "line": 10
          }
        ],
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "When ",
            "name": "I plug a USB drive containing a basic VeraCrypt volume",
            "line": 13,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:124"
            },
            "result": {
              "status": "passed",
              "duration": 9501869298
            }
          },
          {
            "keyword": "And ",
            "name": "I cancel the GNOME authentication prompt",
            "line": 14,
            "match": {
              "location": "features/step_definitions/common_steps.rb:855"
            },
            "result": {
              "status": "passed",
              "duration": 738913168
            }
          },
          {
            "keyword": "And ",
            "name": "I unlock and mount this VeraCrypt volume with Unlock VeraCrypt Volumes",
            "line": 15,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:156"
            },
            "result": {
              "status": "passed",
              "duration": 4225252661
            }
          },
          {
            "keyword": "And ",
            "name": "I open this VeraCrypt volume in GNOME Files",
            "line": 16,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:316"
            },
            "result": {
              "status": "passed",
              "duration": 1688241420
            }
          },
          {
            "keyword": "Then ",
            "name": "I see the expected contents in this VeraCrypt volume",
            "line": 17,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:321"
            },
            "result": {
              "status": "passed",
              "duration": 213290405
            }
          },
          {
            "keyword": "When ",
            "name": "I lock the currently opened VeraCrypt volume",
            "line": 18,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:326"
            },
            "result": {
              "status": "passed",
              "duration": 1232980970
            }
          },
          {
            "keyword": "Then ",
            "name": "the VeraCrypt volume has been unmounted and locked",
            "line": 19,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 63633812
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 775758502
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 386451
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 6964
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2586256
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 18276793487
            }
          }
        ]
      },
      {
        "id": "using-veracrypt-encrypted-volumes;use-unlock-veracrypt-volumes-to-unlock-a-usb-drive-that-has-a-hidden-veracrypt-volume",
        "keyword": "Scenario",
        "name": "Use Unlock VeraCrypt Volumes to unlock a USB drive that has a hidden VeraCrypt volume",
        "description": "",
        "line": 21,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "When ",
            "name": "I plug a USB drive containing a hidden VeraCrypt volume",
            "line": 22,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:124"
            },
            "result": {
              "status": "passed",
              "duration": 17414733852
            }
          },
          {
            "keyword": "And ",
            "name": "I cancel the GNOME authentication prompt",
            "line": 23,
            "match": {
              "location": "features/step_definitions/common_steps.rb:855"
            },
            "result": {
              "status": "passed",
              "duration": 1431323638
            }
          },
          {
            "keyword": "And ",
            "name": "I unlock and mount this VeraCrypt volume with Unlock VeraCrypt Volumes",
            "line": 24,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:156"
            },
            "result": {
              "status": "passed",
              "duration": 5372533379
            }
          },
          {
            "keyword": "And ",
            "name": "I open this VeraCrypt volume in GNOME Files",
            "line": 25,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:316"
            },
            "result": {
              "status": "passed",
              "duration": 1743549318
            }
          },
          {
            "keyword": "Then ",
            "name": "I see the expected contents in this VeraCrypt volume",
            "line": 26,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:321"
            },
            "result": {
              "status": "passed",
              "duration": 101604403
            }
          },
          {
            "keyword": "When ",
            "name": "I lock the currently opened VeraCrypt volume",
            "line": 27,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:326"
            },
            "result": {
              "status": "passed",
              "duration": 1219689353
            }
          },
          {
            "keyword": "Then ",
            "name": "the VeraCrypt volume has been unmounted and locked",
            "line": 28,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 70988933
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 617123578
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 315259
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 11822
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2726888
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6299686037
            }
          }
        ]
      },
      {
        "id": "using-veracrypt-encrypted-volumes;use-unlock-veracrypt-volumes-to-unlock-a-basic-veracrypt-file-container-with-a-pim",
        "keyword": "Scenario",
        "name": "Use Unlock VeraCrypt Volumes to unlock a basic VeraCrypt file container with a PIM",
        "description": "",
        "line": 30,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "When ",
            "name": "I plug and mount a USB drive containing a basic VeraCrypt file container with a PIM",
            "line": 31,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:129"
            },
            "result": {
              "status": "passed",
              "duration": 8252386851
            }
          },
          {
            "keyword": "And ",
            "name": "I unlock and mount this VeraCrypt file container with Unlock VeraCrypt Volumes",
            "line": 32,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:156"
            },
            "result": {
              "status": "passed",
              "duration": 5694284330
            }
          },
          {
            "keyword": "And ",
            "name": "I open this VeraCrypt volume in GNOME Files",
            "line": 33,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:316"
            },
            "result": {
              "status": "passed",
              "duration": 1849459594
            }
          },
          {
            "keyword": "Then ",
            "name": "I see the expected contents in this VeraCrypt volume",
            "line": 34,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:321"
            },
            "result": {
              "status": "passed",
              "duration": 278021846
            }
          },
          {
            "keyword": "When ",
            "name": "I lock the currently opened VeraCrypt file container",
            "line": 35,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:326"
            },
            "result": {
              "status": "passed",
              "duration": 1289216820
            }
          },
          {
            "keyword": "Then ",
            "name": "the VeraCrypt file container has been unmounted and locked",
            "line": 36,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 74707893
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 911973288
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 527474
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 9497
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2668548
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 18040376584
            }
          }
        ]
      },
      {
        "id": "using-veracrypt-encrypted-volumes;use-unlock-veracrypt-volumes-to-unlock-a-hidden-veracrypt-file-container",
        "keyword": "Scenario",
        "name": "Use Unlock VeraCrypt Volumes to unlock a hidden VeraCrypt file container",
        "description": "",
        "line": 38,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "When ",
            "name": "I plug and mount a USB drive containing a hidden VeraCrypt file container",
            "line": 39,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:129"
            },
            "result": {
              "status": "passed",
              "duration": 24323212745
            }
          },
          {
            "keyword": "And ",
            "name": "I unlock and mount this VeraCrypt file container with Unlock VeraCrypt Volumes",
            "line": 40,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:156"
            },
            "result": {
              "status": "passed",
              "duration": 7326945164
            }
          },
          {
            "keyword": "And ",
            "name": "I open this VeraCrypt volume in GNOME Files",
            "line": 41,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:316"
            },
            "result": {
              "status": "passed",
              "duration": 1633849501
            }
          },
          {
            "keyword": "Then ",
            "name": "I see the expected contents in this VeraCrypt volume",
            "line": 42,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:321"
            },
            "result": {
              "status": "passed",
              "duration": 239273392
            }
          },
          {
            "keyword": "When ",
            "name": "I lock the currently opened VeraCrypt file container",
            "line": 43,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:326"
            },
            "result": {
              "status": "passed",
              "duration": 1267572229
            }
          },
          {
            "keyword": "Then ",
            "name": "the VeraCrypt file container has been unmounted and locked",
            "line": 44,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 64997466
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 790045086
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 11431738
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 12493
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2856109
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 18203518186
            }
          }
        ]
      },
      {
        "id": "using-veracrypt-encrypted-volumes;use-gnome-disks-to-unlock-a-usb-drive-that-has-a-basic-veracrypt-volume-with-a-keyfile",
        "keyword": "Scenario",
        "name": "Use GNOME Disks to unlock a USB drive that has a basic VeraCrypt volume with a keyfile",
        "description": "",
        "line": 48,
        "type": "scenario",
        "comments": [
          {
            "value": "### GNOME Disks",
            "line": 46
          }
        ],
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "When ",
            "name": "I plug a USB drive containing a basic VeraCrypt volume with a keyfile",
            "line": 49,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:124"
            },
            "result": {
              "status": "passed",
              "duration": 17036792347
            }
          },
          {
            "keyword": "And ",
            "name": "I cancel the GNOME authentication prompt",
            "line": 50,
            "match": {
              "location": "features/step_definitions/common_steps.rb:855"
            },
            "result": {
              "status": "passed",
              "duration": 764435557
            }
          },
          {
            "keyword": "And ",
            "name": "I unlock and mount this VeraCrypt volume with GNOME Disks",
            "line": 51,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:194"
            },
            "result": {
              "status": "passed",
              "duration": 8885020104
            }
          },
          {
            "keyword": "And ",
            "name": "I open this VeraCrypt volume in GNOME Files",
            "line": 52,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:316"
            },
            "result": {
              "status": "passed",
              "duration": 1740869398
            }
          },
          {
            "keyword": "Then ",
            "name": "I see the expected contents in this VeraCrypt volume",
            "line": 53,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:321"
            },
            "result": {
              "status": "passed",
              "duration": 238146269
            }
          },
          {
            "keyword": "When ",
            "name": "I lock the currently opened VeraCrypt volume",
            "line": 54,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:326"
            },
            "result": {
              "status": "passed",
              "duration": 1256324273
            }
          },
          {
            "keyword": "Then ",
            "name": "the VeraCrypt volume has been unmounted and locked",
            "line": 55,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 136691566
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 866861311
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 302184
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 9879
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2676814
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6259071643
            }
          }
        ]
      },
      {
        "id": "using-veracrypt-encrypted-volumes;use-gnome-disks-to-unlock-a-usb-drive-that-has-a-hidden-veracrypt-volume",
        "keyword": "Scenario",
        "name": "Use GNOME Disks to unlock a USB drive that has a hidden VeraCrypt volume",
        "description": "",
        "line": 57,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "When ",
            "name": "I plug a USB drive containing a hidden VeraCrypt volume",
            "line": 58,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:124"
            },
            "result": {
              "status": "passed",
              "duration": 17351508993
            }
          },
          {
            "keyword": "And ",
            "name": "I cancel the GNOME authentication prompt",
            "line": 59,
            "match": {
              "location": "features/step_definitions/common_steps.rb:855"
            },
            "result": {
              "status": "passed",
              "duration": 1285423574
            }
          },
          {
            "keyword": "And ",
            "name": "I unlock and mount this VeraCrypt volume with GNOME Disks",
            "line": 60,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:194"
            },
            "result": {
              "status": "passed",
              "duration": 7271134739
            }
          },
          {
            "keyword": "And ",
            "name": "I open this VeraCrypt volume in GNOME Files",
            "line": 61,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:316"
            },
            "result": {
              "status": "passed",
              "duration": 1734949674
            }
          },
          {
            "keyword": "Then ",
            "name": "I see the expected contents in this VeraCrypt volume",
            "line": 62,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:321"
            },
            "result": {
              "status": "passed",
              "duration": 224839423
            }
          },
          {
            "keyword": "When ",
            "name": "I lock the currently opened VeraCrypt volume",
            "line": 63,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:326"
            },
            "result": {
              "status": "passed",
              "duration": 1259262786
            }
          },
          {
            "keyword": "Then ",
            "name": "the VeraCrypt volume has been unmounted and locked",
            "line": 64,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 94545634
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 686836410
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 453735
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 13486
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2806045
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 18024798348
            }
          }
        ]
      },
      {
        "id": "using-veracrypt-encrypted-volumes;use-gnome-disks-to-unlock-a-basic-veracrypt-file-container-with-a-keyfile",
        "keyword": "Scenario",
        "name": "Use GNOME Disks to unlock a basic VeraCrypt file container with a keyfile",
        "description": "",
        "line": 66,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "When ",
            "name": "I plug and mount a USB drive containing a basic VeraCrypt file container with a keyfile",
            "line": 67,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:129"
            },
            "result": {
              "status": "passed",
              "duration": 23855624886
            }
          },
          {
            "keyword": "And ",
            "name": "I unlock and mount this VeraCrypt file container with GNOME Disks",
            "line": 68,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:194"
            },
            "result": {
              "status": "passed",
              "duration": 19228932618
            }
          },
          {
            "keyword": "And ",
            "name": "I open this VeraCrypt volume in GNOME Files",
            "line": 69,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:316"
            },
            "result": {
              "status": "passed",
              "duration": 1705632058
            }
          },
          {
            "keyword": "Then ",
            "name": "I see the expected contents in this VeraCrypt volume",
            "line": 70,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:321"
            },
            "result": {
              "status": "passed",
              "duration": 148889646
            }
          },
          {
            "keyword": "When ",
            "name": "I lock the currently opened VeraCrypt file container",
            "line": 71,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:326"
            },
            "result": {
              "status": "passed",
              "duration": 1443488138
            }
          },
          {
            "keyword": "Then ",
            "name": "the VeraCrypt file container has been unmounted and locked",
            "line": 72,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 194480570
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 645587040
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 9358976
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 11261
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2578161
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6333483295
            }
          }
        ]
      },
      {
        "id": "using-veracrypt-encrypted-volumes;use-gnome-disks-to-unlock-a-hidden-veracrypt-file-container",
        "keyword": "Scenario",
        "name": "Use GNOME Disks to unlock a hidden VeraCrypt file container",
        "description": "",
        "line": 74,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "When ",
            "name": "I plug and mount a USB drive containing a hidden VeraCrypt file container",
            "line": 75,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:129"
            },
            "result": {
              "status": "passed",
              "duration": 24179418636
            }
          },
          {
            "keyword": "And ",
            "name": "I unlock and mount this VeraCrypt file container with GNOME Disks",
            "line": 76,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:194"
            },
            "result": {
              "status": "passed",
              "duration": 15611209531
            }
          },
          {
            "keyword": "And ",
            "name": "I open this VeraCrypt volume in GNOME Files",
            "line": 77,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:316"
            },
            "result": {
              "status": "passed",
              "duration": 1855871862
            }
          },
          {
            "keyword": "Then ",
            "name": "I see the expected contents in this VeraCrypt volume",
            "line": 78,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:321"
            },
            "result": {
              "status": "passed",
              "duration": 137335102
            }
          },
          {
            "keyword": "When ",
            "name": "I lock the currently opened VeraCrypt file container",
            "line": 79,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:326"
            },
            "result": {
              "status": "passed",
              "duration": 1247387033
            }
          },
          {
            "keyword": "Then ",
            "name": "the VeraCrypt file container has been unmounted and locked",
            "line": 80,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 71054686
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 720831076
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 10041931
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 11992
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2633715
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 29704086668
            }
          }
        ]
      },
      {
        "id": "using-veracrypt-encrypted-volumes;use-gnome-disks-to-unlock-a-basic-veracrypt-file-container-with-a-pim",
        "keyword": "Scenario",
        "name": "Use GNOME Disks to unlock a basic VeraCrypt file container with a PIM",
        "description": "",
        "line": 82,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "When ",
            "name": "I plug and mount a USB drive containing a basic VeraCrypt file container with a PIM",
            "line": 83,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:129"
            },
            "result": {
              "status": "passed",
              "duration": 8234577962
            }
          },
          {
            "keyword": "And ",
            "name": "I unlock and mount this VeraCrypt file container with GNOME Disks",
            "line": 84,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:194"
            },
            "result": {
              "status": "passed",
              "duration": 16049194588
            }
          },
          {
            "keyword": "And ",
            "name": "I open this VeraCrypt volume in GNOME Files",
            "line": 85,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:316"
            },
            "result": {
              "status": "passed",
              "duration": 1745454242
            }
          },
          {
            "keyword": "Then ",
            "name": "I see the expected contents in this VeraCrypt volume",
            "line": 86,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:321"
            },
            "result": {
              "status": "passed",
              "duration": 84539826
            }
          },
          {
            "keyword": "When ",
            "name": "I lock the currently opened VeraCrypt file container",
            "line": 87,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:326"
            },
            "result": {
              "status": "passed",
              "duration": 1243178676
            }
          },
          {
            "keyword": "Then ",
            "name": "the VeraCrypt file container has been unmounted and locked",
            "line": 88,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 102239352
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 521725699
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 451153
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/webtunnel.feature",
    "id": "using-webtunnel-tor-bridges",
    "keyword": "Feature",
    "name": "Using WebTunnel Tor bridges",
    "description": "  As a Tails user\n  I want to circumvent censorship of Tor by using WebTunnel bridges\n  And avoid connecting directly to the Tor Network",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 9848
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2652832
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 1738975
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 8,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 78289350
            }
          },
          {
            "keyword": "And ",
            "name": "I set Tails to run with real Tor network",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:201"
            },
            "result": {
              "status": "passed",
              "duration": 20728
            }
          },
          {
            "keyword": "And ",
            "name": "I start the computer",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:205"
            },
            "result": {
              "status": "passed",
              "duration": 608886959
            }
          },
          {
            "keyword": "And ",
            "name": "the computer boots Tails",
            "line": 11,
            "match": {
              "location": "features/step_definitions/common_steps.rb:405"
            },
            "result": {
              "status": "passed",
              "duration": 29903299884
            }
          },
          {
            "keyword": "And ",
            "name": "I bump the system time with \"+8 hours +15 minutes\"",
            "line": 13,
            "comments": [
              {
                "value": "# Let's be sure WebTunnel bridges work with a clock East of UTC",
                "line": 12
              }
            ],
            "match": {
              "location": "features/step_definitions/time_syncing.rb:20"
            },
            "result": {
              "status": "passed",
              "duration": 135618139
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session",
            "line": 14,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 6095099552
            }
          },
          {
            "keyword": "And ",
            "name": "all notifications have disappeared",
            "line": 15,
            "match": {
              "location": "features/step_definitions/common_steps.rb:767"
            },
            "result": {
              "status": "passed",
              "duration": 8096970438
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 16,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 18990505
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 17,
            "match": {
              "location": "features/step_definitions/tor.rb:409"
            },
            "result": {
              "status": "passed",
              "duration": 4162600285
            }
          }
        ]
      },
      {
        "id": "using-webtunnel-tor-bridges;configuring-webtunnel-with-qr-code",
        "keyword": "Scenario",
        "name": "Configuring WebTunnel with QR code",
        "description": "",
        "line": 20,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@supports_real_tor",
            "line": 19
          },
          {
            "name": "@check_tor_leaks",
            "line": 19
          }
        ],
        "steps": [
          {
            "keyword": "When ",
            "name": "I configure some webtunnel bridges from a QR code in the Tor Connection Assistant in hide mode",
            "line": 21,
            "match": {
              "location": "features/step_definitions/tor.rb:655"
            },
            "result": {
              "status": "passed",
              "duration": 30682024311
            }
          },
          {
            "keyword": "Then ",
            "name": "I wait until Tor is ready",
            "line": 22,
            "match": {
              "location": "features/step_definitions/common_steps.rb:710"
            },
            "result": {
              "status": "passed",
              "duration": 3758529238
            }
          },
          {
            "keyword": "And ",
            "name": "available upgrades have been checked",
            "line": 23,
            "match": {
              "location": "features/step_definitions/common_steps.rb:763"
            },
            "result": {
              "status": "passed",
              "duration": 2104256635
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:535"
            },
            "result": {
              "status": "passed",
              "duration": 288284697
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 834958313
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 23507957
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 16080
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 1633519
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 8,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 82535420
            }
          },
          {
            "keyword": "And ",
            "name": "I set Tails to run with real Tor network",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:201"
            },
            "result": {
              "status": "passed",
              "duration": 23683
            }
          },
          {
            "keyword": "And ",
            "name": "I start the computer",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:205"
            },
            "result": {
              "status": "passed",
              "duration": 602313687
            }
          },
          {
            "keyword": "And ",
            "name": "the computer boots Tails",
            "line": 11,
            "match": {
              "location": "features/step_definitions/common_steps.rb:405"
            },
            "result": {
              "status": "passed",
              "duration": 29324526268
            }
          },
          {
            "keyword": "And ",
            "name": "I bump the system time with \"+8 hours +15 minutes\"",
            "line": 13,
            "comments": [
              {
                "value": "# Let's be sure WebTunnel bridges work with a clock East of UTC",
                "line": 12
              }
            ],
            "match": {
              "location": "features/step_definitions/time_syncing.rb:20"
            },
            "result": {
              "status": "passed",
              "duration": 133232219
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session",
            "line": 14,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 5890240028
            }
          },
          {
            "keyword": "And ",
            "name": "all notifications have disappeared",
            "line": 15,
            "match": {
              "location": "features/step_definitions/common_steps.rb:767"
            },
            "result": {
              "status": "passed",
              "duration": 8396305319
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 16,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 24322418
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 17,
            "match": {
              "location": "features/step_definitions/tor.rb:409"
            },
            "result": {
              "status": "passed",
              "duration": 4207896708
            }
          }
        ]
      },
      {
        "id": "using-webtunnel-tor-bridges;typing-webtunnel-pluggable-transports-directly",
        "keyword": "Scenario",
        "name": "Typing WebTunnel pluggable transports directly",
        "description": "",
        "line": 25,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "When ",
            "name": "I configure some webtunnel bridges in the Tor Connection Assistant in hide mode without connecting",
            "line": 26,
            "match": {
              "location": "features/step_definitions/tor.rb:655"
            },
            "result": {
              "status": "passed",
              "duration": 4290178527
            }
          },
          {
            "keyword": "Then ",
            "name": "I can click the \"Connect to Tor\" button",
            "line": 31,
            "comments": [
              {
                "value": "# We could actually click to Connect to Tor, which would exercise a slightly different code path, but:",
                "line": 27
              },
              {
                "value": "#  - this would use the real tor network, on which we expect more problems, so let's avoid",
                "line": 28
              },
              {
                "value": "#  - \"Configuring WebTunnel with QR code\" is already testing webtunnel bridges",
                "line": 29
              },
              {
                "value": "# So let's not",
                "line": 30
              }
            ],
            "match": {
              "location": "features/step_definitions/tor.rb:965"
            },
            "result": {
              "status": "passed",
              "duration": 183090371
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 497711436
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 6020388
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/whisperback.feature",
    "id": "i-can-report-a-bug-with-whisperback",
    "keyword": "Feature",
    "name": "I can report a bug with WhisperBack",
    "description": "  As a Tails user\n  When I experience a bug in Tails\n  I want to send a complete bug report to the Tails team",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "i-can-report-a-bug-with-whisperback;the-amnesia-user-cannot-run-tails-debugging-info-as-root",
        "keyword": "Scenario",
        "name": "The amnesia user cannot run tails-debugging-info as root",
        "description": "",
        "line": 8,
        "type": "scenario",
        "comments": [
          {
            "value": "# Anti-test: tails-debugging-info is not available to amnesia",
            "line": 7
          }
        ],
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 13966
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 1629592
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 9,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6280346137
            }
          },
          {
            "keyword": "Then ",
            "name": "running \"sudo /usr/local/sbin/tails-debugging-info\" as user \"amnesia\" fails",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1837"
            },
            "result": {
              "status": "passed",
              "duration": 55337138
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 794371907
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 23944
            }
          }
        ]
      },
      {
        "id": "i-can-report-a-bug-with-whisperback;all-debugging-information-can-be-retrieved",
        "keyword": "Scenario",
        "name": "All debugging information can be retrieved",
        "description": "",
        "line": 12,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 11191
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2583783
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 13,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6223303229
            }
          },
          {
            "keyword": "Then ",
            "name": "running \"/usr/local/sbin/tails-debugging-info --strict\" as user \"root\" succeeds",
            "line": 14,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1832"
            },
            "result": {
              "status": "passed",
              "duration": 706919740
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 733463857
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 21751
            }
          }
        ]
      },
      {
        "id": "i-can-report-a-bug-with-whisperback;whisperback-has-access-to-debugging-information",
        "keyword": "Scenario",
        "name": "WhisperBack has access to debugging information",
        "description": "",
        "line": 16,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 12143
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2626452
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 17,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6274798094
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"WhisperBack\" via GNOME Activities Overview",
            "line": 18,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1205"
            },
            "result": {
              "status": "passed",
              "duration": 8103802301
            }
          },
          {
            "keyword": "Then ",
            "name": "WhisperBack has debugging information",
            "line": 19,
            "match": {
              "location": "features/step_definitions/whisperback.rb:9"
            },
            "result": {
              "status": "passed",
              "duration": 2237468132
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 833836242
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 21310
            }
          }
        ]
      }
    ]
  }
]