[
  {
    "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 25648
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 46735633
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 7,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 561262327
            }
          },
          {
            "keyword": "And ",
            "name": "I temporarily create a 100 MiB disk named \"swap\"",
            "line": 8,
            "match": {
              "location": "features/step_definitions/common_steps.rb:111"
            },
            "result": {
              "status": "passed",
              "duration": 40886909
            }
          },
          {
            "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": 5897993688
            }
          },
          {
            "keyword": "And ",
            "name": "I plug SATA drive \"swap\"",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:123"
            },
            "result": {
              "status": "passed",
              "duration": 1071005211
            }
          },
          {
            "keyword": "And ",
            "name": "I temporarily create a 7200 MiB disk named \"live_hd\"",
            "line": 11,
            "match": {
              "location": "features/step_definitions/common_steps.rb:111"
            },
            "result": {
              "status": "passed",
              "duration": 9983856
            }
          },
          {
            "keyword": "And ",
            "name": "I write the Tails USB image to disk \"live_hd\"",
            "line": 12,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1754"
            },
            "result": {
              "status": "passed",
              "duration": 13549687190
            }
          },
          {
            "keyword": "And ",
            "name": "I plug SATA drive \"live_hd\"",
            "line": 13,
            "match": {
              "location": "features/step_definitions/common_steps.rb:123"
            },
            "result": {
              "status": "passed",
              "duration": 1032765606
            }
          },
          {
            "keyword": "When ",
            "name": "I start Tails with network unplugged and I login",
            "line": 14,
            "match": {
              "location": "features/step_definitions/common_steps.rb:211"
            },
            "result": {
              "status": "passed",
              "duration": 52739202765
            }
          },
          {
            "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": 63757443
            }
          },
          {
            "keyword": "And ",
            "name": "drive \"live_hd\" is detected by Tails",
            "line": 16,
            "match": {
              "location": "features/step_definitions/common_steps.rb:129"
            },
            "result": {
              "status": "passed",
              "duration": 66096146
            }
          },
          {
            "keyword": "But ",
            "name": "Tails has no disk swap enabled",
            "line": 17,
            "match": {
              "location": "features/step_definitions/untrusted_partitions.rb:13"
            },
            "result": {
              "status": "passed",
              "duration": 60857638
            }
          },
          {
            "keyword": "And ",
            "name": "drive \"live_hd\" is not mounted",
            "line": 18,
            "match": {
              "location": "features/step_definitions/untrusted_partitions.rb:32"
            },
            "result": {
              "status": "passed",
              "duration": 62018904
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 588621583
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 98927896
            }
          }
        ]
      },
      {
        "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 19768
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 1572398
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 21,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 50384434
            }
          },
          {
            "keyword": "And ",
            "name": "I temporarily create a 100 MiB disk named \"fake_TailsData\"",
            "line": 22,
            "match": {
              "location": "features/step_definitions/common_steps.rb:111"
            },
            "result": {
              "status": "passed",
              "duration": 7104398
            }
          },
          {
            "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": 17033922873
            }
          },
          {
            "keyword": "And ",
            "name": "I plug non-removable USB drive \"fake_TailsData\"",
            "line": 24,
            "match": {
              "location": "features/step_definitions/common_steps.rb:123"
            },
            "result": {
              "status": "passed",
              "duration": 1017277234
            }
          },
          {
            "keyword": "When ",
            "name": "I start the computer",
            "line": 25,
            "match": {
              "location": "features/step_definitions/common_steps.rb:202"
            },
            "result": {
              "status": "passed",
              "duration": 762359222
            }
          },
          {
            "keyword": "And ",
            "name": "the computer boots Tails",
            "line": 26,
            "match": {
              "location": "features/step_definitions/common_steps.rb:402"
            },
            "result": {
              "status": "passed",
              "duration": 33707993242
            }
          },
          {
            "keyword": "Then ",
            "name": "drive \"fake_TailsData\" is detected by Tails",
            "line": 27,
            "match": {
              "location": "features/step_definitions/common_steps.rb:129"
            },
            "result": {
              "status": "passed",
              "duration": 322756858
            }
          },
          {
            "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": 12777296797
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 901297236
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 6782545
            }
          }
        ]
      },
      {
        "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 16310
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 1361272
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 31,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 58313656
            }
          },
          {
            "keyword": "And ",
            "name": "I temporarily create a 100 MiB disk named \"fake_TailsData\"",
            "line": 32,
            "match": {
              "location": "features/step_definitions/common_steps.rb:111"
            },
            "result": {
              "status": "passed",
              "duration": 11049294
            }
          },
          {
            "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": 18487033611
            }
          },
          {
            "keyword": "And ",
            "name": "I plug SATA drive \"fake_TailsData\"",
            "line": 34,
            "match": {
              "location": "features/step_definitions/common_steps.rb:123"
            },
            "result": {
              "status": "passed",
              "duration": 1036991993
            }
          },
          {
            "keyword": "When ",
            "name": "I start the computer",
            "line": 35,
            "match": {
              "location": "features/step_definitions/common_steps.rb:202"
            },
            "result": {
              "status": "passed",
              "duration": 775598546
            }
          },
          {
            "keyword": "And ",
            "name": "the computer boots Tails",
            "line": 36,
            "match": {
              "location": "features/step_definitions/common_steps.rb:402"
            },
            "result": {
              "status": "passed",
              "duration": 33771701164
            }
          },
          {
            "keyword": "Then ",
            "name": "drive \"fake_TailsData\" is detected by Tails",
            "line": 37,
            "match": {
              "location": "features/step_definitions/common_steps.rb:129"
            },
            "result": {
              "status": "passed",
              "duration": 55228503
            }
          },
          {
            "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": 12424456518
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 782319737
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 19126635
            }
          }
        ]
      },
      {
        "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 68068
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 2925264
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 41,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 50297289
            }
          },
          {
            "keyword": "And ",
            "name": "I temporarily create a 100 MiB disk named \"gpt_ext2\"",
            "line": 42,
            "match": {
              "location": "features/step_definitions/common_steps.rb:111"
            },
            "result": {
              "status": "passed",
              "duration": 7952850
            }
          },
          {
            "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": 2647886534
            }
          },
          {
            "keyword": "And ",
            "name": "I plug SATA drive \"gpt_ext2\"",
            "line": 44,
            "match": {
              "location": "features/step_definitions/common_steps.rb:123"
            },
            "result": {
              "status": "passed",
              "duration": 1016231248
            }
          },
          {
            "keyword": "And ",
            "name": "I temporarily create a 100 MiB disk named \"msdos_fat32\"",
            "line": 45,
            "match": {
              "location": "features/step_definitions/common_steps.rb:111"
            },
            "result": {
              "status": "passed",
              "duration": 9682371
            }
          },
          {
            "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": 2582575269
            }
          },
          {
            "keyword": "And ",
            "name": "I plug SATA drive \"msdos_fat32\"",
            "line": 47,
            "match": {
              "location": "features/step_definitions/common_steps.rb:123"
            },
            "result": {
              "status": "passed",
              "duration": 1019162301
            }
          },
          {
            "keyword": "And ",
            "name": "I start Tails from DVD with network unplugged and I login",
            "line": 48,
            "match": {
              "location": "features/step_definitions/common_steps.rb:211"
            },
            "result": {
              "status": "passed",
              "duration": 50252919265
            }
          },
          {
            "keyword": "Then ",
            "name": "drive \"gpt_ext2\" is detected by Tails",
            "line": 49,
            "match": {
              "location": "features/step_definitions/common_steps.rb:129"
            },
            "result": {
              "status": "passed",
              "duration": 62581437
            }
          },
          {
            "keyword": "And ",
            "name": "drive \"gpt_ext2\" is not mounted",
            "line": 50,
            "match": {
              "location": "features/step_definitions/untrusted_partitions.rb:32"
            },
            "result": {
              "status": "passed",
              "duration": 52917170
            }
          },
          {
            "keyword": "And ",
            "name": "drive \"msdos_fat32\" is detected by Tails",
            "line": 51,
            "match": {
              "location": "features/step_definitions/common_steps.rb:129"
            },
            "result": {
              "status": "passed",
              "duration": 48350440
            }
          },
          {
            "keyword": "And ",
            "name": "drive \"msdos_fat32\" is not mounted",
            "line": 52,
            "match": {
              "location": "features/step_definitions/untrusted_partitions.rb:32"
            },
            "result": {
              "status": "passed",
              "duration": 74507573
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 865037808
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 5720985
            }
          }
        ]
      }
    ]
  },
  {
    "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 15970
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 1140247
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 84729193808
            }
          },
          {
            "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": 61748731
            }
          },
          {
            "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": 76709108
            }
          },
          {
            "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": 5902346473
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 982673758
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 5337166
            }
          }
        ]
      },
      {
        "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 18565
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 1541930
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 13,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 36877977547
            }
          },
          {
            "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": 96909948
            }
          },
          {
            "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": 211917023
            }
          },
          {
            "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": 17442591804
            }
          },
          {
            "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": 27646853676
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 546411548
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 21872
            }
          }
        ]
      }
    ]
  },
  {
    "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 19897
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 2507571
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:523"
            },
            "result": {
              "status": "passed",
              "duration": 2085319
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6817284210
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 35176995
            }
          },
          {
            "keyword": "And ",
            "name": "I successfully configure Tor",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:675"
            },
            "result": {
              "status": "passed",
              "duration": 12618917141
            }
          },
          {
            "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": 44215439
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:531"
            },
            "result": {
              "status": "passed",
              "duration": 226594510
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 1059887326
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 254336
            }
          }
        ]
      },
      {
        "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 14828
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 1952059
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:523"
            },
            "result": {
              "status": "passed",
              "duration": 4939149
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 14,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 7106765595
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 15,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 45376316
            }
          },
          {
            "keyword": "And ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 16,
            "match": {
              "location": "features/step_definitions/tor.rb:370"
            },
            "result": {
              "status": "passed",
              "duration": 2264882625
            }
          },
          {
            "keyword": "And ",
            "name": "I configure some normal bridges in the Tor Connection Assistant",
            "line": 17,
            "match": {
              "location": "features/step_definitions/tor.rb:616"
            },
            "result": {
              "status": "passed",
              "duration": 11106103354
            }
          },
          {
            "keyword": "And ",
            "name": "I wait until Tor is ready",
            "line": 18,
            "match": {
              "location": "features/step_definitions/common_steps.rb:705"
            },
            "result": {
              "status": "passed",
              "duration": 1409750745
            }
          },
          {
            "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": 66049228
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:531"
            },
            "result": {
              "status": "passed",
              "duration": 194306868
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 1139043675
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 86041
            }
          }
        ]
      },
      {
        "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 12463
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 3036612
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:523"
            },
            "result": {
              "status": "passed",
              "duration": 6112750
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 22,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6702947595
            }
          },
          {
            "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": 207584361
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 24,
            "match": {
              "location": "features/step_definitions/common_steps.rb:185"
            },
            "result": {
              "status": "passed",
              "duration": 2083846
            }
          },
          {
            "keyword": "And ",
            "name": "the network is plugged",
            "line": 25,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 26630964
            }
          },
          {
            "keyword": "And ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 26,
            "match": {
              "location": "features/step_definitions/tor.rb:370"
            },
            "result": {
              "status": "passed",
              "duration": 2303637658
            }
          },
          {
            "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:616"
            },
            "result": {
              "status": "passed",
              "duration": 13914100551
            }
          },
          {
            "keyword": "And ",
            "name": "I wait until Tor is ready",
            "line": 28,
            "match": {
              "location": "features/step_definitions/common_steps.rb:705"
            },
            "result": {
              "status": "passed",
              "duration": 1170791401
            }
          },
          {
            "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": 33180001
            }
          },
          {
            "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:1020"
            },
            "result": {
              "status": "passed",
              "duration": 290191598
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:531"
            },
            "result": {
              "status": "passed",
              "duration": 203733900
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 993395944
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 35584659
            }
          }
        ]
      },
      {
        "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 16150
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 2829754
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:523"
            },
            "result": {
              "status": "passed",
              "duration": 4372907
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 34,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6652580970
            }
          },
          {
            "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": 227415877
            }
          },
          {
            "keyword": "And ",
            "name": "I warm reboot the computer",
            "line": 36,
            "match": {
              "location": "features/step_definitions/common_steps.rb:933"
            },
            "result": {
              "status": "passed",
              "duration": 6515124
            }
          },
          {
            "keyword": "And ",
            "name": "the computer reboots Tails",
            "line": 37,
            "match": {
              "location": "features/step_definitions/common_steps.rb:402"
            },
            "result": {
              "status": "passed",
              "duration": 50669265883
            }
          },
          {
            "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": 1083011560
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:531"
            },
            "result": {
              "status": "passed",
              "duration": 82248137
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 708774365
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 5900090
            }
          }
        ]
      },
      {
        "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 16912
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 1771630
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:523"
            },
            "result": {
              "status": "passed",
              "duration": 1829008
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 42,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6630801295
            }
          },
          {
            "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": 1572581403
            }
          },
          {
            "keyword": "And ",
            "name": "I warm reboot the computer",
            "line": 44,
            "match": {
              "location": "features/step_definitions/common_steps.rb:933"
            },
            "result": {
              "status": "passed",
              "duration": 5107636
            }
          },
          {
            "keyword": "And ",
            "name": "the computer reboots Tails",
            "line": 45,
            "match": {
              "location": "features/step_definitions/common_steps.rb:402"
            },
            "result": {
              "status": "passed",
              "duration": 50459995724
            }
          },
          {
            "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": 536255525
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:531"
            },
            "result": {
              "status": "passed",
              "duration": 81534218
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 935363777
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 5504348
            }
          }
        ]
      },
      {
        "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 15148
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 1270483
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:523"
            },
            "result": {
              "status": "passed",
              "duration": 1465637
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 49,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 59835671
            }
          },
          {
            "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:173"
            },
            "result": {
              "status": "passed",
              "duration": 8012521
            }
          },
          {
            "keyword": "And ",
            "name": "I start the computer",
            "line": 51,
            "match": {
              "location": "features/step_definitions/common_steps.rb:202"
            },
            "result": {
              "status": "passed",
              "duration": 712032308
            }
          },
          {
            "keyword": "And ",
            "name": "the computer boots Tails",
            "line": 52,
            "match": {
              "location": "features/step_definitions/common_steps.rb:402"
            },
            "result": {
              "status": "passed",
              "duration": 34048665800
            }
          },
          {
            "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": 364410716
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:531"
            },
            "result": {
              "status": "passed",
              "duration": 80098667
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 953666610
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 5201871
            }
          }
        ]
      },
      {
        "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 15930
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 1210089
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:523"
            },
            "result": {
              "status": "passed",
              "duration": 1442685
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 56,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6731998306
            }
          },
          {
            "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": 1094535202
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 58,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 20922242
            }
          },
          {
            "keyword": "And ",
            "name": "I successfully configure Tor",
            "line": 59,
            "match": {
              "location": "features/step_definitions/common_steps.rb:675"
            },
            "result": {
              "status": "passed",
              "duration": 18202887459
            }
          },
          {
            "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": 40746065
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:531"
            },
            "result": {
              "status": "passed",
              "duration": 196805132
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 914049382
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 782046
            }
          }
        ]
      },
      {
        "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 12133
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 1804152
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:523"
            },
            "result": {
              "status": "passed",
              "duration": 1491607
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 63,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6618081737
            }
          },
          {
            "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": 273553170
            }
          },
          {
            "keyword": "And ",
            "name": "all notifications have disappeared",
            "line": 65,
            "match": {
              "location": "features/step_definitions/common_steps.rb:762"
            },
            "result": {
              "status": "passed",
              "duration": 3426469748
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 66,
            "match": {
              "location": "features/step_definitions/common_steps.rb:185"
            },
            "result": {
              "status": "passed",
              "duration": 2754554
            }
          },
          {
            "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": 73716193
            }
          },
          {
            "keyword": "And ",
            "name": "the network is plugged",
            "line": 68,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 14937403
            }
          },
          {
            "keyword": "And ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 69,
            "match": {
              "location": "features/step_definitions/tor.rb:370"
            },
            "result": {
              "status": "passed",
              "duration": 2456540580
            }
          },
          {
            "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:616"
            },
            "result": {
              "status": "passed",
              "duration": 4616532602
            }
          },
          {
            "keyword": "And ",
            "name": "I click \"Connect to Tor\"",
            "line": 71,
            "match": {
              "location": "features/step_definitions/tor.rb:922"
            },
            "result": {
              "status": "passed",
              "duration": 1223744477
            }
          },
          {
            "keyword": "And ",
            "name": "the Tor Connection Assistant fails to connect to Tor",
            "line": 72,
            "match": {
              "location": "features/step_definitions/tor.rb:423"
            },
            "result": {
              "status": "passed",
              "duration": 15994357690
            }
          },
          {
            "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:931"
            },
            "result": {
              "status": "passed",
              "duration": 15297237618
            }
          },
          {
            "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": 386491654
            }
          },
          {
            "keyword": "When ",
            "name": "I click \"Connect to Tor\"",
            "line": 76,
            "match": {
              "location": "features/step_definitions/tor.rb:922"
            },
            "result": {
              "status": "passed",
              "duration": 1136141933
            }
          },
          {
            "keyword": "Then ",
            "name": "I wait until Tor is ready",
            "line": 77,
            "match": {
              "location": "features/step_definitions/common_steps.rb:705"
            },
            "result": {
              "status": "passed",
              "duration": 5317256887
            }
          },
          {
            "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:1020"
            },
            "result": {
              "status": "passed",
              "duration": 224693481
            }
          },
          {
            "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": 58780853
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:531"
            },
            "result": {
              "status": "passed",
              "duration": 173246557
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 940125090
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 60431067
            }
          }
        ]
      },
      {
        "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 11812
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 1861781
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:523"
            },
            "result": {
              "status": "passed",
              "duration": 4670576
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 83,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6555547289
            }
          },
          {
            "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": 199919886
            }
          },
          {
            "keyword": "And ",
            "name": "all notifications have disappeared",
            "line": 85,
            "match": {
              "location": "features/step_definitions/common_steps.rb:762"
            },
            "result": {
              "status": "passed",
              "duration": 3565441067
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 86,
            "match": {
              "location": "features/step_definitions/common_steps.rb:185"
            },
            "result": {
              "status": "passed",
              "duration": 2073918
            }
          },
          {
            "keyword": "And ",
            "name": "the network is plugged",
            "line": 87,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 46618864
            }
          },
          {
            "keyword": "And ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 88,
            "match": {
              "location": "features/step_definitions/tor.rb:370"
            },
            "result": {
              "status": "passed",
              "duration": 2292440902
            }
          },
          {
            "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:616"
            },
            "result": {
              "status": "passed",
              "duration": 4112468363
            }
          },
          {
            "keyword": "And ",
            "name": "I click \"Connect to Tor\"",
            "line": 91,
            "match": {
              "location": "features/step_definitions/tor.rb:922"
            },
            "result": {
              "status": "passed",
              "duration": 1255287461
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant reports that it failed to connect",
            "line": 92,
            "match": {
              "location": "features/step_definitions/tor.rb:875"
            },
            "result": {
              "status": "passed",
              "duration": 11465874961
            }
          },
          {
            "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:931"
            },
            "result": {
              "status": "passed",
              "duration": 15332004788
            }
          },
          {
            "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": 397398486
            }
          },
          {
            "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": 228306187
            }
          },
          {
            "keyword": "When ",
            "name": "I click \"Connect to Tor\"",
            "line": 98,
            "match": {
              "location": "features/step_definitions/tor.rb:922"
            },
            "result": {
              "status": "passed",
              "duration": 1119452998
            }
          },
          {
            "keyword": "Then ",
            "name": "I wait until Tor is ready",
            "line": 99,
            "match": {
              "location": "features/step_definitions/common_steps.rb:705"
            },
            "result": {
              "status": "passed",
              "duration": 6245079351
            }
          },
          {
            "keyword": "And ",
            "name": "all Internet traffic has only flowed through the configured bridges",
            "line": 100,
            "match": {
              "location": "features/step_definitions/tor.rb:1020"
            },
            "result": {
              "status": "passed",
              "duration": 308187265
            }
          },
          {
            "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": 58906610
            }
          },
          {
            "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": 383295096
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:531"
            },
            "result": {
              "status": "passed",
              "duration": 305208721
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 857618819
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 42128576
            }
          }
        ]
      },
      {
        "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 12133
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 2001191
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:523"
            },
            "result": {
              "status": "passed",
              "duration": 4582350
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 106,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6751334986
            }
          },
          {
            "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": 1110173723
            }
          },
          {
            "keyword": "And ",
            "name": "the network is plugged",
            "line": 108,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 17856714
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 109,
            "match": {
              "location": "features/step_definitions/common_steps.rb:650"
            },
            "result": {
              "status": "passed",
              "duration": 8392336227
            }
          },
          {
            "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": 1100322
            }
          },
          {
            "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": 543881952
            }
          },
          {
            "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": 177963
            }
          },
          {
            "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": 2979064
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:531"
            },
            "result": {
              "status": "passed",
              "duration": 273682090
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 668081282
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 701847
            }
          }
        ]
      }
    ]
  },
  {
    "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 13065
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 2840114
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6724518602
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:185"
            },
            "result": {
              "status": "passed",
              "duration": 3577296
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 21836196
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 11,
            "match": {
              "location": "features/step_definitions/tor.rb:370"
            },
            "result": {
              "status": "passed",
              "duration": 1759702084
            }
          }
        ]
      },
      {
        "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:616"
            },
            "result": {
              "status": "passed",
              "duration": 11769994080
            }
          },
          {
            "keyword": "Then ",
            "name": "I wait until Tor is ready",
            "line": 15,
            "match": {
              "location": "features/step_definitions/common_steps.rb:705"
            },
            "result": {
              "status": "passed",
              "duration": 1264834006
            }
          },
          {
            "keyword": "And ",
            "name": "tca.conf includes the configured bridges",
            "line": 16,
            "match": {
              "location": "features/step_definitions/tor.rb:1161"
            },
            "result": {
              "status": "passed",
              "duration": 6247985
            }
          },
          {
            "keyword": "And ",
            "name": "available upgrades have been checked",
            "line": 17,
            "match": {
              "location": "features/step_definitions/common_steps.rb:758"
            },
            "result": {
              "status": "passed",
              "duration": 2129907541
            }
          },
          {
            "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:1020"
            },
            "result": {
              "status": "passed",
              "duration": 255715929
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 795154940
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 88001462
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 14367
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 2232405
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6549542124
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:185"
            },
            "result": {
              "status": "passed",
              "duration": 2784569
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 21026457
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 11,
            "match": {
              "location": "features/step_definitions/tor.rb:370"
            },
            "result": {
              "status": "passed",
              "duration": 2314495951
            }
          }
        ]
      },
      {
        "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:616"
            },
            "result": {
              "status": "passed",
              "duration": 10128598093
            }
          },
          {
            "keyword": "Then ",
            "name": "I wait until Tor is ready",
            "line": 22,
            "match": {
              "location": "features/step_definitions/common_steps.rb:705"
            },
            "result": {
              "status": "passed",
              "duration": 1066047491
            }
          },
          {
            "keyword": "And ",
            "name": "tca.conf includes the configured bridges",
            "line": 23,
            "match": {
              "location": "features/step_definitions/tor.rb:1161"
            },
            "result": {
              "status": "passed",
              "duration": 5474131
            }
          },
          {
            "keyword": "And ",
            "name": "available upgrades have been checked",
            "line": 24,
            "match": {
              "location": "features/step_definitions/common_steps.rb:758"
            },
            "result": {
              "status": "passed",
              "duration": 2129503824
            }
          },
          {
            "keyword": "And ",
            "name": "all Internet traffic has only flowed through the configured bridges",
            "line": 25,
            "match": {
              "location": "features/step_definitions/tor.rb:1020"
            },
            "result": {
              "status": "passed",
              "duration": 240270921
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 768641482
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 46095574
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 16321
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 2834032
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 7098799492
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:185"
            },
            "result": {
              "status": "passed",
              "duration": 2464159
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 16915331
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 11,
            "match": {
              "location": "features/step_definitions/tor.rb:370"
            },
            "result": {
              "status": "passed",
              "duration": 2461687529
            }
          }
        ]
      },
      {
        "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:616"
            },
            "result": {
              "status": "passed",
              "duration": 28670834618
            }
          },
          {
            "keyword": "Then ",
            "name": "I wait until Tor is ready",
            "line": 29,
            "match": {
              "location": "features/step_definitions/common_steps.rb:705"
            },
            "result": {
              "status": "passed",
              "duration": 1164592600
            }
          },
          {
            "keyword": "And ",
            "name": "tca.conf includes the configured bridges",
            "line": 30,
            "match": {
              "location": "features/step_definitions/tor.rb:1161"
            },
            "result": {
              "status": "passed",
              "duration": 4789789
            }
          },
          {
            "keyword": "And ",
            "name": "available upgrades have been checked",
            "line": 31,
            "match": {
              "location": "features/step_definitions/common_steps.rb:758"
            },
            "result": {
              "status": "passed",
              "duration": 2129413653
            }
          },
          {
            "keyword": "And ",
            "name": "all Internet traffic has only flowed through the configured bridges",
            "line": 32,
            "match": {
              "location": "features/step_definitions/tor.rb:1020"
            },
            "result": {
              "status": "passed",
              "duration": 291630754
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 940202991
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 30554120
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 7924
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 3482157
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6727282508
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:185"
            },
            "result": {
              "status": "passed",
              "duration": 2001541
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 51538169
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 11,
            "match": {
              "location": "features/step_definitions/tor.rb:370"
            },
            "result": {
              "status": "passed",
              "duration": 2287248163
            }
          }
        ]
      },
      {
        "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:616"
            },
            "result": {
              "status": "passed",
              "duration": 11931111521
            }
          },
          {
            "keyword": "Then ",
            "name": "I wait until Tor is ready",
            "line": 37,
            "match": {
              "location": "features/step_definitions/common_steps.rb:705"
            },
            "result": {
              "status": "passed",
              "duration": 964799698
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is configured to use the default bridges",
            "line": 38,
            "match": {
              "location": "features/step_definitions/tor.rb:1120"
            },
            "result": {
              "status": "passed",
              "duration": 331434011
            }
          },
          {
            "keyword": "And ",
            "name": "tca.conf includes no bridge",
            "line": 39,
            "match": {
              "location": "features/step_definitions/tor.rb:1157"
            },
            "result": {
              "status": "passed",
              "duration": 4950190
            }
          },
          {
            "keyword": "And ",
            "name": "available upgrades have been checked",
            "line": 40,
            "match": {
              "location": "features/step_definitions/common_steps.rb:758"
            },
            "result": {
              "status": "passed",
              "duration": 2156518876
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is configured to use the default bridges",
            "line": 41,
            "match": {
              "location": "features/step_definitions/tor.rb:1120"
            },
            "result": {
              "status": "passed",
              "duration": 327868047
            }
          },
          {
            "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:1020"
            },
            "result": {
              "status": "passed",
              "duration": 303821617
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 902188813
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 51191047
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 10710
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 3975913
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6631484523
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:185"
            },
            "result": {
              "status": "passed",
              "duration": 3997353
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 39253638
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 11,
            "match": {
              "location": "features/step_definitions/tor.rb:370"
            },
            "result": {
              "status": "passed",
              "duration": 1818847070
            }
          }
        ]
      },
      {
        "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:1081"
            },
            "result": {
              "status": "passed",
              "duration": 1325486609
            }
          },
          {
            "keyword": "When ",
            "name": "I configure a direct connection in the Tor Connection Assistant",
            "line": 46,
            "match": {
              "location": "features/step_definitions/tor.rb:513"
            },
            "result": {
              "status": "passed",
              "duration": 20190494542
            }
          },
          {
            "keyword": "Then ",
            "name": "I wait until Tor is ready",
            "line": 47,
            "match": {
              "location": "features/step_definitions/common_steps.rb:705"
            },
            "result": {
              "status": "passed",
              "duration": 1472964464
            }
          },
          {
            "keyword": "And ",
            "name": "tca.conf includes no bridge",
            "line": 48,
            "match": {
              "location": "features/step_definitions/tor.rb:1157"
            },
            "result": {
              "status": "passed",
              "duration": 4753461
            }
          },
          {
            "keyword": "And ",
            "name": "available upgrades have been checked",
            "line": 49,
            "match": {
              "location": "features/step_definitions/common_steps.rb:758"
            },
            "result": {
              "status": "passed",
              "duration": 2137867602
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is configured to use the default bridges",
            "line": 50,
            "match": {
              "location": "features/step_definitions/tor.rb:1120"
            },
            "result": {
              "status": "passed",
              "duration": 370614551
            }
          },
          {
            "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:1020"
            },
            "result": {
              "status": "passed",
              "duration": 288258351
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 901256405
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 33821925
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 11601
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 1996694
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6783974534
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:185"
            },
            "result": {
              "status": "passed",
              "duration": 10304487
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 23351346
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 11,
            "match": {
              "location": "features/step_definitions/tor.rb:370"
            },
            "result": {
              "status": "passed",
              "duration": 2324799460
            }
          }
        ]
      },
      {
        "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:1081"
            },
            "result": {
              "status": "passed",
              "duration": 1205872493
            }
          },
          {
            "keyword": "When ",
            "name": "I unsuccessfully configure a direct connection in the Tor Connection Assistant",
            "line": 55,
            "match": {
              "location": "features/step_definitions/tor.rb:750"
            },
            "result": {
              "status": "passed",
              "duration": 31315122044
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant reports that it failed to connect",
            "line": 56,
            "match": {
              "location": "features/step_definitions/tor.rb:875"
            },
            "result": {
              "status": "passed",
              "duration": 121194729
            }
          },
          {
            "keyword": "And ",
            "name": "tca.conf is empty",
            "line": 57,
            "match": {
              "location": "features/step_definitions/tor.rb:1149"
            },
            "result": {
              "status": "passed",
              "duration": 505594784
            }
          },
          {
            "keyword": "Given ",
            "name": "the Tor network and default bridges are unblocked",
            "line": 58,
            "match": {
              "location": "features/step_definitions/tor.rb:1081"
            },
            "result": {
              "status": "passed",
              "duration": 1292673475
            }
          },
          {
            "keyword": "When ",
            "name": "I retry connecting to Tor",
            "line": 59,
            "match": {
              "location": "features/step_definitions/tor.rb:922"
            },
            "result": {
              "status": "passed",
              "duration": 1114753705
            }
          },
          {
            "keyword": "Then ",
            "name": "I wait until Tor is ready",
            "line": 60,
            "match": {
              "location": "features/step_definitions/common_steps.rb:705"
            },
            "result": {
              "status": "passed",
              "duration": 5144230025
            }
          },
          {
            "keyword": "And ",
            "name": "tca.conf includes no bridge",
            "line": 61,
            "match": {
              "location": "features/step_definitions/tor.rb:1157"
            },
            "result": {
              "status": "passed",
              "duration": 5178388
            }
          },
          {
            "keyword": "And ",
            "name": "available upgrades have been checked",
            "line": 62,
            "match": {
              "location": "features/step_definitions/common_steps.rb:758"
            },
            "result": {
              "status": "passed",
              "duration": 2176160726
            }
          },
          {
            "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:1020"
            },
            "result": {
              "status": "passed",
              "duration": 342779502
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 821121645
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 34664003
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 12543
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 2398998
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6563411211
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:185"
            },
            "result": {
              "status": "passed",
              "duration": 12834099
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 21024924
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 11,
            "match": {
              "location": "features/step_definitions/tor.rb:370"
            },
            "result": {
              "status": "passed",
              "duration": 2382052943
            }
          }
        ]
      },
      {
        "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:762"
            },
            "result": {
              "status": "passed",
              "duration": 4092604016
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant complains that normal bridges are not allowed",
            "line": 68,
            "match": {
              "location": "features/step_definitions/tor.rb:900"
            },
            "result": {
              "status": "passed",
              "duration": 192471497
            }
          },
          {
            "keyword": "And ",
            "name": "I cannot click the \"Connect to Tor\" button",
            "line": 69,
            "match": {
              "location": "features/step_definitions/tor.rb:926"
            },
            "result": {
              "status": "passed",
              "duration": 219003424
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 743056170
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 36639857
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 11813
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 1996554
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6828739089
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:185"
            },
            "result": {
              "status": "passed",
              "duration": 2884098
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 33878691
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 11,
            "match": {
              "location": "features/step_definitions/tor.rb:370"
            },
            "result": {
              "status": "passed",
              "duration": 2348766477
            }
          }
        ]
      },
      {
        "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:513"
            },
            "result": {
              "status": "passed",
              "duration": 5663498003
            }
          },
          {
            "keyword": "And ",
            "name": "I wait until Tor is ready",
            "line": 73,
            "match": {
              "location": "features/step_definitions/common_steps.rb:705"
            },
            "result": {
              "status": "passed",
              "duration": 2036261574
            }
          },
          {
            "keyword": "When ",
            "name": "I disconnect the network through GNOME",
            "line": 74,
            "match": {
              "location": "features/step_definitions/common_steps.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 10719527882
            }
          },
          {
            "keyword": "And ",
            "name": "I connect the network through GNOME",
            "line": 75,
            "match": {
              "location": "features/step_definitions/common_steps.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 10757309508
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 76,
            "match": {
              "location": "features/step_definitions/tor.rb:370"
            },
            "result": {
              "status": "passed",
              "duration": 66463086
            }
          },
          {
            "keyword": "And ",
            "name": "the Tor Connection Assistant connects to Tor",
            "line": 77,
            "match": {
              "location": "features/step_definitions/tor.rb:391"
            },
            "result": {
              "status": "passed",
              "duration": 222132025
            }
          },
          {
            "keyword": "And ",
            "name": "I wait until Tor is ready",
            "line": 78,
            "match": {
              "location": "features/step_definitions/common_steps.rb:705"
            },
            "result": {
              "status": "passed",
              "duration": 1200899513
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is using the same configuration as before",
            "line": 79,
            "match": {
              "location": "features/step_definitions/tor.rb:1139"
            },
            "result": {
              "status": "passed",
              "duration": 70932
            }
          },
          {
            "keyword": "And ",
            "name": "available upgrades have been checked",
            "line": 80,
            "match": {
              "location": "features/step_definitions/common_steps.rb:758"
            },
            "result": {
              "status": "passed",
              "duration": 47901699
            }
          },
          {
            "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:1020"
            },
            "result": {
              "status": "passed",
              "duration": 689812592
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 634337606
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 36384228
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 15089
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 3286189
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6941285053
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:185"
            },
            "result": {
              "status": "passed",
              "duration": 2276859
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 18356203
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 11,
            "match": {
              "location": "features/step_definitions/tor.rb:370"
            },
            "result": {
              "status": "passed",
              "duration": 2376283583
            }
          }
        ]
      },
      {
        "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:513"
            },
            "result": {
              "status": "passed",
              "duration": 5649343957
            }
          },
          {
            "keyword": "And ",
            "name": "I wait until Tor is ready",
            "line": 85,
            "match": {
              "location": "features/step_definitions/common_steps.rb:705"
            },
            "result": {
              "status": "passed",
              "duration": 1968244813
            }
          },
          {
            "keyword": "And ",
            "name": "I disconnect the network through GNOME",
            "line": 86,
            "match": {
              "location": "features/step_definitions/common_steps.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 10518972225
            }
          },
          {
            "keyword": "And ",
            "name": "the Tor network and default bridges are blocked",
            "line": 87,
            "match": {
              "location": "features/step_definitions/tor.rb:1081"
            },
            "result": {
              "status": "passed",
              "duration": 1600605350
            }
          },
          {
            "keyword": "When ",
            "name": "I connect the network through GNOME",
            "line": 88,
            "match": {
              "location": "features/step_definitions/common_steps.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 10655541958
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant reports that it failed to connect",
            "line": 89,
            "match": {
              "location": "features/step_definitions/tor.rb:875"
            },
            "result": {
              "status": "passed",
              "duration": 23085898273
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 1199311235
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 36470942
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 25849
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 3627881
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6763690835
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:185"
            },
            "result": {
              "status": "passed",
              "duration": 2654203
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 30012137
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 11,
            "match": {
              "location": "features/step_definitions/tor.rb:370"
            },
            "result": {
              "status": "passed",
              "duration": 2362301106
            }
          }
        ]
      },
      {
        "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:1081"
            },
            "result": {
              "status": "passed",
              "duration": 1317553572
            }
          },
          {
            "keyword": "When ",
            "name": "I unsuccessfully configure some default bridges in the Tor Connection Assistant",
            "line": 93,
            "match": {
              "location": "features/step_definitions/tor.rb:750"
            },
            "result": {
              "status": "passed",
              "duration": 23749209325
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant reports that it failed to connect",
            "line": 94,
            "match": {
              "location": "features/step_definitions/tor.rb:875"
            },
            "result": {
              "status": "passed",
              "duration": 108697968
            }
          },
          {
            "keyword": "Given ",
            "name": "the Tor network and default bridges are unblocked",
            "line": 95,
            "match": {
              "location": "features/step_definitions/tor.rb:1081"
            },
            "result": {
              "status": "passed",
              "duration": 1536053762
            }
          },
          {
            "keyword": "When ",
            "name": "I retry connecting to Tor",
            "line": 96,
            "match": {
              "location": "features/step_definitions/tor.rb:922"
            },
            "result": {
              "status": "passed",
              "duration": 1110779872
            }
          },
          {
            "keyword": "Then ",
            "name": "I wait until Tor is ready",
            "line": 97,
            "match": {
              "location": "features/step_definitions/common_steps.rb:705"
            },
            "result": {
              "status": "passed",
              "duration": 7111393628
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is configured to use the default bridges",
            "line": 98,
            "match": {
              "location": "features/step_definitions/tor.rb:1120"
            },
            "result": {
              "status": "passed",
              "duration": 445026401
            }
          },
          {
            "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:1020"
            },
            "result": {
              "status": "passed",
              "duration": 384961745
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 974518259
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 59178563
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 10039
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 1908118
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6675164952
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:185"
            },
            "result": {
              "status": "passed",
              "duration": 3259981
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 19022813
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 11,
            "match": {
              "location": "features/step_definitions/tor.rb:370"
            },
            "result": {
              "status": "passed",
              "duration": 2406325628
            }
          }
        ]
      },
      {
        "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:784"
            },
            "result": {
              "status": "passed",
              "duration": 53064341
            }
          },
          {
            "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:816"
            },
            "result": {
              "status": "passed",
              "duration": 5732998793
            }
          },
          {
            "keyword": "And ",
            "name": "I wait until Tor is ready",
            "line": 104,
            "match": {
              "location": "features/step_definitions/common_steps.rb:705"
            },
            "result": {
              "status": "passed",
              "duration": 7149161203
            }
          },
          {
            "keyword": "And ",
            "name": "available upgrades have been checked",
            "line": 105,
            "match": {
              "location": "features/step_definitions/common_steps.rb:758"
            },
            "result": {
              "status": "passed",
              "duration": 2145287395
            }
          },
          {
            "keyword": "Then ",
            "name": "Tor is configured to use the default bridges",
            "line": 106,
            "match": {
              "location": "features/step_definitions/tor.rb:1120"
            },
            "result": {
              "status": "passed",
              "duration": 339209984
            }
          },
          {
            "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:1020"
            },
            "result": {
              "status": "passed",
              "duration": 373218451
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 883429945
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 45148731
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 12824
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 1940137
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6833164125
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:185"
            },
            "result": {
              "status": "passed",
              "duration": 3685630
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 41154523
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 11,
            "match": {
              "location": "features/step_definitions/tor.rb:370"
            },
            "result": {
              "status": "passed",
              "duration": 2358423625
            }
          }
        ]
      },
      {
        "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:804"
            },
            "result": {
              "status": "passed",
              "duration": 21295454
            }
          },
          {
            "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:816"
            },
            "result": {
              "status": "passed",
              "duration": 5860998095
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant reports that it failed to connect",
            "line": 112,
            "match": {
              "location": "features/step_definitions/tor.rb:875"
            },
            "result": {
              "status": "passed",
              "duration": 94234694
            }
          },
          {
            "keyword": "And ",
            "name": "the Tor Connection Assistant reports the Moat API error",
            "line": 113,
            "match": {
              "location": "features/step_definitions/tor.rb:883"
            },
            "result": {
              "status": "passed",
              "duration": 2675019766
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 1361147220
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 67281655
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 15199
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 2925223
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6813069254
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:185"
            },
            "result": {
              "status": "passed",
              "duration": 3231127
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 25235119
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 11,
            "match": {
              "location": "features/step_definitions/tor.rb:370"
            },
            "result": {
              "status": "passed",
              "duration": 2325619808
            }
          }
        ]
      },
      {
        "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:1246"
            },
            "result": {
              "status": "passed",
              "duration": 13284986
            }
          },
          {
            "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:816"
            },
            "result": {
              "status": "passed",
              "duration": 5927653550
            }
          },
          {
            "keyword": "Then ",
            "name": "some real world bridges are eventually configured in torrc",
            "line": 118,
            "match": {
              "location": "features/step_definitions/tor.rb:1250"
            },
            "result": {
              "status": "passed",
              "duration": 1229773523
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 836061693
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 40881553
            }
          }
        ]
      }
    ]
  },
  {
    "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 14157
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 7201000
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 14,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6849804577
            }
          },
          {
            "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": 336170655
            }
          },
          {
            "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": 2339304875
            }
          },
          {
            "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": 1905169002
            }
          },
          {
            "keyword": "When ",
            "name": "I kill the allocating process",
            "line": 19,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:103"
            },
            "result": {
              "status": "passed",
              "duration": 897522515
            }
          },
          {
            "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 1469 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:214"
            },
            "result": {
              "status": "passed",
              "duration": 6916568782
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 1101242784
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 22172
            }
          }
        ]
      },
      {
        "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 12523
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 1969331
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 23,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6918265918
            }
          },
          {
            "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": 335183352
            }
          },
          {
            "keyword": "And ",
            "name": "I find very few patterns in the guest's memory",
            "line": 25,
            "output": [
              "Pattern coverage: 0.000% (0 MiB out of 1471 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:214"
            },
            "result": {
              "status": "passed",
              "duration": 1807910472
            }
          },
          {
            "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": 1792072750
            }
          },
          {
            "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": 1908502142
            }
          },
          {
            "keyword": "When ",
            "name": "I umount \"/mnt\"",
            "line": 28,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:210"
            },
            "result": {
              "status": "passed",
              "duration": 402791327
            }
          },
          {
            "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 1471 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:214"
            },
            "result": {
              "status": "passed",
              "duration": 4905393421
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 762217950
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 21630
            }
          }
        ]
      },
      {
        "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 12344
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 1949956
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 32,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6794316760
            }
          },
          {
            "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": 334347956
            }
          },
          {
            "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:1530"
            },
            "result": {
              "status": "passed",
              "duration": 5137044519
            }
          },
          {
            "keyword": "Then ",
            "name": "I find very few patterns in the guest's memory",
            "line": 35,
            "output": [
              "Pattern coverage: 0.000% (0 MiB out of 1471 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:214"
            },
            "result": {
              "status": "passed",
              "duration": 1658746492
            }
          },
          {
            "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": 2661457209
            }
          },
          {
            "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": 2044226643
            }
          },
          {
            "keyword": "When ",
            "name": "I umount the USB drive",
            "line": 39,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1568"
            },
            "result": {
              "status": "passed",
              "duration": 761491510
            }
          },
          {
            "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 1471 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:214"
            },
            "result": {
              "status": "passed",
              "duration": 4800544904
            }
          },
          {
            "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:1563"
            },
            "result": {
              "status": "passed",
              "duration": 139731473
            }
          },
          {
            "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": 418610114
            }
          },
          {
            "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": 1892708172
            }
          },
          {
            "keyword": "When ",
            "name": "I umount the USB drive",
            "line": 45,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1568"
            },
            "result": {
              "status": "passed",
              "duration": 483098129
            }
          },
          {
            "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 1471 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:214"
            },
            "result": {
              "status": "passed",
              "duration": 4685147960
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 998507686
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 329729
            }
          }
        ]
      },
      {
        "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 13595
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 3529176
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 49,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6514400836
            }
          },
          {
            "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": 352917330
            }
          },
          {
            "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:1530"
            },
            "result": {
              "status": "passed",
              "duration": 30507902023
            }
          },
          {
            "keyword": "Then ",
            "name": "I find very few patterns in the guest's memory",
            "line": 52,
            "output": [
              "Pattern coverage: 0.000% (0 MiB out of 1468 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:214"
            },
            "result": {
              "status": "passed",
              "duration": 1650732861
            }
          },
          {
            "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": 1448528792
            }
          },
          {
            "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": 1759502671
            }
          },
          {
            "keyword": "When ",
            "name": "I umount the USB drive",
            "line": 56,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1568"
            },
            "result": {
              "status": "passed",
              "duration": 515211642
            }
          },
          {
            "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 1468 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:214"
            },
            "result": {
              "status": "passed",
              "duration": 4597288829
            }
          },
          {
            "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:1563"
            },
            "result": {
              "status": "passed",
              "duration": 4453151054
            }
          },
          {
            "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": 258566912
            }
          },
          {
            "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": 1876310715
            }
          },
          {
            "keyword": "When ",
            "name": "I umount the USB drive",
            "line": 62,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1568"
            },
            "result": {
              "status": "passed",
              "duration": 395645425
            }
          },
          {
            "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 1468 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:214"
            },
            "result": {
              "status": "passed",
              "duration": 4586460832
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 874420751
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 369453
            }
          }
        ]
      },
      {
        "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 12464
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 2253455
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 66,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6494012693
            }
          },
          {
            "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": 318527975
            }
          },
          {
            "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": 23215911950
            }
          },
          {
            "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": 1920492087
            }
          },
          {
            "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": 1469188954
            }
          },
          {
            "keyword": "When ",
            "name": "I trigger shutdown",
            "line": 72,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:255"
            },
            "result": {
              "status": "passed",
              "duration": 5208745
            }
          },
          {
            "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 1470 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:214"
            },
            "result": {
              "status": "passed",
              "duration": 20509287318
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 3622232440
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 23984
            }
          }
        ]
      },
      {
        "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 13726
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 1714143
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 221155539500
            }
          },
          {
            "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": 321846670
            }
          },
          {
            "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": 15801857791
            }
          },
          {
            "keyword": "When ",
            "name": "I trigger shutdown",
            "line": 79,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:255"
            },
            "result": {
              "status": "passed",
              "duration": 8824162
            }
          },
          {
            "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 1534 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:214"
            },
            "result": {
              "status": "passed",
              "duration": 20862524792
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 3643992372
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 8995716
            }
          }
        ]
      }
    ]
  },
  {
    "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 16301
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 1247909
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6482301200
            }
          },
          {
            "keyword": "And ",
            "name": "I temporarily create a 4 GiB disk named \"gptfat\"",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:111"
            },
            "result": {
              "status": "passed",
              "duration": 14522486
            }
          },
          {
            "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": 3040414060
            }
          },
          {
            "keyword": "And ",
            "name": "I plug USB drive \"gptfat\"",
            "line": 11,
            "match": {
              "location": "features/step_definitions/common_steps.rb:123"
            },
            "result": {
              "status": "passed",
              "duration": 2263213589
            }
          },
          {
            "keyword": "When ",
            "name": "I start Tails Installer",
            "line": 12,
            "match": {
              "location": "features/step_definitions/usb.rb:143"
            },
            "result": {
              "status": "passed",
              "duration": 8871394658
            }
          },
          {
            "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:159"
            },
            "result": {
              "status": "passed",
              "duration": 28727327
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 1008826213
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 780423
            }
          }
        ]
      },
      {
        "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 14728
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 1913908
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 16,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6610975408
            }
          },
          {
            "keyword": "And ",
            "name": "I temporarily create a 7200 MiB disk named \"temp\"",
            "line": 17,
            "match": {
              "location": "features/step_definitions/common_steps.rb:111"
            },
            "result": {
              "status": "passed",
              "duration": 10929090
            }
          },
          {
            "keyword": "And ",
            "name": "I start Tails Installer",
            "line": 18,
            "match": {
              "location": "features/step_definitions/usb.rb:143"
            },
            "result": {
              "status": "passed",
              "duration": 9455407301
            }
          },
          {
            "keyword": "But ",
            "name": "a suitable USB device is not found",
            "line": 19,
            "match": {
              "location": "features/step_definitions/usb.rb:165"
            },
            "result": {
              "status": "passed",
              "duration": 16648133
            }
          },
          {
            "keyword": "When ",
            "name": "I plug USB drive \"temp\"",
            "line": 20,
            "match": {
              "location": "features/step_definitions/common_steps.rb:123"
            },
            "result": {
              "status": "passed",
              "duration": 2591573065
            }
          },
          {
            "keyword": "Then ",
            "name": "the \"temp\" USB drive is selected",
            "line": 21,
            "match": {
              "location": "features/step_definitions/usb.rb:171"
            },
            "result": {
              "status": "passed",
              "duration": 46064111
            }
          },
          {
            "keyword": "When ",
            "name": "I unplug USB drive \"temp\"",
            "line": 22,
            "match": {
              "location": "features/step_definitions/usb.rb:120"
            },
            "result": {
              "status": "passed",
              "duration": 137543716
            }
          },
          {
            "keyword": "Then ",
            "name": "a suitable USB device is not found",
            "line": 23,
            "match": {
              "location": "features/step_definitions/usb.rb:165"
            },
            "result": {
              "status": "passed",
              "duration": 11822716
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 859214680
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 238448
            }
          }
        ]
      },
      {
        "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 11921
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 1862772
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 26,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6521956316
            }
          },
          {
            "keyword": "And ",
            "name": "I temporarily create a 7200 MiB disk named \"install\"",
            "line": 27,
            "match": {
              "location": "features/step_definitions/common_steps.rb:111"
            },
            "result": {
              "status": "passed",
              "duration": 10972621
            }
          },
          {
            "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": 3102905399
            }
          },
          {
            "keyword": "And ",
            "name": "I plug USB drive \"install\"",
            "line": 29,
            "match": {
              "location": "features/step_definitions/common_steps.rb:123"
            },
            "result": {
              "status": "passed",
              "duration": 2234380823
            }
          },
          {
            "keyword": "And ",
            "name": "I install Tails to USB drive \"install\" by cloning",
            "line": 30,
            "match": {
              "location": "features/step_definitions/usb.rb:186"
            },
            "result": {
              "status": "passed",
              "duration": 97980531170
            }
          },
          {
            "keyword": "Then ",
            "name": "the running Tails is installed on USB drive \"install\"",
            "line": 31,
            "match": {
              "location": "features/step_definitions/usb.rb:601"
            },
            "result": {
              "status": "passed",
              "duration": 11490000514
            }
          },
          {
            "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": 2405180910
            }
          },
          {
            "keyword": "But ",
            "name": "there is no persistence partition on USB drive \"install\"",
            "line": 33,
            "match": {
              "location": "features/step_definitions/usb.rb:606"
            },
            "result": {
              "status": "passed",
              "duration": 51846581
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 1139744270
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 111077226
            }
          }
        ]
      },
      {
        "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 21000
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 2576851
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 36,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6704188270
            }
          },
          {
            "keyword": "And ",
            "name": "I temporarily create a 7200 MiB disk named \"install\"",
            "line": 37,
            "match": {
              "location": "features/step_definitions/common_steps.rb:111"
            },
            "result": {
              "status": "passed",
              "duration": 12850212
            }
          },
          {
            "keyword": "And ",
            "name": "I plug USB drive \"install\"",
            "line": 38,
            "match": {
              "location": "features/step_definitions/common_steps.rb:123"
            },
            "result": {
              "status": "passed",
              "duration": 2229710471
            }
          },
          {
            "keyword": "And ",
            "name": "I install Tails to USB drive \"install\" by cloning",
            "line": 39,
            "match": {
              "location": "features/step_definitions/usb.rb:186"
            },
            "result": {
              "status": "passed",
              "duration": 97026641282
            }
          },
          {
            "keyword": "Then ",
            "name": "the running Tails is installed on USB drive \"install\"",
            "line": 40,
            "match": {
              "location": "features/step_definitions/usb.rb:601"
            },
            "result": {
              "status": "passed",
              "duration": 11219497772
            }
          },
          {
            "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": 2561507672
            }
          },
          {
            "keyword": "But ",
            "name": "there is no persistence partition on USB drive \"install\"",
            "line": 42,
            "match": {
              "location": "features/step_definitions/usb.rb:606"
            },
            "result": {
              "status": "passed",
              "duration": 48439123
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 1018561060
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 110518056
            }
          }
        ]
      },
      {
        "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 16972
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 2395812
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 8165282266
            }
          },
          {
            "keyword": "And ",
            "name": "I create a file in the Persistent directory",
            "line": 46,
            "match": {
              "location": "features/step_definitions/usb.rb:1712"
            },
            "result": {
              "status": "passed",
              "duration": 83507326
            }
          },
          {
            "keyword": "And ",
            "name": "I temporarily create a 7200 MiB disk named \"install\"",
            "line": 47,
            "match": {
              "location": "features/step_definitions/common_steps.rb:111"
            },
            "result": {
              "status": "passed",
              "duration": 10785782
            }
          },
          {
            "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": 2916317761
            }
          },
          {
            "keyword": "And ",
            "name": "I plug USB drive \"install\"",
            "line": 49,
            "match": {
              "location": "features/step_definitions/common_steps.rb:123"
            },
            "result": {
              "status": "passed",
              "duration": 2229692746
            }
          },
          {
            "keyword": "And ",
            "name": "I install Tails with Persistent Storage to USB drive \"install\" by cloning",
            "line": 50,
            "match": {
              "location": "features/step_definitions/usb.rb:186"
            },
            "result": {
              "status": "passed",
              "duration": 114818685557
            }
          },
          {
            "keyword": "Then ",
            "name": "the running Tails is installed on USB drive \"install\"",
            "line": 51,
            "match": {
              "location": "features/step_definitions/usb.rb:601"
            },
            "result": {
              "status": "passed",
              "duration": 14347094001
            }
          },
          {
            "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": 2649651536
            }
          },
          {
            "keyword": "And ",
            "name": "there is a persistence partition on USB drive \"install\"",
            "line": 53,
            "match": {
              "location": "features/step_definitions/usb.rb:612"
            },
            "result": {
              "status": "passed",
              "duration": 59981195
            }
          },
          {
            "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": 2827466546
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 937015046
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 112664833
            }
          }
        ]
      },
      {
        "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 7544
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 2946523
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 7348473962
            }
          },
          {
            "keyword": "And ",
            "name": "I temporarily create a 7200 MiB disk named \"install\"",
            "line": 58,
            "match": {
              "location": "features/step_definitions/common_steps.rb:111"
            },
            "result": {
              "status": "passed",
              "duration": 9557547
            }
          },
          {
            "keyword": "And ",
            "name": "I plug USB drive \"install\"",
            "line": 59,
            "match": {
              "location": "features/step_definitions/common_steps.rb:123"
            },
            "result": {
              "status": "passed",
              "duration": 2246181036
            }
          },
          {
            "keyword": "And ",
            "name": "I install Tails to USB drive \"install\" by cloning",
            "line": 60,
            "match": {
              "location": "features/step_definitions/usb.rb:186"
            },
            "result": {
              "status": "passed",
              "duration": 112187955300
            }
          },
          {
            "keyword": "Then ",
            "name": "the running Tails is installed on USB drive \"install\"",
            "line": 61,
            "match": {
              "location": "features/step_definitions/usb.rb:601"
            },
            "result": {
              "status": "passed",
              "duration": 13965474097
            }
          },
          {
            "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": 2558060562
            }
          },
          {
            "keyword": "And ",
            "name": "there is no persistence partition on USB drive \"install\"",
            "line": 63,
            "match": {
              "location": "features/step_definitions/usb.rb:606"
            },
            "result": {
              "status": "passed",
              "duration": 58079250
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 956820172
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 102243091
            }
          }
        ]
      },
      {
        "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 13345
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 1797940
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 7426594429
            }
          },
          {
            "keyword": "And ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 71,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6857298126
            }
          },
          {
            "keyword": "And ",
            "name": "I clone USB drive \"__internal\" to a temporary USB drive \"install\"",
            "line": 72,
            "match": {
              "location": "features/step_definitions/usb.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 644866192
            }
          },
          {
            "keyword": "And ",
            "name": "I plug USB drive \"install\"",
            "line": 73,
            "match": {
              "location": "features/step_definitions/common_steps.rb:123"
            },
            "result": {
              "status": "passed",
              "duration": 2227757251
            }
          },
          {
            "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:186"
            },
            "result": {
              "status": "passed",
              "duration": 96598496861
            }
          },
          {
            "keyword": "Then ",
            "name": "the running Tails is installed on USB drive \"install\"",
            "line": 76,
            "match": {
              "location": "features/step_definitions/usb.rb:601"
            },
            "result": {
              "status": "passed",
              "duration": 11545656553
            }
          },
          {
            "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": 2432821212
            }
          },
          {
            "keyword": "And ",
            "name": "there is no persistence partition on USB drive \"install\"",
            "line": 78,
            "match": {
              "location": "features/step_definitions/usb.rb:606"
            },
            "result": {
              "status": "passed",
              "duration": 46380231
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 1090057853
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 120866142
            }
          }
        ]
      },
      {
        "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 18615
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 2234730
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 7966915197
            }
          },
          {
            "keyword": "And ",
            "name": "I power off the computer",
            "line": 83,
            "match": {
              "location": "features/step_definitions/common_steps.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 257289250
            }
          },
          {
            "keyword": "And ",
            "name": "the computer is set to boot in UEFI mode",
            "line": 84,
            "match": {
              "location": "features/step_definitions/usb.rb:124"
            },
            "result": {
              "status": "passed",
              "duration": 12095936
            }
          },
          {
            "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:232"
            },
            "result": {
              "status": "passed",
              "duration": 60700940047
            }
          },
          {
            "keyword": "Then ",
            "name": "Tails is running from USB drive \"__internal\"",
            "line": 86,
            "match": {
              "location": "features/step_definitions/usb.rb:935"
            },
            "result": {
              "status": "passed",
              "duration": 262579815
            }
          },
          {
            "keyword": "And ",
            "name": "the boot device has safe access rights",
            "line": 87,
            "match": {
              "location": "features/step_definitions/usb.rb:949"
            },
            "result": {
              "status": "passed",
              "duration": 2498064207
            }
          },
          {
            "keyword": "And ",
            "name": "Tails has started in UEFI mode",
            "line": 88,
            "match": {
              "location": "features/step_definitions/usb.rb:1213"
            },
            "result": {
              "status": "passed",
              "duration": 29923819
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 469470118
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 6085308
            }
          }
        ]
      },
      {
        "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 14908
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 1480145
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 91,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6701230745
            }
          },
          {
            "keyword": "And ",
            "name": "I plug and mount a USB drive containing a Tails USB image",
            "line": 92,
            "match": {
              "location": "features/step_definitions/usb.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 20842182003
            }
          },
          {
            "keyword": "And ",
            "name": "I create a 7200 MiB disk named \"usbimage\"",
            "line": 93,
            "match": {
              "location": "features/step_definitions/common_steps.rb:111"
            },
            "result": {
              "status": "passed",
              "duration": 10414493
            }
          },
          {
            "keyword": "And ",
            "name": "I plug USB drive \"usbimage\"",
            "line": 94,
            "match": {
              "location": "features/step_definitions/common_steps.rb:123"
            },
            "result": {
              "status": "passed",
              "duration": 2214969637
            }
          },
          {
            "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:1552"
            },
            "result": {
              "status": "passed",
              "duration": 20543799321
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 1492147550
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 105331766
            }
          }
        ]
      },
      {
        "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 18385
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 1889712
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 99,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 219023013
            }
          },
          {
            "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:232"
            },
            "result": {
              "status": "passed",
              "duration": 65794865503
            }
          },
          {
            "keyword": "Then ",
            "name": "Tails is running from USB drive \"usbimage\"",
            "line": 101,
            "match": {
              "location": "features/step_definitions/usb.rb:935"
            },
            "result": {
              "status": "passed",
              "duration": 215061694
            }
          },
          {
            "keyword": "And ",
            "name": "the label of the system partition on \"usbimage\" is \"Tails\"",
            "line": 102,
            "match": {
              "location": "features/step_definitions/usb.rb:1453"
            },
            "result": {
              "status": "passed",
              "duration": 169053057
            }
          },
          {
            "keyword": "And ",
            "name": "the system partition on \"usbimage\" is an EFI system partition",
            "line": 103,
            "match": {
              "location": "features/step_definitions/usb.rb:1461"
            },
            "result": {
              "status": "passed",
              "duration": 158497288
            }
          },
          {
            "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:1470"
            },
            "result": {
              "status": "passed",
              "duration": 105939573
            }
          },
          {
            "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:1498"
            },
            "result": {
              "status": "passed",
              "duration": 100584474
            }
          },
          {
            "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:1515"
            },
            "result": {
              "status": "passed",
              "duration": 105226035
            }
          },
          {
            "keyword": "And ",
            "name": "the system partition on \"usbimage\" has the expected flags",
            "line": 107,
            "match": {
              "location": "features/step_definitions/usb.rb:1532"
            },
            "result": {
              "status": "passed",
              "duration": 49155245
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 776765905
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 15352221
            }
          }
        ]
      }
    ]
  },
  {
    "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 20789
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 2115456
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:523"
            },
            "result": {
              "status": "passed",
              "duration": 1928716
            }
          }
        ],
        "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:261"
            },
            "result": {
              "status": "passed",
              "duration": 46517418409
            }
          },
          {
            "keyword": "And ",
            "name": "I update the APT lists using apt",
            "line": 29,
            "match": {
              "location": "features/step_definitions/apt.rb:54"
            },
            "result": {
              "status": "passed",
              "duration": 7519852969
            }
          },
          {
            "keyword": "And ",
            "name": "I install \"popularity-contest\" using apt",
            "line": 30,
            "match": {
              "location": "features/step_definitions/apt.rb:76"
            },
            "result": {
              "status": "passed",
              "duration": 6289464378
            }
          },
          {
            "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": 3000295379
            }
          },
          {
            "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": 16413081851
            }
          },
          {
            "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": 658574655
            }
          },
          {
            "keyword": "When ",
            "name": "I shutdown Tails and wait for the computer to power off",
            "line": 34,
            "match": {
              "location": "features/step_definitions/common_steps.rb:904"
            },
            "result": {
              "status": "passed",
              "duration": 7989120651
            }
          },
          {
            "keyword": "And ",
            "name": "I start Tails from USB drive \"__internal\" with network unplugged",
            "line": 35,
            "match": {
              "location": "features/step_definitions/common_steps.rb:232"
            },
            "result": {
              "status": "passed",
              "duration": 38172091635
            }
          },
          {
            "keyword": "And ",
            "name": "I enable persistence",
            "line": 36,
            "match": {
              "location": "features/step_definitions/usb.rb:721"
            },
            "result": {
              "status": "passed",
              "duration": 16527720677
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session",
            "line": 37,
            "match": {
              "location": "features/step_definitions/common_steps.rb:514"
            },
            "result": {
              "status": "passed",
              "duration": 10271083037
            }
          },
          {
            "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": 10298861157
            }
          },
          {
            "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": 1611723581
            }
          },
          {
            "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": 563780243
            }
          },
          {
            "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:937"
            },
            "result": {
              "status": "passed",
              "duration": 121555615
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:531"
            },
            "result": {
              "status": "passed",
              "duration": 6953979548
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 952211279
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 10359272
            }
          }
        ]
      },
      {
        "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 94678
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 2387005
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:523"
            },
            "result": {
              "status": "passed",
              "duration": 2257922
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 45,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 73907723
            }
          },
          {
            "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:232"
            },
            "result": {
              "status": "passed",
              "duration": 71691471665
            }
          },
          {
            "keyword": "And ",
            "name": "I update the APT lists using apt",
            "line": 47,
            "match": {
              "location": "features/step_definitions/apt.rb:54"
            },
            "result": {
              "status": "passed",
              "duration": 4986366223
            }
          },
          {
            "keyword": "When ",
            "name": "I install \"ripgrep\" using apt",
            "line": 48,
            "match": {
              "location": "features/step_definitions/apt.rb:76"
            },
            "result": {
              "status": "passed",
              "duration": 6326925334
            }
          },
          {
            "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": 2169896804
            }
          },
          {
            "keyword": "And ",
            "name": "the package \"ripgrep\" is installed",
            "line": 50,
            "match": {
              "location": "features/step_definitions/common_steps.rb:937"
            },
            "result": {
              "status": "passed",
              "duration": 77021722
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:531"
            },
            "result": {
              "status": "passed",
              "duration": 7801870231
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 653389861
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 11322988
            }
          }
        ]
      },
      {
        "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 18886
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 3330354
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:523"
            },
            "result": {
              "status": "passed",
              "duration": 3627421
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 54,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 87627857
            }
          },
          {
            "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:232"
            },
            "result": {
              "status": "passed",
              "duration": 99122310414
            }
          },
          {
            "keyword": "When ",
            "name": "I uninstall \"popularity-contest\" using apt",
            "line": 56,
            "match": {
              "location": "features/step_definitions/apt.rb:101"
            },
            "result": {
              "status": "passed",
              "duration": 6240931832
            }
          },
          {
            "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": 2533019912
            }
          },
          {
            "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": 693440356
            }
          },
          {
            "keyword": "When ",
            "name": "I start Synaptic",
            "line": 59,
            "match": {
              "location": "features/step_definitions/apt.rb:136"
            },
            "result": {
              "status": "passed",
              "duration": 12771676876
            }
          },
          {
            "keyword": "And ",
            "name": "I update the APT lists using Synaptic",
            "line": 60,
            "match": {
              "location": "features/step_definitions/apt.rb:142"
            },
            "result": {
              "status": "passed",
              "duration": 21494506064
            }
          },
          {
            "keyword": "And ",
            "name": "I install \"cowsay\" using Synaptic",
            "line": 61,
            "match": {
              "location": "features/step_definitions/apt.rb:164"
            },
            "result": {
              "status": "passed",
              "duration": 9607531188
            }
          },
          {
            "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": 2450836183
            }
          },
          {
            "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": 623201858
            }
          },
          {
            "keyword": "When ",
            "name": "I uninstall \"cowsay\" using apt",
            "line": 64,
            "match": {
              "location": "features/step_definitions/apt.rb:101"
            },
            "result": {
              "status": "passed",
              "duration": 3158276614
            }
          },
          {
            "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": 2477387651
            }
          },
          {
            "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": 614459968
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Additional Software\" via GNOME Activities Overview",
            "line": 67,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1165"
            },
            "result": {
              "status": "passed",
              "duration": 9623343354
            }
          },
          {
            "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": 3276007201
            }
          },
          {
            "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": 835092318
            }
          },
          {
            "keyword": "When ",
            "name": "I install \"cowsay\" using apt",
            "line": 70,
            "match": {
              "location": "features/step_definitions/apt.rb:76"
            },
            "result": {
              "status": "passed",
              "duration": 3180144742
            }
          },
          {
            "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": 1450385453
            }
          },
          {
            "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": 598457778
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:531"
            },
            "result": {
              "status": "passed",
              "duration": 443421107
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 1055570064
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 25015501
            }
          }
        ]
      },
      {
        "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 18935
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 3729542
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:523"
            },
            "result": {
              "status": "passed",
              "duration": 2185347
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 78,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 83987324
            }
          },
          {
            "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:232"
            },
            "result": {
              "status": "passed",
              "duration": 78365486585
            }
          },
          {
            "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": 5730293
            }
          },
          {
            "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": 9007591169
            }
          },
          {
            "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": 4776062969
            }
          },
          {
            "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": 653526844
            }
          },
          {
            "keyword": "And ",
            "name": "I shutdown Tails and wait for the computer to power off",
            "line": 84,
            "match": {
              "location": "features/step_definitions/common_steps.rb:904"
            },
            "result": {
              "status": "passed",
              "duration": 4122202190
            }
          },
          {
            "keyword": "And ",
            "name": "I start Tails from USB drive \"__internal\" with network unplugged",
            "line": 85,
            "match": {
              "location": "features/step_definitions/common_steps.rb:232"
            },
            "result": {
              "status": "passed",
              "duration": 38350489431
            }
          },
          {
            "keyword": "And ",
            "name": "I enable persistence",
            "line": 86,
            "match": {
              "location": "features/step_definitions/usb.rb:721"
            },
            "result": {
              "status": "passed",
              "duration": 5666707914
            }
          },
          {
            "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": 6041296
            }
          },
          {
            "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:1663"
            },
            "result": {
              "status": "passed",
              "duration": 67486056
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session",
            "line": 93,
            "match": {
              "location": "features/step_definitions/common_steps.rb:514"
            },
            "result": {
              "status": "passed",
              "duration": 9569787421
            }
          },
          {
            "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": 10184685616
            }
          },
          {
            "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": 35119764
            }
          },
          {
            "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": 42682413
            }
          },
          {
            "keyword": "And ",
            "name": "the network is plugged",
            "line": 99,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 16243905
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 100,
            "match": {
              "location": "features/step_definitions/common_steps.rb:650"
            },
            "result": {
              "status": "passed",
              "duration": 12788886223
            }
          },
          {
            "keyword": "And ",
            "name": "available upgrades have been checked",
            "line": 101,
            "match": {
              "location": "features/step_definitions/common_steps.rb:758"
            },
            "result": {
              "status": "passed",
              "duration": 1117385294
            }
          },
          {
            "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:629"
            },
            "result": {
              "status": "passed",
              "duration": 454126814
            }
          },
          {
            "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": 2506664748
            }
          },
          {
            "keyword": "And ",
            "name": "I shutdown Tails and wait for the computer to power off",
            "line": 104,
            "match": {
              "location": "features/step_definitions/common_steps.rb:904"
            },
            "result": {
              "status": "passed",
              "duration": 22723875225
            }
          },
          {
            "keyword": "And ",
            "name": "I start Tails from USB drive \"__internal\" with network unplugged",
            "line": 105,
            "match": {
              "location": "features/step_definitions/common_steps.rb:232"
            },
            "result": {
              "status": "passed",
              "duration": 38615850509
            }
          },
          {
            "keyword": "And ",
            "name": "I enable persistence",
            "line": 106,
            "match": {
              "location": "features/step_definitions/usb.rb:721"
            },
            "result": {
              "status": "passed",
              "duration": 6614684169
            }
          },
          {
            "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": 6204813
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session",
            "line": 110,
            "match": {
              "location": "features/step_definitions/common_steps.rb:514"
            },
            "result": {
              "status": "passed",
              "duration": 10757608942
            }
          },
          {
            "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": 10205585898
            }
          },
          {
            "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": 42388132
            }
          },
          {
            "keyword": "And ",
            "name": "the network is plugged",
            "line": 113,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 18092421
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 114,
            "match": {
              "location": "features/step_definitions/common_steps.rb:650"
            },
            "result": {
              "status": "passed",
              "duration": 16184656712
            }
          },
          {
            "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": 72518012
            }
          },
          {
            "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": 69213496
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:531"
            },
            "result": {
              "status": "passed",
              "duration": 888980793
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 983064866
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 17346953
            }
          }
        ]
      },
      {
        "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 18054
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 3190182
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:523"
            },
            "result": {
              "status": "passed",
              "duration": 2163115
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 121,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 59397372
            }
          },
          {
            "keyword": "And ",
            "name": "I start Tails from USB drive \"__internal\" with network unplugged",
            "line": 122,
            "match": {
              "location": "features/step_definitions/common_steps.rb:232"
            },
            "result": {
              "status": "passed",
              "duration": 37254915085
            }
          },
          {
            "keyword": "And ",
            "name": "I enable persistence",
            "line": 123,
            "match": {
              "location": "features/step_definitions/usb.rb:721"
            },
            "result": {
              "status": "passed",
              "duration": 6592826310
            }
          },
          {
            "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": 68350266
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session",
            "line": 125,
            "match": {
              "location": "features/step_definitions/common_steps.rb:514"
            },
            "result": {
              "status": "passed",
              "duration": 9680514801
            }
          },
          {
            "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:629"
            },
            "result": {
              "status": "passed",
              "duration": 1587729388
            }
          },
          {
            "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": 6318820122
            }
          },
          {
            "keyword": "And ",
            "name": "the package \"cowsay\" is not installed",
            "line": 128,
            "match": {
              "location": "features/step_definitions/common_steps.rb:937"
            },
            "result": {
              "status": "passed",
              "duration": 67351635
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:531"
            },
            "result": {
              "status": "passed",
              "duration": 118363945
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 1096932072
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 6757240
            }
          }
        ]
      }
    ]
  },
  {
    "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 19336
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 2788357
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 21,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 59876471
            }
          },
          {
            "keyword": "And ",
            "name": "I create a 7200 MiB disk named \"old\"",
            "line": 22,
            "match": {
              "location": "features/step_definitions/common_steps.rb:111"
            },
            "result": {
              "status": "passed",
              "duration": 10071754
            }
          },
          {
            "keyword": "And ",
            "name": "I plug USB drive \"old\"",
            "line": 23,
            "match": {
              "location": "features/step_definitions/common_steps.rb:123"
            },
            "result": {
              "status": "passed",
              "duration": 1019852437
            }
          },
          {
            "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:1754"
            },
            "result": {
              "status": "passed",
              "duration": 13675160367
            }
          },
          {
            "keyword": "When ",
            "name": "I start Tails from USB drive \"old\" with network unplugged",
            "line": 25,
            "match": {
              "location": "features/step_definitions/common_steps.rb:232"
            },
            "result": {
              "status": "passed",
              "duration": 63940083785
            }
          },
          {
            "keyword": "Then ",
            "name": "the boot device has safe access rights",
            "line": 26,
            "match": {
              "location": "features/step_definitions/usb.rb:949"
            },
            "result": {
              "status": "passed",
              "duration": 2767807052
            }
          },
          {
            "keyword": "And ",
            "name": "Tails is running from USB drive \"old\"",
            "line": 27,
            "match": {
              "location": "features/step_definitions/usb.rb:935"
            },
            "result": {
              "status": "passed",
              "duration": 244074660
            }
          },
          {
            "keyword": "And ",
            "name": "there is no persistence partition on USB drive \"old\"",
            "line": 28,
            "match": {
              "location": "features/step_definitions/usb.rb:606"
            },
            "result": {
              "status": "passed",
              "duration": 72080890
            }
          },
          {
            "keyword": "And ",
            "name": "process \"udev-watchdog\" is running",
            "line": 29,
            "match": {
              "location": "features/step_definitions/common_steps.rb:857"
            },
            "result": {
              "status": "passed",
              "duration": 78247831
            }
          },
          {
            "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": 194776695
            }
          },
          {
            "keyword": "And ",
            "name": "I unplug USB drive \"old\"",
            "line": 31,
            "match": {
              "location": "features/step_definitions/usb.rb:120"
            },
            "result": {
              "status": "passed",
              "duration": 158954884
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 1607237991
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 6651149
            }
          }
        ]
      },
      {
        "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 13185
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 1877200
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 35,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 52355459
            }
          },
          {
            "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:232"
            },
            "result": {
              "status": "passed",
              "duration": 54444820213
            }
          },
          {
            "keyword": "Then ",
            "name": "Tails is running from USB drive \"old\"",
            "line": 37,
            "match": {
              "location": "features/step_definitions/usb.rb:935"
            },
            "result": {
              "status": "passed",
              "duration": 266040890
            }
          },
          {
            "keyword": "And ",
            "name": "I create a persistent partition",
            "line": 38,
            "match": {
              "location": "features/step_definitions/usb.rb:341"
            },
            "result": {
              "status": "passed",
              "duration": 24161147842
            }
          },
          {
            "keyword": "And ",
            "name": "I take note of which tps features are available",
            "line": 39,
            "match": {
              "location": "features/step_definitions/usb.rb:1115"
            },
            "result": {
              "status": "passed",
              "duration": 409493485
            }
          },
          {
            "keyword": "Then ",
            "name": "a Tails persistence partition exists on USB drive \"old\"",
            "line": 40,
            "match": {
              "location": "features/step_definitions/usb.rb:648"
            },
            "result": {
              "status": "passed",
              "duration": 549468105
            }
          },
          {
            "keyword": "And ",
            "name": "I shutdown Tails and wait for the computer to power off",
            "line": 41,
            "match": {
              "location": "features/step_definitions/common_steps.rb:904"
            },
            "result": {
              "status": "passed",
              "duration": 8394263551
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 591653946
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 9338138
            }
          }
        ]
      },
      {
        "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 15890
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 5436984
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 45,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 62427001
            }
          },
          {
            "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:232"
            },
            "result": {
              "status": "passed",
              "duration": 63162964121
            }
          },
          {
            "keyword": "Then ",
            "name": "Tails is running from USB drive \"old\"",
            "line": 47,
            "match": {
              "location": "features/step_definitions/usb.rb:935"
            },
            "result": {
              "status": "passed",
              "duration": 300292974
            }
          },
          {
            "keyword": "And ",
            "name": "all tps features are active",
            "line": 48,
            "match": {
              "location": "features/step_definitions/usb.rb:778"
            },
            "result": {
              "status": "passed",
              "duration": 1325012770
            }
          },
          {
            "keyword": "When ",
            "name": "I write some files expected to persist",
            "line": 49,
            "match": {
              "location": "features/step_definitions/usb.rb:1075"
            },
            "result": {
              "status": "passed",
              "duration": 1402667329
            }
          },
          {
            "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:992"
            },
            "result": {
              "status": "passed",
              "duration": 182632367
            }
          },
          {
            "keyword": "And ",
            "name": "all persistence configuration files have safe access rights",
            "line": 52,
            "match": {
              "location": "features/step_definitions/usb.rb:1009"
            },
            "result": {
              "status": "passed",
              "duration": 354669673
            }
          },
          {
            "keyword": "And ",
            "name": "all persistent directories from the old Tails version have safe access rights",
            "line": 53,
            "match": {
              "location": "features/step_definitions/usb.rb:1037"
            },
            "result": {
              "status": "passed",
              "duration": 2099013393
            }
          },
          {
            "keyword": "And ",
            "name": "I take note of which tps features are available",
            "line": 54,
            "match": {
              "location": "features/step_definitions/usb.rb:1115"
            },
            "result": {
              "status": "passed",
              "duration": 209665781
            }
          },
          {
            "keyword": "And ",
            "name": "I shutdown Tails and wait for the computer to power off",
            "line": 55,
            "match": {
              "location": "features/step_definitions/common_steps.rb:904"
            },
            "result": {
              "status": "passed",
              "duration": 8255174029
            }
          },
          {
            "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:1154"
            },
            "result": {
              "status": "passed",
              "duration": 12576520933
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 431288123
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 7553080
            }
          }
        ]
      },
      {
        "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 15319
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 2127519
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 7909211692
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session",
            "line": 62,
            "match": {
              "location": "features/step_definitions/common_steps.rb:514"
            },
            "result": {
              "status": "passed",
              "duration": 14293007012
            }
          },
          {
            "keyword": "And ",
            "name": "I clone USB drive \"old\" to a new USB drive \"to_upgrade\"",
            "line": 63,
            "match": {
              "location": "features/step_definitions/usb.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 707713150
            }
          },
          {
            "keyword": "And ",
            "name": "I plug USB drive \"to_upgrade\"",
            "line": 64,
            "match": {
              "location": "features/step_definitions/common_steps.rb:123"
            },
            "result": {
              "status": "passed",
              "duration": 2215603854
            }
          },
          {
            "keyword": "When ",
            "name": "I upgrade Tails to USB drive \"to_upgrade\" by cloning",
            "line": 65,
            "match": {
              "location": "features/step_definitions/usb.rb:186"
            },
            "result": {
              "status": "passed",
              "duration": 91416569040
            }
          },
          {
            "keyword": "Then ",
            "name": "the running Tails is installed on USB drive \"to_upgrade\"",
            "line": 66,
            "match": {
              "location": "features/step_definitions/usb.rb:601"
            },
            "result": {
              "status": "passed",
              "duration": 14779870706
            }
          },
          {
            "keyword": "And ",
            "name": "I unplug USB drive \"to_upgrade\"",
            "line": 67,
            "match": {
              "location": "features/step_definitions/usb.rb:120"
            },
            "result": {
              "status": "passed",
              "duration": 143565627
            }
          },
          {
            "keyword": "And ",
            "name": "I unplug USB drive \"__internal\"",
            "line": 68,
            "match": {
              "location": "features/step_definitions/usb.rb:120"
            },
            "result": {
              "status": "passed",
              "duration": 150864592
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 2456911808
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 20899
            }
          }
        ]
      },
      {
        "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 11573
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 3178459
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 72,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 58887918
            }
          },
          {
            "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:232"
            },
            "result": {
              "status": "passed",
              "duration": 61226942210
            }
          },
          {
            "keyword": "Then ",
            "name": "all tps features from the old Tails version are active",
            "line": 74,
            "match": {
              "location": "features/step_definitions/usb.rb:778"
            },
            "result": {
              "status": "passed",
              "duration": 1007803812
            }
          },
          {
            "keyword": "And ",
            "name": "Tails is running from USB drive \"to_upgrade\"",
            "line": 75,
            "match": {
              "location": "features/step_definitions/usb.rb:935"
            },
            "result": {
              "status": "passed",
              "duration": 213107870
            }
          },
          {
            "keyword": "And ",
            "name": "the boot device has safe access rights",
            "line": 76,
            "match": {
              "location": "features/step_definitions/usb.rb:949"
            },
            "result": {
              "status": "passed",
              "duration": 2752492185
            }
          },
          {
            "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:1121"
            },
            "result": {
              "status": "passed",
              "duration": 1164148879
            }
          },
          {
            "keyword": "And ",
            "name": "all persistent directories from the old Tails version have safe access rights",
            "line": 78,
            "match": {
              "location": "features/step_definitions/usb.rb:1037"
            },
            "result": {
              "status": "passed",
              "duration": 1920472926
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 905912629
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 6327765
            }
          }
        ]
      },
      {
        "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 13485
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 1735113
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 7788970356
            }
          },
          {
            "keyword": "And ",
            "name": "no SquashFS delta is installed",
            "line": 83,
            "match": {
              "location": "features/step_definitions/usb.rb:1443"
            },
            "result": {
              "status": "passed",
              "duration": 87324782
            }
          },
          {
            "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:1444"
            },
            "result": {
              "status": "passed",
              "duration": 245177394
            }
          },
          {
            "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:1436"
            },
            "result": {
              "status": "passed",
              "duration": 50560724
            }
          },
          {
            "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:1291"
            },
            "result": {
              "status": "passed",
              "duration": 308681968
            }
          },
          {
            "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:1291"
            },
            "result": {
              "status": "passed",
              "duration": 365025064
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 88,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 32446634
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 89,
            "match": {
              "location": "features/step_definitions/common_steps.rb:650"
            },
            "result": {
              "status": "passed",
              "duration": 13263704713
            }
          },
          {
            "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:1327"
            },
            "result": {
              "status": "passed",
              "duration": 2597195315
            }
          },
          {
            "keyword": "And ",
            "name": "I can successfully install the incremental upgrade to version 6.2~testoverlayfs",
            "line": 91,
            "match": {
              "location": "features/step_definitions/usb.rb:1346"
            },
            "result": {
              "status": "passed",
              "duration": 6320444904
            }
          },
          {
            "keyword": "Given ",
            "name": "I shutdown Tails and wait for the computer to power off",
            "line": 92,
            "match": {
              "location": "features/step_definitions/common_steps.rb:904"
            },
            "result": {
              "status": "passed",
              "duration": 9540811214
            }
          },
          {
            "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:232"
            },
            "result": {
              "status": "passed",
              "duration": 65222450730
            }
          },
          {
            "keyword": "Then ",
            "name": "Tails is running version 6.2~testoverlayfs",
            "line": 94,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1467"
            },
            "result": {
              "status": "passed",
              "duration": 5244813
            }
          },
          {
            "keyword": "And ",
            "name": "all tps features are active",
            "line": 95,
            "match": {
              "location": "features/step_definitions/usb.rb:778"
            },
            "result": {
              "status": "passed",
              "duration": 1264855837
            }
          },
          {
            "keyword": "And ",
            "name": "the file system changes introduced in version 6.2~testoverlayfs are present",
            "line": 96,
            "match": {
              "location": "features/step_definitions/usb.rb:1291"
            },
            "result": {
              "status": "passed",
              "duration": 375562847
            }
          },
          {
            "keyword": "And ",
            "name": "only the 6.2~testoverlayfs SquashFS delta is installed",
            "line": 97,
            "match": {
              "location": "features/step_definitions/usb.rb:1443"
            },
            "result": {
              "status": "passed",
              "duration": 68743565
            }
          },
          {
            "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:1578"
            },
            "result": {
              "status": "passed",
              "duration": 162846934
            }
          },
          {
            "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:1444"
            },
            "result": {
              "status": "passed",
              "duration": 250678406
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 104,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 17350420
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 105,
            "match": {
              "location": "features/step_definitions/common_steps.rb:650"
            },
            "result": {
              "status": "passed",
              "duration": 11591753977
            }
          },
          {
            "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:1327"
            },
            "result": {
              "status": "passed",
              "duration": 2337713754
            }
          },
          {
            "keyword": "And ",
            "name": "I can successfully install the incremental upgrade to version 6.3~testoverlayfs",
            "line": 107,
            "match": {
              "location": "features/step_definitions/usb.rb:1346"
            },
            "result": {
              "status": "passed",
              "duration": 5053673485
            }
          },
          {
            "keyword": "Given ",
            "name": "I shutdown Tails and wait for the computer to power off",
            "line": 108,
            "match": {
              "location": "features/step_definitions/common_steps.rb:904"
            },
            "result": {
              "status": "passed",
              "duration": 4453206893
            }
          },
          {
            "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:232"
            },
            "result": {
              "status": "passed",
              "duration": 62335504698
            }
          },
          {
            "keyword": "Then ",
            "name": "Tails is running version 6.3~testoverlayfs",
            "line": 110,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1467"
            },
            "result": {
              "status": "passed",
              "duration": 5345292
            }
          },
          {
            "keyword": "And ",
            "name": "all tps features are active",
            "line": 111,
            "match": {
              "location": "features/step_definitions/usb.rb:778"
            },
            "result": {
              "status": "passed",
              "duration": 1222606741
            }
          },
          {
            "keyword": "And ",
            "name": "the file system changes introduced in version 6.3~testoverlayfs are present",
            "line": 112,
            "match": {
              "location": "features/step_definitions/usb.rb:1291"
            },
            "result": {
              "status": "passed",
              "duration": 380262483
            }
          },
          {
            "keyword": "And ",
            "name": "only the 6.3~testoverlayfs SquashFS delta is installed",
            "line": 113,
            "match": {
              "location": "features/step_definitions/usb.rb:1443"
            },
            "result": {
              "status": "passed",
              "duration": 51175397
            }
          },
          {
            "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:1578"
            },
            "result": {
              "status": "passed",
              "duration": 172985506
            }
          },
          {
            "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:1444"
            },
            "result": {
              "status": "passed",
              "duration": 220732766
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 118,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 18917718
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 119,
            "match": {
              "location": "features/step_definitions/common_steps.rb:650"
            },
            "result": {
              "status": "passed",
              "duration": 10687792825
            }
          },
          {
            "keyword": "Then ",
            "name": "the Upgrader considers the system as up-to-date",
            "line": 120,
            "match": {
              "location": "features/step_definitions/usb.rb:1413"
            },
            "result": {
              "status": "passed",
              "duration": 10551365871
            }
          },
          {
            "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": 4117688736
            }
          },
          {
            "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:1291"
            },
            "result": {
              "status": "passed",
              "duration": 377579417
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 840294251
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 18530511
            }
          }
        ]
      },
      {
        "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 16030
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 1754780
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 7733145052
            }
          },
          {
            "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:1444"
            },
            "result": {
              "status": "passed",
              "duration": 242265616
            }
          },
          {
            "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:1436"
            },
            "result": {
              "status": "passed",
              "duration": 77692431
            }
          },
          {
            "keyword": "And ",
            "name": "the signing key used by the Upgrader is outdated",
            "line": 130,
            "match": {
              "location": "features/step_definitions/usb.rb:1426"
            },
            "result": {
              "status": "passed",
              "duration": 91121368
            }
          },
          {
            "keyword": "But ",
            "name": "a current signing key is available on our website",
            "line": 131,
            "match": {
              "location": "features/step_definitions/usb.rb:1437"
            },
            "result": {
              "status": "passed",
              "duration": 22963
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 132,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 18855691
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 133,
            "match": {
              "location": "features/step_definitions/common_steps.rb:650"
            },
            "result": {
              "status": "passed",
              "duration": 9366942290
            }
          },
          {
            "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:1327"
            },
            "result": {
              "status": "passed",
              "duration": 2355781036
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 937663092
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 24014
            }
          }
        ]
      }
    ]
  },
  {
    "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 19217
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 3557640
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 36776089939
            }
          },
          {
            "keyword": "When ",
            "name": "I eject the boot medium",
            "line": 13,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1422"
            },
            "result": {
              "status": "passed",
              "duration": 157414051
            }
          },
          {
            "keyword": "Then ",
            "name": "Tails eventually shuts down",
            "line": 14,
            "match": {
              "location": "features/step_definitions/common_steps.rb:886"
            },
            "result": {
              "status": "passed",
              "duration": 4088240667
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 355305556
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 18214
            }
          }
        ]
      },
      {
        "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 27301
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 3912906
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 17,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6595448358
            }
          },
          {
            "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": 380898158
            }
          },
          {
            "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": 26152759455
            }
          },
          {
            "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": 1992623034
            }
          },
          {
            "keyword": "When ",
            "name": "I eject the boot medium",
            "line": 21,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1422"
            },
            "result": {
              "status": "passed",
              "duration": 214261378
            }
          },
          {
            "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": 5149378310
            }
          },
          {
            "keyword": "Then ",
            "name": "I find very few patterns in the guest's memory",
            "line": 23,
            "output": [
              "Pattern coverage: 0.000% (0 MiB out of 1475 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:214"
            },
            "result": {
              "status": "passed",
              "duration": 522168586
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 3558067830
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 24385
            }
          }
        ]
      },
      {
        "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 14848
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 3543543
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 26,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 7432811234
            }
          },
          {
            "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": 430757988
            }
          },
          {
            "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:1530"
            },
            "result": {
              "status": "passed",
              "duration": 5120716967
            }
          },
          {
            "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": 2656193916
            }
          },
          {
            "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": 55272174
            }
          },
          {
            "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": 2105137692
            }
          },
          {
            "keyword": "When ",
            "name": "I eject the boot medium",
            "line": 32,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1422"
            },
            "result": {
              "status": "passed",
              "duration": 364487366
            }
          },
          {
            "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": 5419083857
            }
          },
          {
            "keyword": "Then ",
            "name": "I find very few patterns in the guest's memory",
            "line": 34,
            "output": [
              "Pattern coverage: 0.000% (0 MiB out of 1458 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:214"
            },
            "result": {
              "status": "passed",
              "duration": 571717891
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 3448932136
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 333565
            }
          }
        ]
      },
      {
        "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 13886
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 3388613
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 37,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6724101362
            }
          },
          {
            "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": 375801449
            }
          },
          {
            "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:1530"
            },
            "result": {
              "status": "passed",
              "duration": 29392826045
            }
          },
          {
            "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": 1134291909
            }
          },
          {
            "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": 49727920
            }
          },
          {
            "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": 1888894551
            }
          },
          {
            "keyword": "When ",
            "name": "I eject the boot medium",
            "line": 43,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1422"
            },
            "result": {
              "status": "passed",
              "duration": 203048364
            }
          },
          {
            "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": 4162623758
            }
          },
          {
            "keyword": "Then ",
            "name": "I find very few patterns in the guest's memory",
            "line": 45,
            "output": [
              "Pattern coverage: 0.000% (0 MiB out of 1462 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:214"
            },
            "result": {
              "status": "passed",
              "duration": 548584662
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 3627613676
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 369012
            }
          }
        ]
      },
      {
        "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 15820
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 4913993
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 7530956580
            }
          },
          {
            "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": 427353507
            }
          },
          {
            "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": 15752625509
            }
          },
          {
            "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": 2090908181
            }
          },
          {
            "keyword": "When ",
            "name": "I eject the boot medium",
            "line": 52,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1422"
            },
            "result": {
              "status": "passed",
              "duration": 414820681
            }
          },
          {
            "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": 5495883027
            }
          },
          {
            "keyword": "Then ",
            "name": "I find very few patterns in the guest's memory",
            "line": 54,
            "output": [
              "Pattern coverage: 0.000% (0 MiB out of 1532 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:214"
            },
            "result": {
              "status": "passed",
              "duration": 510154617
            }
          },
          {
            "keyword": "And ",
            "name": "Tails eventually shuts down",
            "line": 55,
            "match": {
              "location": "features/step_definitions/common_steps.rb:886"
            },
            "result": {
              "status": "passed",
              "duration": 90585225592
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 573709708
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 24927
            }
          }
        ]
      }
    ]
  },
  {
    "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 25568
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 4903914
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 7,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 116022352
            }
          },
          {
            "keyword": "And ",
            "name": "I start Tails from DVD with network unplugged",
            "line": 8,
            "match": {
              "location": "features/step_definitions/common_steps.rb:211"
            },
            "result": {
              "status": "passed",
              "duration": 36030251185
            }
          },
          {
            "keyword": "Then ",
            "name": "the only hosts in APT sources are \"cloudfront.debian.net,deb.tails.boum.org,deb.torproject.org\"",
            "line": 9,
            "match": {
              "location": "features/step_definitions/apt.rb:9"
            },
            "result": {
              "status": "passed",
              "duration": 297256264
            }
          },
          {
            "keyword": "And ",
            "name": "no proposed-updates APT suite is enabled",
            "line": 10,
            "match": {
              "location": "features/step_definitions/apt.rb:19"
            },
            "result": {
              "status": "passed",
              "duration": 43616093
            }
          },
          {
            "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": 61969552
            }
          },
          {
            "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": 115757785
            }
          },
          {
            "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": 7847463
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 579431865
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 6436138
            }
          }
        ]
      }
    ]
  },
  {
    "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 14928
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 1903850
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 8350005200
            }
          },
          {
            "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:904"
            },
            "result": {
              "status": "passed",
              "duration": 9410727799
            }
          },
          {
            "keyword": "And ",
            "name": "I clone USB drive \"__internal\" to a temporary USB drive \"backup\"",
            "line": 11,
            "match": {
              "location": "features/step_definitions/usb.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 873513732
            }
          },
          {
            "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 7453444206
            }
          },
          {
            "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:1726"
            },
            "result": {
              "status": "passed",
              "duration": 9644883
            }
          },
          {
            "keyword": "When ",
            "name": "I start Tails' custom backup tool",
            "line": 14,
            "match": {
              "location": "features/step_definitions/backup.rb:1"
            },
            "result": {
              "status": "passed",
              "duration": 1960920769
            }
          },
          {
            "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": 233948182
            }
          },
          {
            "keyword": "When ",
            "name": "I plug USB drive \"backup\"",
            "line": 16,
            "match": {
              "location": "features/step_definitions/common_steps.rb:123"
            },
            "result": {
              "status": "passed",
              "duration": 2259812768
            }
          },
          {
            "keyword": "And ",
            "name": "I give the Persistent Storage on drive \"backup\" its own UUID",
            "line": 17,
            "match": {
              "location": "features/step_definitions/usb.rb:1705"
            },
            "result": {
              "status": "passed",
              "duration": 200553152
            }
          },
          {
            "keyword": "And ",
            "name": "I click \"Retry\" in the backup tool",
            "line": 18,
            "match": {
              "location": "features/step_definitions/backup.rb:13"
            },
            "result": {
              "status": "passed",
              "duration": 3159712040
            }
          },
          {
            "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": 139569098
            }
          },
          {
            "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": 3117701117
            }
          },
          {
            "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": 2223062059
            }
          },
          {
            "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": 11551057189
            }
          },
          {
            "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:120"
            },
            "result": {
              "status": "passed",
              "duration": 130227960
            }
          },
          {
            "keyword": "And ",
            "name": "I plug USB drive \"backup\"",
            "line": 25,
            "match": {
              "location": "features/step_definitions/common_steps.rb:123"
            },
            "result": {
              "status": "passed",
              "duration": 2696073225
            }
          },
          {
            "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": 2457342237
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 1485735999
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 128302289
            }
          }
        ]
      }
    ]
  },
  {
    "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 13495
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:548"
            },
            "result": {
              "status": "passed",
              "duration": 106399
            }
          }
        ],
        "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": 32779697
            }
          },
          {
            "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": 88520944
            }
          },
          {
            "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": 47320
            }
          },
          {
            "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": 58159
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run tails-custom-apt-sources",
            "line": 12,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 39146034
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see only the 'stable' suite",
            "line": 13,
            "match": {
              "location": "features/step_definitions/build.rb:117"
            },
            "result": {
              "status": "passed",
              "duration": 3260714
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:555"
            },
            "result": {
              "status": "passed",
              "duration": 882385
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 6011
            }
          }
        ]
      },
      {
        "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 9749
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:548"
            },
            "result": {
              "status": "passed",
              "duration": 68979
            }
          }
        ],
        "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": 24695281
            }
          },
          {
            "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": 86010949
            }
          },
          {
            "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": 49012
            }
          },
          {
            "keyword": "And ",
            "name": "config/APT_overlays.d contains 'feature-foo'",
            "line": 19,
            "match": {
              "location": "features/step_definitions/build.rb:131"
            },
            "result": {
              "status": "passed",
              "duration": 65843
            }
          },
          {
            "keyword": "And ",
            "name": "config/APT_overlays.d contains 'bugfix-bar'",
            "line": 20,
            "match": {
              "location": "features/step_definitions/build.rb:131"
            },
            "result": {
              "status": "passed",
              "duration": 31991
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run tails-custom-apt-sources",
            "line": 21,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 33335981
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see the 'stable' suite",
            "line": 22,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 170339
            }
          },
          {
            "keyword": "And ",
            "name": "I should see the 'feature-foo' suite",
            "line": 23,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 57769
            }
          },
          {
            "keyword": "And ",
            "name": "I should see the 'bugfix-bar' suite",
            "line": 24,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 50345
            }
          },
          {
            "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": 81833
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:555"
            },
            "result": {
              "status": "passed",
              "duration": 909135
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 8766
            }
          }
        ]
      },
      {
        "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 12493
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:548"
            },
            "result": {
              "status": "passed",
              "duration": 80430
            }
          }
        ],
        "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": 27172885
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.10 has been released",
            "line": 29,
            "match": {
              "location": "features/step_definitions/build.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 10254125
            }
          },
          {
            "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": 130515589
            }
          },
          {
            "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": 48119
            }
          },
          {
            "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": 84518
            }
          },
          {
            "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": 1040610841
            }
          },
          {
            "keyword": "And ",
            "name": "I run \"apt-mirror debian\"",
            "line": 34,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 23931418
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 35,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 41487
            }
          },
          {
            "keyword": "When ",
            "name": "I run \"apt-mirror torproject\"",
            "line": 36,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 6365465
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 37,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 23585
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror debian-security\"",
            "line": 38,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 53269674
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 39,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 175439
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:555"
            },
            "result": {
              "status": "passed",
              "duration": 1175043
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 7254
            }
          }
        ]
      },
      {
        "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 11671
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:548"
            },
            "result": {
              "status": "passed",
              "duration": 75201
            }
          }
        ],
        "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": 23192913
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.10 has been released",
            "line": 43,
            "match": {
              "location": "features/step_definitions/build.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 11628001
            }
          },
          {
            "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": 91287902
            }
          },
          {
            "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": 47400
            }
          },
          {
            "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": 79821
            }
          },
          {
            "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": 1022435362
            }
          },
          {
            "keyword": "And ",
            "name": "I successfully run \"apt-mirror debian\"",
            "line": 48,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 58627509
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 49,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 156513
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror torproject\"",
            "line": 50,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 56353986
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 51,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 140715
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror debian-security\"",
            "line": 52,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 56248447
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 53,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 163306
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:555"
            },
            "result": {
              "status": "passed",
              "duration": 1308082
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 8707
            }
          }
        ]
      },
      {
        "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 11401
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:548"
            },
            "result": {
              "status": "passed",
              "duration": 129162
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "Tails 0.10 has been released",
            "line": 56,
            "match": {
              "location": "features/step_definitions/build.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 36364618
            }
          },
          {
            "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": 24630819
            }
          },
          {
            "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": 4244878
            }
          },
          {
            "keyword": "And ",
            "name": "I checkout the 0.10 tag",
            "line": 59,
            "match": {
              "location": "features/step_definitions/build.rb:83"
            },
            "result": {
              "status": "passed",
              "duration": 3088992
            }
          },
          {
            "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": 238567
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run tails-custom-apt-sources",
            "line": 61,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 57947874
            }
          },
          {
            "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": 311234
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:555"
            },
            "result": {
              "status": "passed",
              "duration": 1394996
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 9929
            }
          }
        ]
      },
      {
        "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 16121
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:548"
            },
            "result": {
              "status": "passed",
              "duration": 127369
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "Tails 0.10 has been released",
            "line": 65,
            "match": {
              "location": "features/step_definitions/build.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 108493790
            }
          },
          {
            "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": 27403447
            }
          },
          {
            "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": 3931371
            }
          },
          {
            "keyword": "And ",
            "name": "I checkout the 0.10 tag",
            "line": 68,
            "match": {
              "location": "features/step_definitions/build.rb:83"
            },
            "result": {
              "status": "passed",
              "duration": 2639159
            }
          },
          {
            "keyword": "And ",
            "name": "config/APT_overlays.d contains 'feature-foo'",
            "line": 69,
            "match": {
              "location": "features/step_definitions/build.rb:131"
            },
            "result": {
              "status": "passed",
              "duration": 78347
            }
          },
          {
            "keyword": "When ",
            "name": "I run tails-custom-apt-sources",
            "line": 70,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 36098549
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 71,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 42529
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:555"
            },
            "result": {
              "status": "passed",
              "duration": 1031463
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 6101
            }
          }
        ]
      },
      {
        "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 12804
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:548"
            },
            "result": {
              "status": "passed",
              "duration": 74319
            }
          }
        ],
        "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": 53095257
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.10 has been released",
            "line": 75,
            "match": {
              "location": "features/step_definitions/build.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 13045328
            }
          },
          {
            "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": 30955748
            }
          },
          {
            "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": 121468
            }
          },
          {
            "keyword": "And ",
            "name": "I checkout the 0.10 tag",
            "line": 78,
            "match": {
              "location": "features/step_definitions/build.rb:83"
            },
            "result": {
              "status": "passed",
              "duration": 8545272
            }
          },
          {
            "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": 1038942032
            }
          },
          {
            "keyword": "And ",
            "name": "I run \"apt-mirror debian\"",
            "line": 80,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 7631257
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 81,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 41868
            }
          },
          {
            "keyword": "When ",
            "name": "I run \"apt-mirror torproject\"",
            "line": 82,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 6852778
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 83,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 31569
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror debian-security\"",
            "line": 84,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 110405013
            }
          },
          {
            "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": 228057
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:555"
            },
            "result": {
              "status": "passed",
              "duration": 1219436
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 11531
            }
          }
        ]
      },
      {
        "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 14778
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:548"
            },
            "result": {
              "status": "passed",
              "duration": 103824
            }
          }
        ],
        "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": 26317601
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.10 has been released",
            "line": 89,
            "match": {
              "location": "features/step_definitions/build.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 27921238
            }
          },
          {
            "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": 40160748
            }
          },
          {
            "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": 102712
            }
          },
          {
            "keyword": "And ",
            "name": "I checkout the 0.10 tag",
            "line": 92,
            "match": {
              "location": "features/step_definitions/build.rb:83"
            },
            "result": {
              "status": "passed",
              "duration": 4196518
            }
          },
          {
            "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": 1022663824
            }
          },
          {
            "keyword": "And ",
            "name": "I successfully run \"apt-mirror debian\"",
            "line": 94,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 75142532
            }
          },
          {
            "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": 186300
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror torproject\"",
            "line": 96,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 57961840
            }
          },
          {
            "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": 172484
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror debian-security\"",
            "line": 98,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 57345614
            }
          },
          {
            "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": 166833
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:555"
            },
            "result": {
              "status": "passed",
              "duration": 1220599
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 6964
            }
          }
        ]
      },
      {
        "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 11842
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:548"
            },
            "result": {
              "status": "passed",
              "duration": 71174
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "Tails 0.10 has been released",
            "line": 102,
            "match": {
              "location": "features/step_definitions/build.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 35877787
            }
          },
          {
            "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": 65466821
            }
          },
          {
            "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": 53912
            }
          },
          {
            "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": 6808245
            }
          },
          {
            "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": 43562
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run tails-custom-apt-sources",
            "line": 107,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 34105222
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see only the 'stable' suite",
            "line": 108,
            "match": {
              "location": "features/step_definitions/build.rb:117"
            },
            "result": {
              "status": "passed",
              "duration": 210373
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:555"
            },
            "result": {
              "status": "passed",
              "duration": 1380328
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 7754
            }
          }
        ]
      },
      {
        "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 12774
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:548"
            },
            "result": {
              "status": "passed",
              "duration": 80821
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "Tails 0.10 has been released",
            "line": 111,
            "match": {
              "location": "features/step_definitions/build.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 57441875
            }
          },
          {
            "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": 64470324
            }
          },
          {
            "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": 62866
            }
          },
          {
            "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": 8089626
            }
          },
          {
            "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": 84889
            }
          },
          {
            "keyword": "And ",
            "name": "config/APT_overlays.d contains 'bugfix-bar'",
            "line": 116,
            "match": {
              "location": "features/step_definitions/build.rb:131"
            },
            "result": {
              "status": "passed",
              "duration": 47449
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run tails-custom-apt-sources",
            "line": 117,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 33794991
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see the 'stable' suite",
            "line": 118,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 171622
            }
          },
          {
            "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": 84799
            }
          },
          {
            "keyword": "And ",
            "name": "I should see the 'bugfix-bar' suite",
            "line": 120,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 75461
            }
          },
          {
            "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": 81141
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:555"
            },
            "result": {
              "status": "passed",
              "duration": 1152911
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 9017
            }
          }
        ]
      },
      {
        "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 14496
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:548"
            },
            "result": {
              "status": "passed",
              "duration": 76795
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "Tails 0.10 has been released",
            "line": 124,
            "match": {
              "location": "features/step_definitions/build.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 36917174
            }
          },
          {
            "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": 82417903
            }
          },
          {
            "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": 50064
            }
          },
          {
            "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": 11395555
            }
          },
          {
            "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": 87014
            }
          },
          {
            "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": 1034154275
            }
          },
          {
            "keyword": "And ",
            "name": "I run \"apt-mirror debian\"",
            "line": 130,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 7597254
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 131,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 23504
            }
          },
          {
            "keyword": "When ",
            "name": "I run \"apt-mirror torproject\"",
            "line": 132,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 6294150
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 133,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 12272
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror debian-security\"",
            "line": 134,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 66815109
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 135,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 146635
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:555"
            },
            "result": {
              "status": "passed",
              "duration": 1364668
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 8327
            }
          }
        ]
      },
      {
        "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 12364
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:548"
            },
            "result": {
              "status": "passed",
              "duration": 81773
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "Tails 0.10 has been released",
            "line": 138,
            "match": {
              "location": "features/step_definitions/build.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 78517720
            }
          },
          {
            "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": 70246443
            }
          },
          {
            "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": 44163
            }
          },
          {
            "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": 9577617
            }
          },
          {
            "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": 69911
            }
          },
          {
            "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": 1030678748
            }
          },
          {
            "keyword": "And ",
            "name": "I successfully run \"apt-mirror debian\"",
            "line": 144,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 59422940
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 145,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 146715
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror torproject\"",
            "line": 146,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 59620011
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 147,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 148468
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror debian-security\"",
            "line": 148,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 58977754
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 149,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 178004
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:555"
            },
            "result": {
              "status": "passed",
              "duration": 2523673
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 10289
            }
          }
        ]
      },
      {
        "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 13104
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:548"
            },
            "result": {
              "status": "passed",
              "duration": 127419
            }
          }
        ],
        "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": 65577658
            }
          },
          {
            "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": 77839760
            }
          },
          {
            "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": 51015
            }
          },
          {
            "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": 140535
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run tails-custom-apt-sources",
            "line": 156,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 36654041
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see the 'testing' suite",
            "line": 157,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 274865
            }
          },
          {
            "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": 320781
            }
          },
          {
            "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": 140885
            }
          },
          {
            "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": 117680
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:555"
            },
            "result": {
              "status": "passed",
              "duration": 1225097
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 11992
            }
          }
        ]
      },
      {
        "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 17673
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:548"
            },
            "result": {
              "status": "passed",
              "duration": 87503
            }
          }
        ],
        "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": 62412286
            }
          },
          {
            "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": 90599782
            }
          },
          {
            "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": 48711
            }
          },
          {
            "keyword": "And ",
            "name": "config/APT_overlays.d contains 'feature-foo'",
            "line": 166,
            "match": {
              "location": "features/step_definitions/build.rb:131"
            },
            "result": {
              "status": "passed",
              "duration": 134463
            }
          },
          {
            "keyword": "And ",
            "name": "config/APT_overlays.d contains 'bugfix-bar'",
            "line": 167,
            "match": {
              "location": "features/step_definitions/build.rb:131"
            },
            "result": {
              "status": "passed",
              "duration": 93796
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run tails-custom-apt-sources",
            "line": 168,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 39908663
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see the 'testing' suite",
            "line": 169,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 177984
            }
          },
          {
            "keyword": "And ",
            "name": "I should see the 'feature-foo' suite",
            "line": 170,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 58740
            }
          },
          {
            "keyword": "And ",
            "name": "I should see the 'bugfix-bar' suite",
            "line": 171,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 50995
            }
          },
          {
            "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": 72406
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:555"
            },
            "result": {
              "status": "passed",
              "duration": 1260692
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 9057
            }
          }
        ]
      },
      {
        "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 13545
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:548"
            },
            "result": {
              "status": "passed",
              "duration": 136577
            }
          }
        ],
        "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": 96087952
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.10 has been released",
            "line": 176,
            "match": {
              "location": "features/step_definitions/build.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 32592346
            }
          },
          {
            "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": 121086471
            }
          },
          {
            "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": 45995
            }
          },
          {
            "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": 114755
            }
          },
          {
            "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": 1026275071
            }
          },
          {
            "keyword": "And ",
            "name": "I run \"apt-mirror debian\"",
            "line": 181,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 9793372
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 182,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 33432
            }
          },
          {
            "keyword": "When ",
            "name": "I run \"apt-mirror torproject\"",
            "line": 183,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 9802547
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 184,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 23604
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror debian-security\"",
            "line": 185,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 36611532
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 186,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 230132
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:555"
            },
            "result": {
              "status": "passed",
              "duration": 2326061
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 8085
            }
          }
        ]
      },
      {
        "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 16602
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:548"
            },
            "result": {
              "status": "passed",
              "duration": 124032
            }
          }
        ],
        "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": 76526446
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.10 has been released",
            "line": 190,
            "match": {
              "location": "features/step_definitions/build.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 36172669
            }
          },
          {
            "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": 99705173
            }
          },
          {
            "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": 21260
            }
          },
          {
            "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": 72065
            }
          },
          {
            "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": 1024794596
            }
          },
          {
            "keyword": "And ",
            "name": "I successfully run \"apt-mirror debian\"",
            "line": 195,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 35337653
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 196,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 144861
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror torproject\"",
            "line": 197,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 34796808
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 198,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 135394
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror debian-security\"",
            "line": 199,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 35797977
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 200,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 130846
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:555"
            },
            "result": {
              "status": "passed",
              "duration": 1232180
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 8176
            }
          }
        ]
      },
      {
        "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 13686
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:548"
            },
            "result": {
              "status": "passed",
              "duration": 82494
            }
          }
        ],
        "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": 59132075
            }
          },
          {
            "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": 85131360
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.11 has been released",
            "line": 205,
            "match": {
              "location": "features/step_definitions/build.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 20305800
            }
          },
          {
            "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": 79519
            }
          },
          {
            "keyword": "And ",
            "name": "I checkout the 0.11 tag",
            "line": 207,
            "match": {
              "location": "features/step_definitions/build.rb:83"
            },
            "result": {
              "status": "passed",
              "duration": 2482084
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run tails-custom-apt-sources",
            "line": 208,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 55763420
            }
          },
          {
            "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": 203100
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:555"
            },
            "result": {
              "status": "passed",
              "duration": 1104001
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 8345
            }
          }
        ]
      },
      {
        "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 12404
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:548"
            },
            "result": {
              "status": "passed",
              "duration": 76694
            }
          }
        ],
        "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": 27555132
            }
          },
          {
            "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": 66607480
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.11 has been released",
            "line": 214,
            "match": {
              "location": "features/step_definitions/build.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 23199767
            }
          },
          {
            "keyword": "And ",
            "name": "config/APT_overlays.d contains 'feature-foo'",
            "line": 215,
            "match": {
              "location": "features/step_definitions/build.rb:131"
            },
            "result": {
              "status": "passed",
              "duration": 82705
            }
          },
          {
            "keyword": "And ",
            "name": "I checkout the 0.11 tag",
            "line": 216,
            "match": {
              "location": "features/step_definitions/build.rb:83"
            },
            "result": {
              "status": "passed",
              "duration": 2659426
            }
          },
          {
            "keyword": "When ",
            "name": "I run tails-custom-apt-sources",
            "line": 217,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 35891942
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 218,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 53631
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:555"
            },
            "result": {
              "status": "passed",
              "duration": 1202454
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 6441
            }
          }
        ]
      },
      {
        "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 12243
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:548"
            },
            "result": {
              "status": "passed",
              "duration": 63490
            }
          }
        ],
        "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": 72053821
            }
          },
          {
            "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": 69664801
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.11 has been released",
            "line": 223,
            "match": {
              "location": "features/step_definitions/build.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 31418966
            }
          },
          {
            "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": 115746
            }
          },
          {
            "keyword": "And ",
            "name": "I checkout the 0.11 tag",
            "line": 225,
            "match": {
              "location": "features/step_definitions/build.rb:83"
            },
            "result": {
              "status": "passed",
              "duration": 6570859
            }
          },
          {
            "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": 1028569515
            }
          },
          {
            "keyword": "And ",
            "name": "I run \"apt-mirror debian\"",
            "line": 227,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 7452562
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 228,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 24305
            }
          },
          {
            "keyword": "When ",
            "name": "I run \"apt-mirror torproject\"",
            "line": 229,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 6008907
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 230,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 12353
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror debian-security\"",
            "line": 231,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 62229511
            }
          },
          {
            "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": 145021
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:555"
            },
            "result": {
              "status": "passed",
              "duration": 1250343
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 6461
            }
          }
        ]
      },
      {
        "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 13225
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:548"
            },
            "result": {
              "status": "passed",
              "duration": 65975
            }
          }
        ],
        "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": 60802947
            }
          },
          {
            "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": 87917583
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.11 has been released",
            "line": 237,
            "match": {
              "location": "features/step_definitions/build.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 18949949
            }
          },
          {
            "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": 154769
            }
          },
          {
            "keyword": "And ",
            "name": "I checkout the 0.11 tag",
            "line": 239,
            "match": {
              "location": "features/step_definitions/build.rb:83"
            },
            "result": {
              "status": "passed",
              "duration": 3367513
            }
          },
          {
            "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": 1028631290
            }
          },
          {
            "keyword": "And ",
            "name": "I successfully run \"apt-mirror debian\"",
            "line": 241,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 56480052
            }
          },
          {
            "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": 1534677
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror torproject\"",
            "line": 243,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 57767998
            }
          },
          {
            "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": 162354
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror debian-security\"",
            "line": 245,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 58691338
            }
          },
          {
            "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": 166341
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:555"
            },
            "result": {
              "status": "passed",
              "duration": 1185694
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 6653
            }
          }
        ]
      },
      {
        "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 14859
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:548"
            },
            "result": {
              "status": "passed",
              "duration": 80932
            }
          }
        ],
        "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": 43123260
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.11 has been released",
            "line": 250,
            "match": {
              "location": "features/step_definitions/build.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 22871972
            }
          },
          {
            "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": 67435261
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.12-rc1 has been tagged",
            "line": 252,
            "match": {
              "location": "features/step_definitions/build.rb:30"
            },
            "result": {
              "status": "passed",
              "duration": 5431554
            }
          },
          {
            "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": 118402
            }
          },
          {
            "keyword": "And ",
            "name": "I checkout the 0.12-rc1 tag",
            "line": 254,
            "match": {
              "location": "features/step_definitions/build.rb:83"
            },
            "result": {
              "status": "passed",
              "duration": 6621423
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run tails-custom-apt-sources",
            "line": 255,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 58640151
            }
          },
          {
            "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": 169909
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:555"
            },
            "result": {
              "status": "passed",
              "duration": 1094162
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 6462
            }
          }
        ]
      },
      {
        "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 14056
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:548"
            },
            "result": {
              "status": "passed",
              "duration": 117491
            }
          }
        ],
        "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": 31369965
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.11 has been released",
            "line": 260,
            "match": {
              "location": "features/step_definitions/build.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 17520960
            }
          },
          {
            "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": 66102873
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.12-rc1 has been tagged",
            "line": 262,
            "match": {
              "location": "features/step_definitions/build.rb:30"
            },
            "result": {
              "status": "passed",
              "duration": 4031849
            }
          },
          {
            "keyword": "And ",
            "name": "config/APT_overlays.d contains 'bugfix-bar'",
            "line": 263,
            "match": {
              "location": "features/step_definitions/build.rb:131"
            },
            "result": {
              "status": "passed",
              "duration": 220584
            }
          },
          {
            "keyword": "And ",
            "name": "I checkout the 0.12-rc1 tag",
            "line": 264,
            "match": {
              "location": "features/step_definitions/build.rb:83"
            },
            "result": {
              "status": "passed",
              "duration": 2604373
            }
          },
          {
            "keyword": "When ",
            "name": "I run tails-custom-apt-sources",
            "line": 265,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 31476735
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 266,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 41257
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:555"
            },
            "result": {
              "status": "passed",
              "duration": 1072361
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 6332
            }
          }
        ]
      },
      {
        "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 10640
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:548"
            },
            "result": {
              "status": "passed",
              "duration": 66815
            }
          }
        ],
        "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": 26924860
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.10~rc1 has been released",
            "line": 270,
            "match": {
              "location": "features/step_definitions/build.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 15111492
            }
          },
          {
            "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": 95086464
            }
          },
          {
            "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": 25247
            }
          },
          {
            "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": 11493900
            }
          },
          {
            "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": 68308
            }
          },
          {
            "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": 1024997056
            }
          },
          {
            "keyword": "And ",
            "name": "I run \"apt-mirror debian\"",
            "line": 276,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 6920935
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 277,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 40436
            }
          },
          {
            "keyword": "When ",
            "name": "I run \"apt-mirror torproject\"",
            "line": 278,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 6135173
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 279,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 28283
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror debian-security\"",
            "line": 280,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 29625924
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 281,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 138068
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:555"
            },
            "result": {
              "status": "passed",
              "duration": 1472983
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 6232
            }
          }
        ]
      },
      {
        "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 11852
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:548"
            },
            "result": {
              "status": "passed",
              "duration": 238177
            }
          }
        ],
        "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": 26757286
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.10~rc1 has been released",
            "line": 285,
            "match": {
              "location": "features/step_definitions/build.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 17950466
            }
          },
          {
            "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": 92021898
            }
          },
          {
            "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": 43101
            }
          },
          {
            "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": 6229528
            }
          },
          {
            "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": 73388
            }
          },
          {
            "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": 1021664698
            }
          },
          {
            "keyword": "And ",
            "name": "I successfully run \"apt-mirror debian\"",
            "line": 291,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 34026887
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 292,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 145453
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror torproject\"",
            "line": 293,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 34218905
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 294,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 137046
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror debian-security\"",
            "line": 295,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 33787557
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 296,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 126277
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:555"
            },
            "result": {
              "status": "passed",
              "duration": 1321407
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 7824
            }
          }
        ]
      },
      {
        "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 11722
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:548"
            },
            "result": {
              "status": "passed",
              "duration": 77786
            }
          }
        ],
        "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": 40929677
            }
          },
          {
            "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": 45295
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run tails-custom-apt-sources",
            "line": 301,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 34289909
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see only the 'devel' suite",
            "line": 302,
            "match": {
              "location": "features/step_definitions/build.rb:117"
            },
            "result": {
              "status": "passed",
              "duration": 159660
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:555"
            },
            "result": {
              "status": "passed",
              "duration": 897472
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 6893
            }
          }
        ]
      },
      {
        "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 10549
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:548"
            },
            "result": {
              "status": "passed",
              "duration": 59701
            }
          }
        ],
        "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": 37225883
            }
          },
          {
            "keyword": "And ",
            "name": "config/APT_overlays.d contains 'feature-foo'",
            "line": 306,
            "match": {
              "location": "features/step_definitions/build.rb:131"
            },
            "result": {
              "status": "passed",
              "duration": 59321
            }
          },
          {
            "keyword": "And ",
            "name": "config/APT_overlays.d contains 'bugfix-bar'",
            "line": 307,
            "match": {
              "location": "features/step_definitions/build.rb:131"
            },
            "result": {
              "status": "passed",
              "duration": 33763
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run tails-custom-apt-sources",
            "line": 308,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 35509595
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see the 'devel' suite",
            "line": 309,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 107573
            }
          },
          {
            "keyword": "And ",
            "name": "I should see the 'feature-foo' suite",
            "line": 310,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 68248
            }
          },
          {
            "keyword": "And ",
            "name": "I should see the 'bugfix-bar' suite",
            "line": 311,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 56996
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:555"
            },
            "result": {
              "status": "passed",
              "duration": 871954
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 5661
            }
          }
        ]
      },
      {
        "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 9928
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:548"
            },
            "result": {
              "status": "passed",
              "duration": 51386
            }
          }
        ],
        "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": 35560390
            }
          },
          {
            "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": 54362
            }
          },
          {
            "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": 1026133195
            }
          },
          {
            "keyword": "And ",
            "name": "I successfully run \"apt-mirror debian\"",
            "line": 317,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 10037488
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 318,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 121528
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror torproject\"",
            "line": 319,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 8640680
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 320,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 62909
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror debian-security\"",
            "line": 321,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 8244829
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 322,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 62066
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:555"
            },
            "result": {
              "status": "passed",
              "duration": 1078572
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 6692
            }
          }
        ]
      },
      {
        "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 11341
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:548"
            },
            "result": {
              "status": "passed",
              "duration": 68569
            }
          }
        ],
        "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": 35146004
            }
          },
          {
            "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": 173766
            }
          },
          {
            "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": 1023373502
            }
          },
          {
            "keyword": "And ",
            "name": "I run \"apt-mirror debian\"",
            "line": 328,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 11115651
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 329,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 43330
            }
          },
          {
            "keyword": "When ",
            "name": "I run \"apt-mirror torproject\"",
            "line": 330,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 15329240
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 331,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 42030
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror debian-security\"",
            "line": 332,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 12335898
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 333,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 136256
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:555"
            },
            "result": {
              "status": "passed",
              "duration": 1317090
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 6993
            }
          }
        ]
      },
      {
        "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 12163
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:548"
            },
            "result": {
              "status": "passed",
              "duration": 101801
            }
          }
        ],
        "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": 53688438
            }
          },
          {
            "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": 180900
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run tails-custom-apt-sources",
            "line": 338,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 33684914
            }
          },
          {
            "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": 194435
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:555"
            },
            "result": {
              "status": "passed",
              "duration": 1337669
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 6621
            }
          }
        ]
      },
      {
        "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 12453
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:548"
            },
            "result": {
              "status": "passed",
              "duration": 92342
            }
          }
        ],
        "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": 25804400
            }
          },
          {
            "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": 74139
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run tails-custom-apt-sources",
            "line": 344,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 31095551
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see the 'feature-jessie' suite",
            "line": 345,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 185108
            }
          },
          {
            "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": 75061
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:555"
            },
            "result": {
              "status": "passed",
              "duration": 1412608
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 7264
            }
          }
        ]
      },
      {
        "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 11842
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:548"
            },
            "result": {
              "status": "passed",
              "duration": 128501
            }
          }
        ],
        "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": 25912793
            }
          },
          {
            "keyword": "And ",
            "name": "config/APT_overlays.d contains 'feature-thunderbird'",
            "line": 350,
            "match": {
              "location": "features/step_definitions/build.rb:131"
            },
            "result": {
              "status": "passed",
              "duration": 231854
            }
          },
          {
            "keyword": "And ",
            "name": "config/APT_overlays.d contains 'bugfix-bar'",
            "line": 351,
            "match": {
              "location": "features/step_definitions/build.rb:131"
            },
            "result": {
              "status": "passed",
              "duration": 35106
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run tails-custom-apt-sources",
            "line": 352,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 34009694
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see the 'devel' suite",
            "line": 353,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 204062
            }
          },
          {
            "keyword": "And ",
            "name": "I should see the 'feature-thunderbird' suite",
            "line": 354,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 68299
            }
          },
          {
            "keyword": "And ",
            "name": "I should see the 'bugfix-bar' suite",
            "line": 355,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 324018
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:555"
            },
            "result": {
              "status": "passed",
              "duration": 986140
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 6423
            }
          }
        ]
      },
      {
        "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 11842
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:548"
            },
            "result": {
              "status": "passed",
              "duration": 76283
            }
          }
        ],
        "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": 75269861
            }
          },
          {
            "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": 58349
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run tails-custom-apt-sources",
            "line": 360,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 38254513
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see only the 'devel' suite",
            "line": 361,
            "match": {
              "location": "features/step_definitions/build.rb:117"
            },
            "result": {
              "status": "passed",
              "duration": 212770
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:555"
            },
            "result": {
              "status": "passed",
              "duration": 1049748
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 6832
            }
          }
        ]
      },
      {
        "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 12704
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:548"
            },
            "result": {
              "status": "passed",
              "duration": 76624
            }
          }
        ],
        "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": 32756213
            }
          },
          {
            "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": 79680
            }
          },
          {
            "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": 1021334618
            }
          },
          {
            "keyword": "And ",
            "name": "I successfully run \"apt-mirror debian\"",
            "line": 367,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 8885849
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 368,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 146425
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror torproject\"",
            "line": 369,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 11592443
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 370,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 105256
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror debian-security\"",
            "line": 371,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 7449447
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 372,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 62627
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:555"
            },
            "result": {
              "status": "passed",
              "duration": 1394765
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 6461
            }
          }
        ]
      },
      {
        "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 11141
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:548"
            },
            "result": {
              "status": "passed",
              "duration": 96962
            }
          }
        ],
        "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": 33594645
            }
          },
          {
            "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": 140043
            }
          },
          {
            "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": 1018305922
            }
          },
          {
            "keyword": "And ",
            "name": "I run \"apt-mirror debian\"",
            "line": 378,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 7995720
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 379,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 21692
            }
          },
          {
            "keyword": "When ",
            "name": "I run \"apt-mirror torproject\"",
            "line": 380,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 9893409
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 381,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 13525
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror debian-security\"",
            "line": 382,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 9791989
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 383,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 108794
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:555"
            },
            "result": {
              "status": "passed",
              "duration": 1079063
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 6222
            }
          }
        ]
      },
      {
        "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 10330
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:548"
            },
            "result": {
              "status": "passed",
              "duration": 65972
            }
          }
        ],
        "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": 41819726
            }
          },
          {
            "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": 63168
            }
          },
          {
            "keyword": "And ",
            "name": "config/APT_overlays.d contains 'bugfix-bar'",
            "line": 388,
            "match": {
              "location": "features/step_definitions/build.rb:131"
            },
            "result": {
              "status": "passed",
              "duration": 34484
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run tails-custom-apt-sources",
            "line": 389,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 31026451
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see the 'feature-jessie' suite",
            "line": 390,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 173986
            }
          },
          {
            "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": 90701
            }
          },
          {
            "keyword": "And ",
            "name": "I should see the 'bugfix-bar' suite",
            "line": 392,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 74880
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:555"
            },
            "result": {
              "status": "passed",
              "duration": 970631
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 6552
            }
          }
        ]
      },
      {
        "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 11342
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:548"
            },
            "result": {
              "status": "passed",
              "duration": 68469
            }
          }
        ],
        "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": 37913773
            }
          },
          {
            "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": 50746
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run tails-custom-apt-sources",
            "line": 397,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 33647584
            }
          },
          {
            "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": 185838
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:555"
            },
            "result": {
              "status": "passed",
              "duration": 902833
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 7955
            }
          }
        ]
      },
      {
        "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 12043
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:548"
            },
            "result": {
              "status": "passed",
              "duration": 79939
            }
          }
        ],
        "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": 32743249
            }
          },
          {
            "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": 75762
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run tails-custom-apt-sources",
            "line": 403,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 33605014
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see the 'devel' suite",
            "line": 404,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 150202
            }
          },
          {
            "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": 62047
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:555"
            },
            "result": {
              "status": "passed",
              "duration": 949811
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 5631
            }
          }
        ]
      },
      {
        "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 10991
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:548"
            },
            "result": {
              "status": "passed",
              "duration": 70452
            }
          }
        ],
        "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": 93362061
            }
          },
          {
            "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": 74419
            }
          },
          {
            "keyword": "When ",
            "name": "I run tails-custom-apt-sources",
            "line": 410,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 18862254
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 411,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 35767
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:555"
            },
            "result": {
              "status": "passed",
              "duration": 2929983
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 6111
            }
          }
        ]
      },
      {
        "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 15710
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:548"
            },
            "result": {
              "status": "passed",
              "duration": 59131
            }
          }
        ],
        "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": 60646244
            }
          },
          {
            "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": 32320
            }
          },
          {
            "keyword": "When ",
            "name": "I run tails-custom-apt-sources",
            "line": 416,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 6717223
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 417,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 16511
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:555"
            },
            "result": {
              "status": "passed",
              "duration": 1335834
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 5811
            }
          }
        ]
      },
      {
        "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 10640
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:548"
            },
            "result": {
              "status": "passed",
              "duration": 57980
            }
          }
        ],
        "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": 63598378
            }
          },
          {
            "keyword": "And ",
            "name": "the config/base_branch file is empty",
            "line": 421,
            "match": {
              "location": "features/step_definitions/build.rb:147"
            },
            "result": {
              "status": "passed",
              "duration": 31069
            }
          },
          {
            "keyword": "When ",
            "name": "I run tails-custom-apt-sources",
            "line": 422,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 7997836
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 423,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 19788
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:555"
            },
            "result": {
              "status": "passed",
              "duration": 888356
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 5281
            }
          }
        ]
      }
    ]
  },
  {
    "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 11762
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 5799052
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I create sample videos",
            "line": 8,
            "match": {
              "location": "features/step_definitions/celluloid.rb:4"
            },
            "result": {
              "status": "passed",
              "duration": 174713583
            }
          }
        ]
      },
      {
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 7257396062
            }
          },
          {
            "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": 7951600535
            }
          },
          {
            "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": 43913622
            }
          },
          {
            "keyword": "And ",
            "name": "the file \"/home/amnesia/video.mp4\" exists",
            "line": 14,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1007"
            },
            "result": {
              "status": "passed",
              "duration": 43679843
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Files\" via GNOME Activities Overview",
            "line": 15,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1165"
            },
            "result": {
              "status": "passed",
              "duration": 7916979633
            }
          },
          {
            "keyword": "And ",
            "name": "I open \"/home/amnesia/video.mp4\" in Files",
            "line": 16,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1942"
            },
            "result": {
              "status": "passed",
              "duration": 6125972824
            }
          },
          {
            "keyword": "Then ",
            "name": "I see the 30s-long video loaded after at most 10 seconds",
            "line": 17,
            "match": {
              "location": "features/step_definitions/celluloid.rb:43"
            },
            "result": {
              "status": "passed",
              "duration": 4601936221
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 1663510176
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 517260
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 15509
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 4067597
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I create sample videos",
            "line": 8,
            "match": {
              "location": "features/step_definitions/celluloid.rb:4"
            },
            "result": {
              "status": "passed",
              "duration": 160486759
            }
          }
        ]
      },
      {
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 7258140124
            }
          },
          {
            "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": 8111124393
            }
          },
          {
            "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": 42168159
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Celluloid\" via GNOME Activities Overview",
            "line": 28,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1165"
            },
            "result": {
              "status": "passed",
              "duration": 7972820675
            }
          },
          {
            "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": 9537373817
            }
          },
          {
            "keyword": "Then ",
            "name": "I see the 30s-long video loaded after at most 10 seconds",
            "line": 30,
            "match": {
              "location": "features/step_definitions/celluloid.rb:43"
            },
            "result": {
              "status": "passed",
              "duration": 3860744223
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 1666154408
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 459270
            }
          }
        ]
      }
    ]
  },
  {
    "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 13586
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 4071033
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 9,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6661367891
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:185"
            },
            "result": {
              "status": "passed",
              "duration": 5562598
            }
          },
          {
            "keyword": "And ",
            "name": "the network is plugged",
            "line": 11,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 36996323
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 12,
            "match": {
              "location": "features/step_definitions/common_steps.rb:650"
            },
            "result": {
              "status": "passed",
              "duration": 10068678159
            }
          },
          {
            "keyword": "And ",
            "name": "all notifications have disappeared",
            "line": 13,
            "match": {
              "location": "features/step_definitions/common_steps.rb:762"
            },
            "result": {
              "status": "passed",
              "duration": 6783577468
            }
          },
          {
            "keyword": "And ",
            "name": "available upgrades have been checked",
            "line": 14,
            "match": {
              "location": "features/step_definitions/common_steps.rb:758"
            },
            "result": {
              "status": "passed",
              "duration": 57883772
            }
          }
        ]
      },
      {
        "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:4"
            },
            "result": {
              "status": "passed",
              "duration": 108524404
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 989168140
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 50732504
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 8,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 13335
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 3034570
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 9,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6883429562
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:185"
            },
            "result": {
              "status": "passed",
              "duration": 11739670
            }
          },
          {
            "keyword": "And ",
            "name": "the network is plugged",
            "line": 11,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 25348856
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 12,
            "match": {
              "location": "features/step_definitions/common_steps.rb:650"
            },
            "result": {
              "status": "passed",
              "duration": 11234129856
            }
          },
          {
            "keyword": "And ",
            "name": "all notifications have disappeared",
            "line": 13,
            "match": {
              "location": "features/step_definitions/common_steps.rb:762"
            },
            "result": {
              "status": "passed",
              "duration": 7068413925
            }
          },
          {
            "keyword": "And ",
            "name": "available upgrades have been checked",
            "line": 14,
            "match": {
              "location": "features/step_definitions/common_steps.rb:758"
            },
            "result": {
              "status": "passed",
              "duration": 54274216
            }
          }
        ]
      },
      {
        "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:955"
            },
            "result": {
              "status": "passed",
              "duration": 110561056
            }
          },
          {
            "keyword": "And ",
            "name": "I switch to the \"manually-added-con\" NetworkManager connection",
            "line": 21,
            "match": {
              "location": "features/step_definitions/common_steps.rb:970"
            },
            "result": {
              "status": "passed",
              "duration": 386363013
            }
          },
          {
            "keyword": "Then ",
            "name": "the hostname should not have been leaked on the network",
            "line": 22,
            "match": {
              "location": "features/step_definitions/dhcp.rb:4"
            },
            "result": {
              "status": "passed",
              "duration": 141060498
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 807315927
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 55707312
            }
          }
        ]
      }
    ]
  },
  {
    "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 16631
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 2901420
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 5,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6733288913
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Tails Documentation\" via GNOME Activities Overview",
            "line": 6,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1165"
            },
            "result": {
              "status": "passed",
              "duration": 9226195089
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Browser has started",
            "line": 7,
            "match": {
              "location": "features/step_definitions/browser.rb:502"
            },
            "result": {
              "status": "passed",
              "duration": 12355718086
            }
          },
          {
            "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": 628319772
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 853858299
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 20969
            }
          }
        ]
      },
      {
        "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 13165
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 2864811
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 9947523022
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Tails Documentation\" via GNOME Activities Overview",
            "line": 12,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1165"
            },
            "result": {
              "status": "passed",
              "duration": 9252175261
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Browser has started",
            "line": 13,
            "match": {
              "location": "features/step_definitions/browser.rb:502"
            },
            "result": {
              "status": "passed",
              "duration": 12716686119
            }
          },
          {
            "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": 499094475
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 925467940
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 23013
            }
          }
        ]
      }
    ]
  },
  {
    "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 16442
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 3497546
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:523"
            },
            "result": {
              "status": "passed",
              "duration": 1895523
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6825032139
            }
          },
          {
            "keyword": "When ",
            "name": "I start Electrum through the GNOME menu",
            "line": 9,
            "match": {
              "location": "features/step_definitions/electrum.rb:13"
            },
            "result": {
              "status": "passed",
              "duration": 9743148603
            }
          },
          {
            "keyword": "But ",
            "name": "the \"electrum\" tps feature is not enabled",
            "line": 10,
            "match": {
              "location": "features/step_definitions/usb.rb:822"
            },
            "result": {
              "status": "passed",
              "duration": 208461026
            }
          },
          {
            "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": 837869033
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:531"
            },
            "result": {
              "status": "passed",
              "duration": 104471160
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 1016496937
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 54050
            }
          }
        ]
      }
    ]
  },
  {
    "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 13325
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 3478662
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 7,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6858043154
            }
          },
          {
            "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": 4809910877
            }
          },
          {
            "keyword": "Then ",
            "name": "I see \"CupsTestPage.png\" after at most 40 seconds",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:798"
            },
            "result": {
              "status": "passed",
              "duration": 1095279375
            }
          },
          {
            "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": 4836521520
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 879630965
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 22592
            }
          }
        ]
      },
      {
        "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 11501
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 2958306
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 13,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6759382748
            }
          },
          {
            "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:1038"
            },
            "result": {
              "status": "passed",
              "duration": 68745200
            }
          },
          {
            "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": 4198891285
            }
          },
          {
            "keyword": "Then ",
            "name": "I see \"CupsTestPage.png\" after at most 40 seconds",
            "line": 16,
            "match": {
              "location": "features/step_definitions/common_steps.rb:798"
            },
            "result": {
              "status": "passed",
              "duration": 1171571736
            }
          },
          {
            "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": 4373474984
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 699425838
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 21080
            }
          }
        ]
      },
      {
        "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 12974
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 2982992
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 7349070735
            }
          },
          {
            "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:1038"
            },
            "result": {
              "status": "passed",
              "duration": 63365374
            }
          },
          {
            "keyword": "Then ",
            "name": "the file \"/home/amnesia/Persistent/default-testpage.pdf\" exists",
            "line": 22,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1007"
            },
            "result": {
              "status": "passed",
              "duration": 55945703
            }
          },
          {
            "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": 4191191478
            }
          },
          {
            "keyword": "Then ",
            "name": "I see \"CupsTestPage.png\" after at most 40 seconds",
            "line": 24,
            "match": {
              "location": "features/step_definitions/common_steps.rb:798"
            },
            "result": {
              "status": "passed",
              "duration": 1128468331
            }
          },
          {
            "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": 4346912298
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 916319111
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 23113
            }
          }
        ]
      }
    ]
  },
  {
    "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 15649
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 3948403
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 6,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6748752352
            }
          },
          {
            "keyword": "And ",
            "name": "I wait 10 seconds",
            "line": 7,
            "output": [
              "Slept for 10 seconds"
            ],
            "match": {
              "location": "features/step_definitions/common_steps.rb:1370"
            },
            "result": {
              "status": "passed",
              "duration": 10001698011
            }
          },
          {
            "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": 412041609
            }
          },
          {
            "keyword": "When ",
            "name": "I press the \"PRINTSCREEN\" key",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1264"
            },
            "result": {
              "status": "passed",
              "duration": 120668922
            }
          },
          {
            "keyword": "And ",
            "name": "GNOME offers me various screenshot options",
            "line": 10,
            "match": {
              "location": "features/step_definitions/gnome.rb:1"
            },
            "result": {
              "status": "passed",
              "duration": 843504391
            }
          },
          {
            "keyword": "And ",
            "name": "I press the \"Return\" key",
            "line": 11,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1264"
            },
            "result": {
              "status": "passed",
              "duration": 123121269
            }
          },
          {
            "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": 102580409
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 896188329
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 23283
            }
          }
        ]
      },
      {
        "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 16961
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 2857599
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 15,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6700513306
            }
          },
          {
            "keyword": "When ",
            "name": "the \"Dogtail rules!\" notification is sent",
            "line": 16,
            "match": {
              "location": "features/step_definitions/gnome.rb:26"
            },
            "result": {
              "status": "passed",
              "duration": 215361492
            }
          },
          {
            "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": 356653476
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 892039114
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 33813
            }
          }
        ]
      },
      {
        "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 14447
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 2949741
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 7044412090
            }
          },
          {
            "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:137"
            },
            "result": {
              "status": "passed",
              "duration": 24299239
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 25,
            "match": {
              "location": "features/step_definitions/common_steps.rb:650"
            },
            "result": {
              "status": "passed",
              "duration": 9946479777
            }
          },
          {
            "keyword": "And ",
            "name": "all notifications have disappeared",
            "line": 26,
            "match": {
              "location": "features/step_definitions/common_steps.rb:762"
            },
            "result": {
              "status": "passed",
              "duration": 7084327251
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Additional Software\" via GNOME Activities Overview",
            "line": 27,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1165"
            },
            "result": {
              "status": "passed",
              "duration": 9230387008
            }
          },
          {
            "keyword": "And ",
            "name": "I close the \"tails-additional-software-config\" window",
            "line": 28,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1203"
            },
            "result": {
              "status": "passed",
              "duration": 1821055809
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Disks\" via GNOME Activities Overview",
            "line": 29,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1165"
            },
            "result": {
              "status": "passed",
              "duration": 8059882520
            }
          },
          {
            "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:1234"
            },
            "result": {
              "status": "passed",
              "duration": 1507421801
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Console\" via GNOME Activities Overview",
            "line": 32,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1165"
            },
            "result": {
              "status": "passed",
              "duration": 8105235554
            }
          },
          {
            "keyword": "And ",
            "name": "I close Console",
            "line": 33,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1246"
            },
            "result": {
              "status": "passed",
              "duration": 2847266905
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Files\" via GNOME Activities Overview",
            "line": 34,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1165"
            },
            "result": {
              "status": "passed",
              "duration": 7594112571
            }
          },
          {
            "keyword": "And ",
            "name": "I close the \"org.gnome.Nautilus\" window",
            "line": 35,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1203"
            },
            "result": {
              "status": "passed",
              "duration": 13813466919
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Persistent Storage\" via GNOME Activities Overview",
            "line": 36,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1165"
            },
            "result": {
              "status": "passed",
              "duration": 10009604226
            }
          },
          {
            "keyword": "And ",
            "name": "I close the \"tps-frontend\" window",
            "line": 37,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1203"
            },
            "result": {
              "status": "passed",
              "duration": 2227275474
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Back Up Persistent Storage\" via GNOME Activities Overview",
            "line": 38,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1165"
            },
            "result": {
              "status": "passed",
              "duration": 10380504689
            }
          },
          {
            "keyword": "And ",
            "name": "I close the \"zenity\" window",
            "line": 39,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1203"
            },
            "result": {
              "status": "passed",
              "duration": 2012117644
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Pidgin\" via GNOME Activities Overview",
            "line": 40,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1165"
            },
            "result": {
              "status": "passed",
              "duration": 7639911411
            }
          },
          {
            "keyword": "And ",
            "name": "I close the \"Pidgin\" window via Alt+F4",
            "line": 41,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1234"
            },
            "result": {
              "status": "passed",
              "duration": 2034589671
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Thunderbird\" via GNOME Activities Overview",
            "line": 42,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1165"
            },
            "result": {
              "status": "passed",
              "duration": 8441127757
            }
          },
          {
            "keyword": "And ",
            "name": "I click \"Learn More\" in the \"Install Thunderbird\" zenity dialog",
            "line": 43,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1900"
            },
            "result": {
              "status": "passed",
              "duration": 3656145962
            }
          },
          {
            "keyword": "And ",
            "name": "I close the \"Firefox\" window",
            "line": 44,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1203"
            },
            "result": {
              "status": "passed",
              "duration": 9009392524
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Tor Browser\" via GNOME Activities Overview",
            "line": 45,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1165"
            },
            "result": {
              "status": "passed",
              "duration": 8420454214
            }
          },
          {
            "keyword": "And ",
            "name": "I close the \"Firefox\" window",
            "line": 46,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1203"
            },
            "result": {
              "status": "passed",
              "duration": 2932520123
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Unlock VeraCrypt Volumes\" via GNOME Activities Overview",
            "line": 47,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1165"
            },
            "result": {
              "status": "passed",
              "duration": 9849354952
            }
          },
          {
            "keyword": "And ",
            "name": "I close the \"unlock-veracrypt-volumes\" window",
            "line": 48,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1203"
            },
            "result": {
              "status": "passed",
              "duration": 1804572986
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Unsafe Browser\" via GNOME Activities Overview",
            "line": 49,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1165"
            },
            "result": {
              "status": "passed",
              "duration": 8731263531
            }
          },
          {
            "keyword": "And ",
            "name": "I close the \"Firefox\" window",
            "line": 50,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1203"
            },
            "result": {
              "status": "passed",
              "duration": 4003427350
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Secrets\" via GNOME Activities Overview",
            "line": 51,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1165"
            },
            "result": {
              "status": "passed",
              "duration": 7828535878
            }
          },
          {
            "keyword": "And ",
            "name": "I close the \"secrets\" window",
            "line": 52,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1203"
            },
            "result": {
              "status": "passed",
              "duration": 2792997361
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 1486879461
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 21371
            }
          }
        ]
      }
    ]
  },
  {
    "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 17162
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 5823859
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 16,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 100767461
            }
          },
          {
            "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": 42700
            }
          },
          {
            "keyword": "When ",
            "name": "I start the computer",
            "line": 16,
            "match": {
              "location": "features/step_definitions/common_steps.rb:202"
            },
            "result": {
              "status": "passed",
              "duration": 726785881
            }
          },
          {
            "keyword": "Then ",
            "name": "the computer boots Tails",
            "line": 16,
            "match": {
              "location": "features/step_definitions/common_steps.rb:402"
            },
            "result": {
              "status": "passed",
              "duration": 25373849917
            }
          },
          {
            "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": 2994912830
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 585890283
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 7879694
            }
          }
        ]
      },
      {
        "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 21180
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 5432857
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 17,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 79498815
            }
          },
          {
            "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": 38201
            }
          },
          {
            "keyword": "When ",
            "name": "I start the computer",
            "line": 17,
            "match": {
              "location": "features/step_definitions/common_steps.rb:202"
            },
            "result": {
              "status": "passed",
              "duration": 873297632
            }
          },
          {
            "keyword": "Then ",
            "name": "the computer boots Tails",
            "line": 17,
            "match": {
              "location": "features/step_definitions/common_steps.rb:402"
            },
            "result": {
              "status": "passed",
              "duration": 25349141022
            }
          },
          {
            "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": 1270207910
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 642755532
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 6353783
            }
          }
        ]
      },
      {
        "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 19066
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 1712931
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 18,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 75314169
            }
          },
          {
            "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": 34455
            }
          },
          {
            "keyword": "When ",
            "name": "I start the computer",
            "line": 18,
            "match": {
              "location": "features/step_definitions/common_steps.rb:202"
            },
            "result": {
              "status": "passed",
              "duration": 768749412
            }
          },
          {
            "keyword": "Then ",
            "name": "the computer boots Tails",
            "line": 18,
            "match": {
              "location": "features/step_definitions/common_steps.rb:402"
            },
            "result": {
              "status": "passed",
              "duration": 24762411331
            }
          },
          {
            "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": 1315895500
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 791716983
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 7036875
            }
          }
        ]
      },
      {
        "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 18023
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 1749551
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 29,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 53904318
            }
          },
          {
            "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 7255683566
            }
          },
          {
            "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": 1298483834
            }
          },
          {
            "keyword": "Then ",
            "name": "I see a disk failure message",
            "line": 29,
            "match": {
              "location": "features/step_definitions/hardware.rb:38"
            },
            "result": {
              "status": "passed",
              "duration": 807664896
            }
          },
          {
            "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": 17526016201
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 1518815330
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 21280
            }
          }
        ]
      },
      {
        "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 16471
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 3647440
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 30,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 61315755
            }
          },
          {
            "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 7276958444
            }
          },
          {
            "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": 329016556
            }
          },
          {
            "keyword": "Then ",
            "name": "I see a disk failure message",
            "line": 30,
            "match": {
              "location": "features/step_definitions/hardware.rb:38"
            },
            "result": {
              "status": "passed",
              "duration": 1454319461
            }
          },
          {
            "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": 18316900457
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 1191228845
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 20449
            }
          }
        ]
      },
      {
        "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 12744
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 2801162
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 31,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 51159783
            }
          },
          {
            "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 7004237726
            }
          },
          {
            "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": 330029054
            }
          },
          {
            "keyword": "Then ",
            "name": "I see a disk failure message",
            "line": 31,
            "match": {
              "location": "features/step_definitions/hardware.rb:38"
            },
            "result": {
              "status": "passed",
              "duration": 1654892592
            }
          },
          {
            "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": 17932157846
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 1567327162
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 21260
            }
          }
        ]
      },
      {
        "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 11882
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 5044226
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 8577933377
            }
          },
          {
            "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": 217693653
            }
          },
          {
            "keyword": "And ",
            "name": "I power off the computer",
            "line": 45,
            "match": {
              "location": "features/step_definitions/common_steps.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 268575182
            }
          },
          {
            "keyword": "When ",
            "name": "I start the computer",
            "line": 45,
            "match": {
              "location": "features/step_definitions/common_steps.rb:202"
            },
            "result": {
              "status": "passed",
              "duration": 832534389
            }
          },
          {
            "keyword": "Then ",
            "name": "the computer boots Tails",
            "line": 45,
            "match": {
              "location": "features/step_definitions/common_steps.rb:402"
            },
            "result": {
              "status": "passed",
              "duration": 40889990048
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session",
            "line": 45,
            "match": {
              "location": "features/step_definitions/common_steps.rb:514"
            },
            "result": {
              "status": "passed",
              "duration": 10259780010
            }
          },
          {
            "keyword": "And ",
            "name": "all notifications have disappeared",
            "line": 45,
            "match": {
              "location": "features/step_definitions/common_steps.rb:762"
            },
            "result": {
              "status": "passed",
              "duration": 7060111118
            }
          },
          {
            "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": 149429455
            }
          },
          {
            "keyword": "And ",
            "name": "Tails detected partitioning error partitioning-corruption",
            "line": 45,
            "match": {
              "location": "features/step_definitions/hardware.rb:129"
            },
            "result": {
              "status": "passed",
              "duration": 4997301
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 1013286314
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 7719453
            }
          }
        ]
      },
      {
        "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 17352
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 2910608
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 7215796802
            }
          },
          {
            "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": 231085871
            }
          },
          {
            "keyword": "And ",
            "name": "I power off the computer",
            "line": 46,
            "match": {
              "location": "features/step_definitions/common_steps.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 254892476
            }
          },
          {
            "keyword": "When ",
            "name": "I start the computer",
            "line": 46,
            "match": {
              "location": "features/step_definitions/common_steps.rb:202"
            },
            "result": {
              "status": "passed",
              "duration": 745017487
            }
          },
          {
            "keyword": "Then ",
            "name": "the computer boots Tails",
            "line": 46,
            "match": {
              "location": "features/step_definitions/common_steps.rb:402"
            },
            "result": {
              "status": "passed",
              "duration": 37984442438
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session",
            "line": 46,
            "match": {
              "location": "features/step_definitions/common_steps.rb:514"
            },
            "result": {
              "status": "passed",
              "duration": 11402444713
            }
          },
          {
            "keyword": "And ",
            "name": "all notifications have disappeared",
            "line": 46,
            "match": {
              "location": "features/step_definitions/common_steps.rb:762"
            },
            "result": {
              "status": "passed",
              "duration": 6613992784
            }
          },
          {
            "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": 125572950
            }
          },
          {
            "keyword": "And ",
            "name": "Tails detected partitioning error partitioning-corruption",
            "line": 46,
            "match": {
              "location": "features/step_definitions/hardware.rb:129"
            },
            "result": {
              "status": "passed",
              "duration": 6426779
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 692109748
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 34031043
            }
          }
        ]
      },
      {
        "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 28834
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 38728119
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 49,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 78055701
            }
          },
          {
            "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:194"
            },
            "result": {
              "status": "passed",
              "duration": 32461
            }
          },
          {
            "keyword": "And ",
            "name": "I temporarily create a 7200 MiB disk named \"temp\"",
            "line": 51,
            "match": {
              "location": "features/step_definitions/common_steps.rb:111"
            },
            "result": {
              "status": "passed",
              "duration": 10670275
            }
          },
          {
            "keyword": "And ",
            "name": "I plug USB drive \"temp\"",
            "line": 52,
            "match": {
              "location": "features/step_definitions/common_steps.rb:123"
            },
            "result": {
              "status": "passed",
              "duration": 1018533182
            }
          },
          {
            "keyword": "And ",
            "name": "I write the Tails USB image to disk \"temp\"",
            "line": 53,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1754"
            },
            "result": {
              "status": "passed",
              "duration": 13807555481
            }
          },
          {
            "keyword": "When ",
            "name": "I start Tails from USB drive \"temp\" with network unplugged",
            "line": 54,
            "match": {
              "location": "features/step_definitions/common_steps.rb:232"
            },
            "result": {
              "status": "failed",
              "error_message": "can not find any of the patterns [\"TailsGreeter.png\", \"PlymouthGraphicsCardFailureMessage.png\"] on the screen (FindFailed)\n./features/support/helpers/screen.rb:248:in `rescue in wait_any'\n./features/support/helpers/screen.rb:232:in `wait_any'\n./features/step_definitions/common_steps.rb:444:in `/^the computer (?:re)?boots Tails$/'\n./features/step_definitions/common_steps.rb:235:in `/^I start Tails from (.+?) drive \"(.+?)\"( with network unplugged)?( and I login( with persistence enabled)?( with the changed persistence passphrase)?( (?:and|with) an administration password)?)?$/'\nfeatures/hardware_failure.feature:54:in `When I start Tails from USB drive \"temp\" with network unplugged'",
              "duration": 116652296988
            }
          },
          {
            "keyword": "Then ",
            "name": "Tails is running from USB drive \"temp\"",
            "line": 55,
            "match": {
              "location": "features/step_definitions/usb.rb:935"
            },
            "result": {
              "status": "skipped"
            }
          },
          {
            "keyword": "And ",
            "name": "the Greeter forbids creating a persistent partition",
            "line": 56,
            "match": {
              "location": "features/step_definitions/hardware.rb:97"
            },
            "result": {
              "status": "skipped"
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session",
            "line": 57,
            "match": {
              "location": "features/step_definitions/common_steps.rb:514"
            },
            "result": {
              "status": "skipped"
            }
          },
          {
            "keyword": "And ",
            "name": "all notifications have disappeared",
            "line": 58,
            "match": {
              "location": "features/step_definitions/common_steps.rb:762"
            },
            "result": {
              "status": "skipped"
            }
          },
          {
            "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": "skipped"
            }
          },
          {
            "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:1203"
            },
            "result": {
              "status": "skipped"
            }
          },
          {
            "keyword": "And ",
            "name": "I am told that Persistent Storage cannot be created",
            "line": 63,
            "match": {
              "location": "features/step_definitions/hardware.rb:124"
            },
            "result": {
              "status": "skipped"
            }
          },
          {
            "keyword": "And ",
            "name": "Tails detected partitioning error partitioning-corruption",
            "line": 64,
            "match": {
              "location": "features/step_definitions/hardware.rb:129"
            },
            "result": {
              "status": "skipped"
            }
          }
        ],
        "after": [
          {
            "output": [
              "SCENARIO FAILED: 'GPT backup corruption without a persistent partition' (at time 01:30:36)",
              "",
              "Boot log: https://jenkins.tails.boum.org/job/test_Tails_ISO_7929-celluloid-flatpak/57/artifact/build-artifacts/01:30:36_GPT_backup_corruption_without_a_persistent_partition.file_content_var_log_boot.log",
              "",
              "Screenshot: https://jenkins.tails.boum.org/job/test_Tails_ISO_7929-celluloid-flatpak/57/artifact/build-artifacts/01:30:36_GPT_backup_corruption_without_a_persistent_partition.png",
              "",
              "Video: https://jenkins.tails.boum.org/job/test_Tails_ISO_7929-celluloid-flatpak/57/artifact/build-artifacts/01:30:36_GPT_backup_corruption_without_a_persistent_partition.mkv",
              "",
              "Systemd journal: https://jenkins.tails.boum.org/job/test_Tails_ISO_7929-celluloid-flatpak/57/artifact/build-artifacts/01:30:36_GPT_backup_corruption_without_a_persistent_partition.journal"
            ],
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 5001551429
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 118461580
            }
          }
        ]
      },
      {
        "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 19626
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 2050956
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 80,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 61309097
            }
          },
          {
            "keyword": "And ",
            "name": "I set Tails to boot with options \"test_partitioning_errors=guid\"",
            "line": 80,
            "match": {
              "location": "features/step_definitions/common_steps.rb:194"
            },
            "result": {
              "status": "passed",
              "duration": 28805
            }
          },
          {
            "keyword": "And ",
            "name": "I temporarily create a 7200 MiB disk named \"temp\"",
            "line": 80,
            "match": {
              "location": "features/step_definitions/common_steps.rb:111"
            },
            "result": {
              "status": "passed",
              "duration": 8429955
            }
          },
          {
            "keyword": "And ",
            "name": "I plug USB drive \"temp\"",
            "line": 80,
            "match": {
              "location": "features/step_definitions/common_steps.rb:123"
            },
            "result": {
              "status": "passed",
              "duration": 1020125531
            }
          },
          {
            "keyword": "And ",
            "name": "I write the Tails USB image to disk \"temp\"",
            "line": 80,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1754"
            },
            "result": {
              "status": "passed",
              "duration": 13289803558
            }
          },
          {
            "keyword": "When ",
            "name": "I start Tails from USB drive \"temp\" with network unplugged",
            "line": 80,
            "match": {
              "location": "features/step_definitions/common_steps.rb:232"
            },
            "result": {
              "status": "passed",
              "duration": 47464030220
            }
          },
          {
            "keyword": "Then ",
            "name": "Tails is running from USB drive \"temp\"",
            "line": 80,
            "match": {
              "location": "features/step_definitions/usb.rb:935"
            },
            "result": {
              "status": "passed",
              "duration": 493391752
            }
          },
          {
            "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": 50360759
            }
          },
          {
            "keyword": "And ",
            "name": "the Greeter forbids starting Tails",
            "line": 80,
            "match": {
              "location": "features/step_definitions/hardware.rb:103"
            },
            "result": {
              "status": "passed",
              "duration": 38076889
            }
          },
          {
            "keyword": "And ",
            "name": "the Greeter forbids all settings but language",
            "line": 80,
            "match": {
              "location": "features/step_definitions/hardware.rb:109"
            },
            "result": {
              "status": "passed",
              "duration": 164262620
            }
          },
          {
            "keyword": "And ",
            "name": "Tails detected partitioning error guid-not-randomized",
            "line": 80,
            "match": {
              "location": "features/step_definitions/hardware.rb:129"
            },
            "result": {
              "status": "passed",
              "duration": 5213204
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 634863122
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 124528274
            }
          }
        ]
      },
      {
        "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 18695
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 5456821
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 81,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 79356152
            }
          },
          {
            "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:194"
            },
            "result": {
              "status": "passed",
              "duration": 42480
            }
          },
          {
            "keyword": "And ",
            "name": "I temporarily create a 7200 MiB disk named \"temp\"",
            "line": 81,
            "match": {
              "location": "features/step_definitions/common_steps.rb:111"
            },
            "result": {
              "status": "passed",
              "duration": 10519733
            }
          },
          {
            "keyword": "And ",
            "name": "I plug USB drive \"temp\"",
            "line": 81,
            "match": {
              "location": "features/step_definitions/common_steps.rb:123"
            },
            "result": {
              "status": "passed",
              "duration": 1018743125
            }
          },
          {
            "keyword": "And ",
            "name": "I write the Tails USB image to disk \"temp\"",
            "line": 81,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1754"
            },
            "result": {
              "status": "passed",
              "duration": 13427293444
            }
          },
          {
            "keyword": "When ",
            "name": "I start Tails from USB drive \"temp\" with network unplugged",
            "line": 81,
            "match": {
              "location": "features/step_definitions/common_steps.rb:232"
            },
            "result": {
              "status": "passed",
              "duration": 52313792425
            }
          },
          {
            "keyword": "Then ",
            "name": "Tails is running from USB drive \"temp\"",
            "line": 81,
            "match": {
              "location": "features/step_definitions/usb.rb:935"
            },
            "result": {
              "status": "passed",
              "duration": 664363195
            }
          },
          {
            "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": 41737825
            }
          },
          {
            "keyword": "And ",
            "name": "the Greeter forbids starting Tails",
            "line": 81,
            "match": {
              "location": "features/step_definitions/hardware.rb:103"
            },
            "result": {
              "status": "passed",
              "duration": 33353584
            }
          },
          {
            "keyword": "And ",
            "name": "the Greeter forbids all settings but language",
            "line": 81,
            "match": {
              "location": "features/step_definitions/hardware.rb:109"
            },
            "result": {
              "status": "passed",
              "duration": 193978370
            }
          },
          {
            "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": 4981620
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 1004851096
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 156098860
            }
          }
        ]
      },
      {
        "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 26891
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 5499270
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 82,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 136697834
            }
          },
          {
            "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:194"
            },
            "result": {
              "status": "passed",
              "duration": 39124
            }
          },
          {
            "keyword": "And ",
            "name": "I temporarily create a 7200 MiB disk named \"temp\"",
            "line": 82,
            "match": {
              "location": "features/step_definitions/common_steps.rb:111"
            },
            "result": {
              "status": "passed",
              "duration": 12433202
            }
          },
          {
            "keyword": "And ",
            "name": "I plug USB drive \"temp\"",
            "line": 82,
            "match": {
              "location": "features/step_definitions/common_steps.rb:123"
            },
            "result": {
              "status": "passed",
              "duration": 1019125318
            }
          },
          {
            "keyword": "And ",
            "name": "I write the Tails USB image to disk \"temp\"",
            "line": 82,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1754"
            },
            "result": {
              "status": "passed",
              "duration": 13221686201
            }
          },
          {
            "keyword": "When ",
            "name": "I start Tails from USB drive \"temp\" with network unplugged",
            "line": 82,
            "match": {
              "location": "features/step_definitions/common_steps.rb:232"
            },
            "result": {
              "status": "passed",
              "duration": 45847917481
            }
          },
          {
            "keyword": "Then ",
            "name": "Tails is running from USB drive \"temp\"",
            "line": 82,
            "match": {
              "location": "features/step_definitions/usb.rb:935"
            },
            "result": {
              "status": "passed",
              "duration": 606197699
            }
          },
          {
            "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": 44574001
            }
          },
          {
            "keyword": "And ",
            "name": "the Greeter forbids starting Tails",
            "line": 82,
            "match": {
              "location": "features/step_definitions/hardware.rb:103"
            },
            "result": {
              "status": "passed",
              "duration": 29253957
            }
          },
          {
            "keyword": "And ",
            "name": "the Greeter forbids all settings but language",
            "line": 82,
            "match": {
              "location": "features/step_definitions/hardware.rb:109"
            },
            "result": {
              "status": "passed",
              "duration": 165918498
            }
          },
          {
            "keyword": "And ",
            "name": "Tails detected partitioning error fs-not-resized",
            "line": 82,
            "match": {
              "location": "features/step_definitions/hardware.rb:129"
            },
            "result": {
              "status": "passed",
              "duration": 4458610
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 616267079
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 116503470
            }
          }
        ]
      }
    ]
  },
  {
    "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 21821
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 2416271
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 87082259
            }
          },
          {
            "keyword": "And ",
            "name": "the computer has an unsupported graphics card",
            "line": 10,
            "match": {
              "location": "features/step_definitions/hardware.rb:1"
            },
            "result": {
              "status": "passed",
              "duration": 27041
            }
          },
          {
            "keyword": "When ",
            "name": "I start the computer",
            "line": 11,
            "match": {
              "location": "features/step_definitions/common_steps.rb:202"
            },
            "result": {
              "status": "passed",
              "duration": 768310342
            }
          },
          {
            "keyword": "Then ",
            "name": "the computer boots Tails",
            "line": 12,
            "match": {
              "location": "features/step_definitions/common_steps.rb:402"
            },
            "result": {
              "status": "passed",
              "duration": 27603967821
            }
          },
          {
            "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": 12759253707
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 818652647
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 6492634
            }
          }
        ]
      }
    ]
  },
  {
    "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 16491
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 2040917
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 6,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 7038538417
            }
          },
          {
            "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": 1615558992
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 540722599
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 22572
            }
          }
        ]
      },
      {
        "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 19708
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 3875897
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 10,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6849133946
            }
          },
          {
            "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": 1218756370
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 726278174
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 87985
            }
          }
        ]
      }
    ]
  },
  {
    "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 54452
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 23566495
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 8246517975
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session in German (de)",
            "line": 14,
            "match": {
              "location": "features/step_definitions/common_steps.rb:514"
            },
            "result": {
              "status": "passed",
              "duration": 27590775170
            }
          },
          {
            "keyword": "Then ",
            "name": "the live user's Documents directory exists",
            "line": 14,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1268"
            },
            "result": {
              "status": "passed",
              "duration": 77467514
            }
          },
          {
            "keyword": "And ",
            "name": "there is a GNOME bookmark for the Documents directory",
            "line": 14,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1272"
            },
            "result": {
              "status": "passed",
              "duration": 14475536767
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 1177315959
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 22391
            }
          }
        ]
      },
      {
        "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 12734
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 3554473
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 7300625275
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session in German (de)",
            "line": 15,
            "match": {
              "location": "features/step_definitions/common_steps.rb:514"
            },
            "result": {
              "status": "passed",
              "duration": 27214359860
            }
          },
          {
            "keyword": "Then ",
            "name": "the live user's Downloads directory exists",
            "line": 15,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1268"
            },
            "result": {
              "status": "passed",
              "duration": 32117177
            }
          },
          {
            "keyword": "And ",
            "name": "there is a GNOME bookmark for the Downloads directory",
            "line": 15,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1272"
            },
            "result": {
              "status": "passed",
              "duration": 14351582238
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 1109496244
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 26320
            }
          }
        ]
      },
      {
        "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 14527
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 3037334
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 7175798994
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session in German (de)",
            "line": 16,
            "match": {
              "location": "features/step_definitions/common_steps.rb:514"
            },
            "result": {
              "status": "passed",
              "duration": 26215440397
            }
          },
          {
            "keyword": "Then ",
            "name": "the live user's Music directory exists",
            "line": 16,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1268"
            },
            "result": {
              "status": "passed",
              "duration": 53066743
            }
          },
          {
            "keyword": "And ",
            "name": "there is a GNOME bookmark for the Music directory",
            "line": 16,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1272"
            },
            "result": {
              "status": "passed",
              "duration": 14578487681
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 963559033
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 21670
            }
          }
        ]
      },
      {
        "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 13645
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 2944792
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 7133612620
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session in German (de)",
            "line": 17,
            "match": {
              "location": "features/step_definitions/common_steps.rb:514"
            },
            "result": {
              "status": "passed",
              "duration": 27675996482
            }
          },
          {
            "keyword": "Then ",
            "name": "the live user's Pictures directory exists",
            "line": 17,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1268"
            },
            "result": {
              "status": "passed",
              "duration": 47306173
            }
          },
          {
            "keyword": "And ",
            "name": "there is a GNOME bookmark for the Pictures directory",
            "line": 17,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1272"
            },
            "result": {
              "status": "passed",
              "duration": 14377975832
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 1218326454
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 22874
            }
          }
        ]
      },
      {
        "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 12223
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 2994945
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 7081631936
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session in German (de)",
            "line": 18,
            "match": {
              "location": "features/step_definitions/common_steps.rb:514"
            },
            "result": {
              "status": "passed",
              "duration": 27239838184
            }
          },
          {
            "keyword": "Then ",
            "name": "the live user's Videos directory exists",
            "line": 18,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1268"
            },
            "result": {
              "status": "passed",
              "duration": 49601528
            }
          },
          {
            "keyword": "And ",
            "name": "there is a GNOME bookmark for the Videos directory",
            "line": 18,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1272"
            },
            "result": {
              "status": "passed",
              "duration": 14834305924
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 1322282957
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 22852
            }
          }
        ]
      },
      {
        "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 15279
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 3848275
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 7430580763
            }
          },
          {
            "keyword": "And ",
            "name": "I set an administration password",
            "line": 46,
            "match": {
              "location": "features/step_definitions/common_steps.rb:576"
            },
            "result": {
              "status": "passed",
              "duration": 6877620454
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session in Arabic (ar)",
            "line": 46,
            "match": {
              "location": "features/step_definitions/common_steps.rb:514"
            },
            "result": {
              "status": "passed",
              "duration": 26351114496
            }
          },
          {
            "keyword": "Then ",
            "name": "the keyboard layout is set to \"eg\"",
            "line": 46,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1676"
            },
            "result": {
              "status": "passed",
              "duration": 140037101
            }
          },
          {
            "keyword": "And ",
            "name": "tpsd is localized to the selected locale",
            "line": 46,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1706"
            },
            "result": {
              "status": "passed",
              "duration": 116034318
            }
          },
          {
            "keyword": "Given ",
            "name": "the network is plugged",
            "line": 46,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 14412793
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 46,
            "match": {
              "location": "features/step_definitions/common_steps.rb:650"
            },
            "result": {
              "status": "passed",
              "duration": 12044715061
            }
          },
          {
            "keyword": "Then ",
            "name": "I successfully start the Unsafe Browser",
            "line": 46,
            "match": {
              "location": "features/step_definitions/browser.rb:110"
            },
            "result": {
              "status": "passed",
              "duration": 6335606917
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Unsafe Browser",
            "line": 46,
            "match": {
              "location": "features/step_definitions/browser.rb:122"
            },
            "result": {
              "status": "passed",
              "duration": 5215088557
            }
          },
          {
            "keyword": "Given ",
            "name": "Thunderbird is installed",
            "line": 46,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:280"
            },
            "result": {
              "status": "passed",
              "duration": 27550643626
            }
          },
          {
            "keyword": "When ",
            "name": "I enable the screen keyboard",
            "line": 46,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1694"
            },
            "result": {
              "status": "passed",
              "duration": 90929723
            }
          },
          {
            "keyword": "Then ",
            "name": "the screen keyboard works in Tor Browser",
            "line": 46,
            "match": {
              "location": "features/step_definitions/browser.rb:448"
            },
            "result": {
              "status": "passed",
              "duration": 11120233624
            }
          },
          {
            "keyword": "And ",
            "name": "DuckDuckGo is the default search engine",
            "line": 46,
            "match": {
              "location": "features/step_definitions/browser.rb:437"
            },
            "result": {
              "status": "passed",
              "duration": 5691422690
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Tor Browser",
            "line": 46,
            "match": {
              "location": "features/step_definitions/browser.rb:122"
            },
            "result": {
              "status": "passed",
              "duration": 5249370773
            }
          },
          {
            "keyword": "And ",
            "name": "the screen keyboard works in Thunderbird",
            "line": 46,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:211"
            },
            "result": {
              "status": "passed",
              "duration": 4160476308
            }
          },
          {
            "keyword": "And ",
            "name": "the layout of the screen keyboard is set to \"us\"",
            "line": 46,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1702"
            },
            "result": {
              "status": "passed",
              "duration": 340461787
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 1473270828
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 22863
            }
          }
        ]
      },
      {
        "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 14347
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 4110598
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 7420241994
            }
          },
          {
            "keyword": "And ",
            "name": "I set an administration password",
            "line": 47,
            "match": {
              "location": "features/step_definitions/common_steps.rb:576"
            },
            "result": {
              "status": "passed",
              "duration": 6808520264
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session in Chinese (zh_CN)",
            "line": 47,
            "match": {
              "location": "features/step_definitions/common_steps.rb:514"
            },
            "result": {
              "status": "passed",
              "duration": 25729239574
            }
          },
          {
            "keyword": "Then ",
            "name": "the keyboard layout is set to \"cn\"",
            "line": 47,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1676"
            },
            "result": {
              "status": "passed",
              "duration": 115159717
            }
          },
          {
            "keyword": "And ",
            "name": "tpsd is localized to the selected locale",
            "line": 47,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1706"
            },
            "result": {
              "status": "passed",
              "duration": 146240681
            }
          },
          {
            "keyword": "Given ",
            "name": "the network is plugged",
            "line": 47,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 24646228
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 47,
            "match": {
              "location": "features/step_definitions/common_steps.rb:650"
            },
            "result": {
              "status": "passed",
              "duration": 12355716512
            }
          },
          {
            "keyword": "Then ",
            "name": "I successfully start the Unsafe Browser",
            "line": 47,
            "match": {
              "location": "features/step_definitions/browser.rb:110"
            },
            "result": {
              "status": "passed",
              "duration": 5501511131
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Unsafe Browser",
            "line": 47,
            "match": {
              "location": "features/step_definitions/browser.rb:122"
            },
            "result": {
              "status": "passed",
              "duration": 5194088366
            }
          },
          {
            "keyword": "Given ",
            "name": "Thunderbird is installed",
            "line": 47,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:280"
            },
            "result": {
              "status": "passed",
              "duration": 27277386000
            }
          },
          {
            "keyword": "When ",
            "name": "I enable the screen keyboard",
            "line": 47,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1694"
            },
            "result": {
              "status": "passed",
              "duration": 66421090
            }
          },
          {
            "keyword": "Then ",
            "name": "the screen keyboard works in Tor Browser",
            "line": 47,
            "match": {
              "location": "features/step_definitions/browser.rb:448"
            },
            "result": {
              "status": "passed",
              "duration": 10266823799
            }
          },
          {
            "keyword": "And ",
            "name": "DuckDuckGo is the default search engine",
            "line": 47,
            "match": {
              "location": "features/step_definitions/browser.rb:437"
            },
            "result": {
              "status": "passed",
              "duration": 5764474187
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Tor Browser",
            "line": 47,
            "match": {
              "location": "features/step_definitions/browser.rb:122"
            },
            "result": {
              "status": "passed",
              "duration": 5221578879
            }
          },
          {
            "keyword": "And ",
            "name": "the screen keyboard works in Thunderbird",
            "line": 47,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:211"
            },
            "result": {
              "status": "passed",
              "duration": 4230896083
            }
          },
          {
            "keyword": "And ",
            "name": "the layout of the screen keyboard is set to \"us\"",
            "line": 47,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1702"
            },
            "result": {
              "status": "passed",
              "duration": 377430807
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 864844528
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 24025
            }
          }
        ]
      },
      {
        "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 13877
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 3089653
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 7295386737
            }
          },
          {
            "keyword": "And ",
            "name": "I set an administration password",
            "line": 48,
            "match": {
              "location": "features/step_definitions/common_steps.rb:576"
            },
            "result": {
              "status": "passed",
              "duration": 6782373301
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session in English (en)",
            "line": 48,
            "match": {
              "location": "features/step_definitions/common_steps.rb:514"
            },
            "result": {
              "status": "passed",
              "duration": 11044726820
            }
          },
          {
            "keyword": "Then ",
            "name": "the keyboard layout is set to \"us\"",
            "line": 48,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1676"
            },
            "result": {
              "status": "passed",
              "duration": 125276225
            }
          },
          {
            "keyword": "And ",
            "name": "tpsd is localized to the selected locale",
            "line": 48,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1706"
            },
            "result": {
              "status": "passed",
              "duration": 94215241
            }
          },
          {
            "keyword": "Given ",
            "name": "the network is plugged",
            "line": 48,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 16104743
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 48,
            "match": {
              "location": "features/step_definitions/common_steps.rb:650"
            },
            "result": {
              "status": "passed",
              "duration": 13322393119
            }
          },
          {
            "keyword": "Then ",
            "name": "I successfully start the Unsafe Browser",
            "line": 48,
            "match": {
              "location": "features/step_definitions/browser.rb:110"
            },
            "result": {
              "status": "passed",
              "duration": 7628200746
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Unsafe Browser",
            "line": 48,
            "match": {
              "location": "features/step_definitions/browser.rb:122"
            },
            "result": {
              "status": "passed",
              "duration": 5200288204
            }
          },
          {
            "keyword": "Given ",
            "name": "Thunderbird is installed",
            "line": 48,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:280"
            },
            "result": {
              "status": "passed",
              "duration": 24499270361
            }
          },
          {
            "keyword": "When ",
            "name": "I enable the screen keyboard",
            "line": 48,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1694"
            },
            "result": {
              "status": "passed",
              "duration": 74270215
            }
          },
          {
            "keyword": "Then ",
            "name": "the screen keyboard works in Tor Browser",
            "line": 48,
            "match": {
              "location": "features/step_definitions/browser.rb:448"
            },
            "result": {
              "status": "passed",
              "duration": 10900329891
            }
          },
          {
            "keyword": "And ",
            "name": "DuckDuckGo is the default search engine",
            "line": 48,
            "match": {
              "location": "features/step_definitions/browser.rb:437"
            },
            "result": {
              "status": "passed",
              "duration": 4254246947
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Tor Browser",
            "line": 48,
            "match": {
              "location": "features/step_definitions/browser.rb:122"
            },
            "result": {
              "status": "passed",
              "duration": 5230790749
            }
          },
          {
            "keyword": "And ",
            "name": "the screen keyboard works in Thunderbird",
            "line": 48,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:211"
            },
            "result": {
              "status": "passed",
              "duration": 4046218282
            }
          },
          {
            "keyword": "And ",
            "name": "the layout of the screen keyboard is set to \"us\"",
            "line": 48,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1702"
            },
            "result": {
              "status": "passed",
              "duration": 425243083
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 1158263864
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 22622
            }
          }
        ]
      },
      {
        "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 21520
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 4509034
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 7341915363
            }
          },
          {
            "keyword": "And ",
            "name": "I set an administration password",
            "line": 49,
            "match": {
              "location": "features/step_definitions/common_steps.rb:576"
            },
            "result": {
              "status": "passed",
              "duration": 6726401644
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session in French (fr)",
            "line": 49,
            "match": {
              "location": "features/step_definitions/common_steps.rb:514"
            },
            "result": {
              "status": "passed",
              "duration": 27446635268
            }
          },
          {
            "keyword": "Then ",
            "name": "the keyboard layout is set to \"fr\"",
            "line": 49,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1676"
            },
            "result": {
              "status": "passed",
              "duration": 96846839
            }
          },
          {
            "keyword": "And ",
            "name": "tpsd is localized to the selected locale",
            "line": 49,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1706"
            },
            "result": {
              "status": "passed",
              "duration": 131051007
            }
          },
          {
            "keyword": "Given ",
            "name": "the network is plugged",
            "line": 49,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 22134458
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 49,
            "match": {
              "location": "features/step_definitions/common_steps.rb:650"
            },
            "result": {
              "status": "passed",
              "duration": 11670232990
            }
          },
          {
            "keyword": "Then ",
            "name": "I successfully start the Unsafe Browser",
            "line": 49,
            "match": {
              "location": "features/step_definitions/browser.rb:110"
            },
            "result": {
              "status": "passed",
              "duration": 6007963029
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Unsafe Browser",
            "line": 49,
            "match": {
              "location": "features/step_definitions/browser.rb:122"
            },
            "result": {
              "status": "passed",
              "duration": 5352051825
            }
          },
          {
            "keyword": "Given ",
            "name": "Thunderbird is installed",
            "line": 49,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:280"
            },
            "result": {
              "status": "passed",
              "duration": 24760282655
            }
          },
          {
            "keyword": "When ",
            "name": "I enable the screen keyboard",
            "line": 49,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1694"
            },
            "result": {
              "status": "passed",
              "duration": 69276722
            }
          },
          {
            "keyword": "Then ",
            "name": "the screen keyboard works in Tor Browser",
            "line": 49,
            "match": {
              "location": "features/step_definitions/browser.rb:448"
            },
            "result": {
              "status": "passed",
              "duration": 10674606894
            }
          },
          {
            "keyword": "And ",
            "name": "DuckDuckGo is the default search engine",
            "line": 49,
            "match": {
              "location": "features/step_definitions/browser.rb:437"
            },
            "result": {
              "status": "passed",
              "duration": 5475202959
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Tor Browser",
            "line": 49,
            "match": {
              "location": "features/step_definitions/browser.rb:122"
            },
            "result": {
              "status": "passed",
              "duration": 5296694130
            }
          },
          {
            "keyword": "And ",
            "name": "the screen keyboard works in Thunderbird",
            "line": 49,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:211"
            },
            "result": {
              "status": "passed",
              "duration": 4772954268
            }
          },
          {
            "keyword": "And ",
            "name": "the layout of the screen keyboard is set to \"fr\"",
            "line": 49,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1702"
            },
            "result": {
              "status": "passed",
              "duration": 355707519
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 1254489549
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 22222
            }
          }
        ]
      },
      {
        "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 12404
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 3667997
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 7301409369
            }
          },
          {
            "keyword": "And ",
            "name": "I set an administration password",
            "line": 50,
            "match": {
              "location": "features/step_definitions/common_steps.rb:576"
            },
            "result": {
              "status": "passed",
              "duration": 6760653012
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session in German (de)",
            "line": 50,
            "match": {
              "location": "features/step_definitions/common_steps.rb:514"
            },
            "result": {
              "status": "passed",
              "duration": 26463279658
            }
          },
          {
            "keyword": "Then ",
            "name": "the keyboard layout is set to \"de\"",
            "line": 50,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1676"
            },
            "result": {
              "status": "passed",
              "duration": 130232080
            }
          },
          {
            "keyword": "And ",
            "name": "tpsd is localized to the selected locale",
            "line": 50,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1706"
            },
            "result": {
              "status": "passed",
              "duration": 99850341
            }
          },
          {
            "keyword": "Given ",
            "name": "the network is plugged",
            "line": 50,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 23028073
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 50,
            "match": {
              "location": "features/step_definitions/common_steps.rb:650"
            },
            "result": {
              "status": "passed",
              "duration": 12362206129
            }
          },
          {
            "keyword": "Then ",
            "name": "I successfully start the Unsafe Browser",
            "line": 50,
            "match": {
              "location": "features/step_definitions/browser.rb:110"
            },
            "result": {
              "status": "passed",
              "duration": 6478520834
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Unsafe Browser",
            "line": 50,
            "match": {
              "location": "features/step_definitions/browser.rb:122"
            },
            "result": {
              "status": "passed",
              "duration": 5210399972
            }
          },
          {
            "keyword": "Given ",
            "name": "Thunderbird is installed",
            "line": 50,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:280"
            },
            "result": {
              "status": "passed",
              "duration": 24530385141
            }
          },
          {
            "keyword": "When ",
            "name": "I enable the screen keyboard",
            "line": 50,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1694"
            },
            "result": {
              "status": "passed",
              "duration": 81139137
            }
          },
          {
            "keyword": "Then ",
            "name": "the screen keyboard works in Tor Browser",
            "line": 50,
            "match": {
              "location": "features/step_definitions/browser.rb:448"
            },
            "result": {
              "status": "passed",
              "duration": 10395805417
            }
          },
          {
            "keyword": "And ",
            "name": "DuckDuckGo is the default search engine",
            "line": 50,
            "match": {
              "location": "features/step_definitions/browser.rb:437"
            },
            "result": {
              "status": "passed",
              "duration": 5604735795
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Tor Browser",
            "line": 50,
            "match": {
              "location": "features/step_definitions/browser.rb:122"
            },
            "result": {
              "status": "passed",
              "duration": 5220089404
            }
          },
          {
            "keyword": "And ",
            "name": "the screen keyboard works in Thunderbird",
            "line": 50,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:211"
            },
            "result": {
              "status": "passed",
              "duration": 4845563776
            }
          },
          {
            "keyword": "And ",
            "name": "the layout of the screen keyboard is set to \"de\"",
            "line": 50,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1702"
            },
            "result": {
              "status": "passed",
              "duration": 370820030
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 1480187412
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 27752
            }
          }
        ]
      },
      {
        "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 14777
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 3074604
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 7299691927
            }
          },
          {
            "keyword": "And ",
            "name": "I set an administration password",
            "line": 51,
            "match": {
              "location": "features/step_definitions/common_steps.rb:576"
            },
            "result": {
              "status": "passed",
              "duration": 6842510333
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session in Hindi (hi)",
            "line": 51,
            "match": {
              "location": "features/step_definitions/common_steps.rb:514"
            },
            "result": {
              "status": "passed",
              "duration": 27265316419
            }
          },
          {
            "keyword": "Then ",
            "name": "the keyboard layout is set to \"in\"",
            "line": 51,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1676"
            },
            "result": {
              "status": "passed",
              "duration": 105960562
            }
          },
          {
            "keyword": "And ",
            "name": "tpsd is localized to the selected locale",
            "line": 51,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1706"
            },
            "result": {
              "status": "passed",
              "duration": 94522317
            }
          },
          {
            "keyword": "Given ",
            "name": "the network is plugged",
            "line": 51,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 16898400
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 51,
            "match": {
              "location": "features/step_definitions/common_steps.rb:650"
            },
            "result": {
              "status": "passed",
              "duration": 12715255127
            }
          },
          {
            "keyword": "Then ",
            "name": "I successfully start the Unsafe Browser",
            "line": 51,
            "match": {
              "location": "features/step_definitions/browser.rb:110"
            },
            "result": {
              "status": "passed",
              "duration": 5794678342
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Unsafe Browser",
            "line": 51,
            "match": {
              "location": "features/step_definitions/browser.rb:122"
            },
            "result": {
              "status": "passed",
              "duration": 5200956776
            }
          },
          {
            "keyword": "Given ",
            "name": "Thunderbird is installed",
            "line": 51,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:280"
            },
            "result": {
              "status": "passed",
              "duration": 24055466048
            }
          },
          {
            "keyword": "When ",
            "name": "I enable the screen keyboard",
            "line": 51,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1694"
            },
            "result": {
              "status": "passed",
              "duration": 115179069
            }
          },
          {
            "keyword": "Then ",
            "name": "the screen keyboard works in Tor Browser",
            "line": 51,
            "match": {
              "location": "features/step_definitions/browser.rb:448"
            },
            "result": {
              "status": "passed",
              "duration": 10345180992
            }
          },
          {
            "keyword": "And ",
            "name": "DuckDuckGo is the default search engine",
            "line": 51,
            "match": {
              "location": "features/step_definitions/browser.rb:437"
            },
            "result": {
              "status": "passed",
              "duration": 5416564742
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Tor Browser",
            "line": 51,
            "match": {
              "location": "features/step_definitions/browser.rb:122"
            },
            "result": {
              "status": "passed",
              "duration": 5247493722
            }
          },
          {
            "keyword": "And ",
            "name": "the screen keyboard works in Thunderbird",
            "line": 51,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:211"
            },
            "result": {
              "status": "passed",
              "duration": 4878716858
            }
          },
          {
            "keyword": "And ",
            "name": "the layout of the screen keyboard is set to \"us\"",
            "line": 51,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1702"
            },
            "result": {
              "status": "passed",
              "duration": 389680182
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 1631640626
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 24415
            }
          }
        ]
      },
      {
        "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 14487
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 3382492
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 7041165735
            }
          },
          {
            "keyword": "And ",
            "name": "I set an administration password",
            "line": 52,
            "match": {
              "location": "features/step_definitions/common_steps.rb:576"
            },
            "result": {
              "status": "passed",
              "duration": 6985581270
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session in Indonesian (id)",
            "line": 52,
            "match": {
              "location": "features/step_definitions/common_steps.rb:514"
            },
            "result": {
              "status": "passed",
              "duration": 27264591391
            }
          },
          {
            "keyword": "Then ",
            "name": "the keyboard layout is set to \"id\"",
            "line": 52,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1676"
            },
            "result": {
              "status": "passed",
              "duration": 91871203
            }
          },
          {
            "keyword": "And ",
            "name": "tpsd is localized to the selected locale",
            "line": 52,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1706"
            },
            "result": {
              "status": "passed",
              "duration": 96823438
            }
          },
          {
            "keyword": "Given ",
            "name": "the network is plugged",
            "line": 52,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 24871828
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 52,
            "match": {
              "location": "features/step_definitions/common_steps.rb:650"
            },
            "result": {
              "status": "passed",
              "duration": 12284330543
            }
          },
          {
            "keyword": "Then ",
            "name": "I successfully start the Unsafe Browser",
            "line": 52,
            "match": {
              "location": "features/step_definitions/browser.rb:110"
            },
            "result": {
              "status": "passed",
              "duration": 6966034641
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Unsafe Browser",
            "line": 52,
            "match": {
              "location": "features/step_definitions/browser.rb:122"
            },
            "result": {
              "status": "passed",
              "duration": 5185056160
            }
          },
          {
            "keyword": "Given ",
            "name": "Thunderbird is installed",
            "line": 52,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:280"
            },
            "result": {
              "status": "passed",
              "duration": 24270301546
            }
          },
          {
            "keyword": "When ",
            "name": "I enable the screen keyboard",
            "line": 52,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1694"
            },
            "result": {
              "status": "passed",
              "duration": 152051935
            }
          },
          {
            "keyword": "Then ",
            "name": "the screen keyboard works in Tor Browser",
            "line": 52,
            "match": {
              "location": "features/step_definitions/browser.rb:448"
            },
            "result": {
              "status": "passed",
              "duration": 14757671658
            }
          },
          {
            "keyword": "And ",
            "name": "DuckDuckGo is the default search engine",
            "line": 52,
            "match": {
              "location": "features/step_definitions/browser.rb:437"
            },
            "result": {
              "status": "passed",
              "duration": 5589864665
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Tor Browser",
            "line": 52,
            "match": {
              "location": "features/step_definitions/browser.rb:122"
            },
            "result": {
              "status": "passed",
              "duration": 5290013480
            }
          },
          {
            "keyword": "And ",
            "name": "the screen keyboard works in Thunderbird",
            "line": 52,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:211"
            },
            "result": {
              "status": "passed",
              "duration": 4430019482
            }
          },
          {
            "keyword": "And ",
            "name": "the layout of the screen keyboard is set to \"us\"",
            "line": 52,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1702"
            },
            "result": {
              "status": "passed",
              "duration": 346494277
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 1422183033
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 22151
            }
          }
        ]
      },
      {
        "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 15910
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 2842548
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 7028688509
            }
          },
          {
            "keyword": "And ",
            "name": "I set an administration password",
            "line": 53,
            "match": {
              "location": "features/step_definitions/common_steps.rb:576"
            },
            "result": {
              "status": "passed",
              "duration": 6913562292
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session in Italian (it)",
            "line": 53,
            "match": {
              "location": "features/step_definitions/common_steps.rb:514"
            },
            "result": {
              "status": "passed",
              "duration": 26968641046
            }
          },
          {
            "keyword": "Then ",
            "name": "the keyboard layout is set to \"it\"",
            "line": 53,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1676"
            },
            "result": {
              "status": "passed",
              "duration": 89565359
            }
          },
          {
            "keyword": "And ",
            "name": "tpsd is localized to the selected locale",
            "line": 53,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1706"
            },
            "result": {
              "status": "passed",
              "duration": 108825567
            }
          },
          {
            "keyword": "Given ",
            "name": "the network is plugged",
            "line": 53,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 15574678
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 53,
            "match": {
              "location": "features/step_definitions/common_steps.rb:650"
            },
            "result": {
              "status": "passed",
              "duration": 12371719720
            }
          },
          {
            "keyword": "Then ",
            "name": "I successfully start the Unsafe Browser",
            "line": 53,
            "match": {
              "location": "features/step_definitions/browser.rb:110"
            },
            "result": {
              "status": "passed",
              "duration": 6401862886
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Unsafe Browser",
            "line": 53,
            "match": {
              "location": "features/step_definitions/browser.rb:122"
            },
            "result": {
              "status": "passed",
              "duration": 5194190019
            }
          },
          {
            "keyword": "Given ",
            "name": "Thunderbird is installed",
            "line": 53,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:280"
            },
            "result": {
              "status": "passed",
              "duration": 27871279711
            }
          },
          {
            "keyword": "When ",
            "name": "I enable the screen keyboard",
            "line": 53,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1694"
            },
            "result": {
              "status": "passed",
              "duration": 82126483
            }
          },
          {
            "keyword": "Then ",
            "name": "the screen keyboard works in Tor Browser",
            "line": 53,
            "match": {
              "location": "features/step_definitions/browser.rb:448"
            },
            "result": {
              "status": "passed",
              "duration": 10019236971
            }
          },
          {
            "keyword": "And ",
            "name": "DuckDuckGo is the default search engine",
            "line": 53,
            "match": {
              "location": "features/step_definitions/browser.rb:437"
            },
            "result": {
              "status": "passed",
              "duration": 5245701766
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Tor Browser",
            "line": 53,
            "match": {
              "location": "features/step_definitions/browser.rb:122"
            },
            "result": {
              "status": "passed",
              "duration": 5312606364
            }
          },
          {
            "keyword": "And ",
            "name": "the screen keyboard works in Thunderbird",
            "line": 53,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:211"
            },
            "result": {
              "status": "passed",
              "duration": 4434635709
            }
          },
          {
            "keyword": "And ",
            "name": "the layout of the screen keyboard is set to \"us\"",
            "line": 53,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1702"
            },
            "result": {
              "status": "passed",
              "duration": 383413890
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 1284569641
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 22502
            }
          }
        ]
      },
      {
        "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 13475
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 3446671
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 7173912052
            }
          },
          {
            "keyword": "And ",
            "name": "I set an administration password",
            "line": 54,
            "match": {
              "location": "features/step_definitions/common_steps.rb:576"
            },
            "result": {
              "status": "passed",
              "duration": 6895903608
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session in Persian (fa)",
            "line": 54,
            "match": {
              "location": "features/step_definitions/common_steps.rb:514"
            },
            "result": {
              "status": "passed",
              "duration": 27821767820
            }
          },
          {
            "keyword": "Then ",
            "name": "the keyboard layout is set to \"ir\"",
            "line": 54,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1676"
            },
            "result": {
              "status": "passed",
              "duration": 92846193
            }
          },
          {
            "keyword": "And ",
            "name": "tpsd is localized to the selected locale",
            "line": 54,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1706"
            },
            "result": {
              "status": "passed",
              "duration": 86546872
            }
          },
          {
            "keyword": "Given ",
            "name": "the network is plugged",
            "line": 54,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 17086963
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 54,
            "match": {
              "location": "features/step_definitions/common_steps.rb:650"
            },
            "result": {
              "status": "passed",
              "duration": 11519146199
            }
          },
          {
            "keyword": "Then ",
            "name": "I successfully start the Unsafe Browser",
            "line": 54,
            "match": {
              "location": "features/step_definitions/browser.rb:110"
            },
            "result": {
              "status": "passed",
              "duration": 6257976934
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Unsafe Browser",
            "line": 54,
            "match": {
              "location": "features/step_definitions/browser.rb:122"
            },
            "result": {
              "status": "passed",
              "duration": 5215087411
            }
          },
          {
            "keyword": "Given ",
            "name": "Thunderbird is installed",
            "line": 54,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:280"
            },
            "result": {
              "status": "passed",
              "duration": 24452588170
            }
          },
          {
            "keyword": "When ",
            "name": "I enable the screen keyboard",
            "line": 54,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1694"
            },
            "result": {
              "status": "passed",
              "duration": 90388265
            }
          },
          {
            "keyword": "Then ",
            "name": "the screen keyboard works in Tor Browser",
            "line": 54,
            "match": {
              "location": "features/step_definitions/browser.rb:448"
            },
            "result": {
              "status": "passed",
              "duration": 11419090524
            }
          },
          {
            "keyword": "And ",
            "name": "DuckDuckGo is the default search engine",
            "line": 54,
            "match": {
              "location": "features/step_definitions/browser.rb:437"
            },
            "result": {
              "status": "passed",
              "duration": 4994282176
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Tor Browser",
            "line": 54,
            "match": {
              "location": "features/step_definitions/browser.rb:122"
            },
            "result": {
              "status": "passed",
              "duration": 5246168343
            }
          },
          {
            "keyword": "And ",
            "name": "the screen keyboard works in Thunderbird",
            "line": 54,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:211"
            },
            "result": {
              "status": "passed",
              "duration": 4695601738
            }
          },
          {
            "keyword": "And ",
            "name": "the layout of the screen keyboard is set to \"ir\"",
            "line": 54,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1702"
            },
            "result": {
              "status": "passed",
              "duration": 356500474
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 1574051321
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 23223
            }
          }
        ]
      },
      {
        "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 12523
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 2936826
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 6981550808
            }
          },
          {
            "keyword": "And ",
            "name": "I set an administration password",
            "line": 55,
            "match": {
              "location": "features/step_definitions/common_steps.rb:576"
            },
            "result": {
              "status": "passed",
              "duration": 6937816300
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session in Portuguese (pt)",
            "line": 55,
            "match": {
              "location": "features/step_definitions/common_steps.rb:514"
            },
            "result": {
              "status": "passed",
              "duration": 26887107597
            }
          },
          {
            "keyword": "Then ",
            "name": "the keyboard layout is set to \"pt\"",
            "line": 55,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1676"
            },
            "result": {
              "status": "passed",
              "duration": 91932878
            }
          },
          {
            "keyword": "And ",
            "name": "tpsd is localized to the selected locale",
            "line": 55,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1706"
            },
            "result": {
              "status": "passed",
              "duration": 92772762
            }
          },
          {
            "keyword": "Given ",
            "name": "the network is plugged",
            "line": 55,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 14101886
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 55,
            "match": {
              "location": "features/step_definitions/common_steps.rb:650"
            },
            "result": {
              "status": "passed",
              "duration": 12708327884
            }
          },
          {
            "keyword": "Then ",
            "name": "I successfully start the Unsafe Browser",
            "line": 55,
            "match": {
              "location": "features/step_definitions/browser.rb:110"
            },
            "result": {
              "status": "passed",
              "duration": 6495986571
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Unsafe Browser",
            "line": 55,
            "match": {
              "location": "features/step_definitions/browser.rb:122"
            },
            "result": {
              "status": "passed",
              "duration": 5215014043
            }
          },
          {
            "keyword": "Given ",
            "name": "Thunderbird is installed",
            "line": 55,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:280"
            },
            "result": {
              "status": "passed",
              "duration": 25030120713
            }
          },
          {
            "keyword": "When ",
            "name": "I enable the screen keyboard",
            "line": 55,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1694"
            },
            "result": {
              "status": "passed",
              "duration": 93902326
            }
          },
          {
            "keyword": "Then ",
            "name": "the screen keyboard works in Tor Browser",
            "line": 55,
            "match": {
              "location": "features/step_definitions/browser.rb:448"
            },
            "result": {
              "status": "passed",
              "duration": 10936372412
            }
          },
          {
            "keyword": "And ",
            "name": "DuckDuckGo is the default search engine",
            "line": 55,
            "match": {
              "location": "features/step_definitions/browser.rb:437"
            },
            "result": {
              "status": "passed",
              "duration": 5000137344
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Tor Browser",
            "line": 55,
            "match": {
              "location": "features/step_definitions/browser.rb:122"
            },
            "result": {
              "status": "passed",
              "duration": 5254512159
            }
          },
          {
            "keyword": "And ",
            "name": "the screen keyboard works in Thunderbird",
            "line": 55,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:211"
            },
            "result": {
              "status": "passed",
              "duration": 4754117792
            }
          },
          {
            "keyword": "And ",
            "name": "the layout of the screen keyboard is set to \"us\"",
            "line": 55,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1702"
            },
            "result": {
              "status": "passed",
              "duration": 353808169
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 1585429787
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 22552
            }
          }
        ]
      },
      {
        "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 15088
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 28691246
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 7333638590
            }
          },
          {
            "keyword": "And ",
            "name": "I set an administration password",
            "line": 56,
            "match": {
              "location": "features/step_definitions/common_steps.rb:576"
            },
            "result": {
              "status": "passed",
              "duration": 6879272515
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session in Russian (ru)",
            "line": 56,
            "match": {
              "location": "features/step_definitions/common_steps.rb:514"
            },
            "result": {
              "status": "passed",
              "duration": 26794236311
            }
          },
          {
            "keyword": "Then ",
            "name": "the keyboard layout is set to \"ru\"",
            "line": 56,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1676"
            },
            "result": {
              "status": "passed",
              "duration": 114499560
            }
          },
          {
            "keyword": "And ",
            "name": "tpsd is localized to the selected locale",
            "line": 56,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1706"
            },
            "result": {
              "status": "passed",
              "duration": 103957378
            }
          },
          {
            "keyword": "Given ",
            "name": "the network is plugged",
            "line": 56,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 30595507
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 56,
            "match": {
              "location": "features/step_definitions/common_steps.rb:650"
            },
            "result": {
              "status": "passed",
              "duration": 12071110878
            }
          },
          {
            "keyword": "Then ",
            "name": "I successfully start the Unsafe Browser",
            "line": 56,
            "match": {
              "location": "features/step_definitions/browser.rb:110"
            },
            "result": {
              "status": "passed",
              "duration": 6804876960
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Unsafe Browser",
            "line": 56,
            "match": {
              "location": "features/step_definitions/browser.rb:122"
            },
            "result": {
              "status": "passed",
              "duration": 5230008588
            }
          },
          {
            "keyword": "Given ",
            "name": "Thunderbird is installed",
            "line": 56,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:280"
            },
            "result": {
              "status": "passed",
              "duration": 24359262193
            }
          },
          {
            "keyword": "When ",
            "name": "I enable the screen keyboard",
            "line": 56,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1694"
            },
            "result": {
              "status": "passed",
              "duration": 75124446
            }
          },
          {
            "keyword": "Then ",
            "name": "the screen keyboard works in Tor Browser",
            "line": 56,
            "match": {
              "location": "features/step_definitions/browser.rb:448"
            },
            "result": {
              "status": "passed",
              "duration": 11285711648
            }
          },
          {
            "keyword": "And ",
            "name": "DuckDuckGo is the default search engine",
            "line": 56,
            "match": {
              "location": "features/step_definitions/browser.rb:437"
            },
            "result": {
              "status": "passed",
              "duration": 4716092941
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Tor Browser",
            "line": 56,
            "match": {
              "location": "features/step_definitions/browser.rb:122"
            },
            "result": {
              "status": "passed",
              "duration": 5216730728
            }
          },
          {
            "keyword": "And ",
            "name": "the screen keyboard works in Thunderbird",
            "line": 56,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:211"
            },
            "result": {
              "status": "passed",
              "duration": 4849741375
            }
          },
          {
            "keyword": "And ",
            "name": "the layout of the screen keyboard is set to \"ru\"",
            "line": 56,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1702"
            },
            "result": {
              "status": "passed",
              "duration": 357659141
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 1272707836
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 25717
            }
          }
        ]
      },
      {
        "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 13795
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 2782126
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 7214076008
            }
          },
          {
            "keyword": "And ",
            "name": "I set an administration password",
            "line": 57,
            "match": {
              "location": "features/step_definitions/common_steps.rb:576"
            },
            "result": {
              "status": "passed",
              "duration": 7010059504
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session in Spanish (es)",
            "line": 57,
            "match": {
              "location": "features/step_definitions/common_steps.rb:514"
            },
            "result": {
              "status": "passed",
              "duration": 26304326915
            }
          },
          {
            "keyword": "Then ",
            "name": "the keyboard layout is set to \"es\"",
            "line": 57,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1676"
            },
            "result": {
              "status": "passed",
              "duration": 127517618
            }
          },
          {
            "keyword": "And ",
            "name": "tpsd is localized to the selected locale",
            "line": 57,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1706"
            },
            "result": {
              "status": "passed",
              "duration": 119624281
            }
          },
          {
            "keyword": "Given ",
            "name": "the network is plugged",
            "line": 57,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 16663180
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 57,
            "match": {
              "location": "features/step_definitions/common_steps.rb:650"
            },
            "result": {
              "status": "passed",
              "duration": 12308998335
            }
          },
          {
            "keyword": "Then ",
            "name": "I successfully start the Unsafe Browser",
            "line": 57,
            "match": {
              "location": "features/step_definitions/browser.rb:110"
            },
            "result": {
              "status": "passed",
              "duration": 6707557654
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Unsafe Browser",
            "line": 57,
            "match": {
              "location": "features/step_definitions/browser.rb:122"
            },
            "result": {
              "status": "passed",
              "duration": 5450913505
            }
          },
          {
            "keyword": "Given ",
            "name": "Thunderbird is installed",
            "line": 57,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:280"
            },
            "result": {
              "status": "passed",
              "duration": 24963619245
            }
          },
          {
            "keyword": "When ",
            "name": "I enable the screen keyboard",
            "line": 57,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1694"
            },
            "result": {
              "status": "passed",
              "duration": 93881651
            }
          },
          {
            "keyword": "Then ",
            "name": "the screen keyboard works in Tor Browser",
            "line": 57,
            "match": {
              "location": "features/step_definitions/browser.rb:448"
            },
            "result": {
              "status": "passed",
              "duration": 11715361476
            }
          },
          {
            "keyword": "And ",
            "name": "DuckDuckGo is the default search engine",
            "line": 57,
            "match": {
              "location": "features/step_definitions/browser.rb:437"
            },
            "result": {
              "status": "passed",
              "duration": 5346225410
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Tor Browser",
            "line": 57,
            "match": {
              "location": "features/step_definitions/browser.rb:122"
            },
            "result": {
              "status": "passed",
              "duration": 5197769196
            }
          },
          {
            "keyword": "And ",
            "name": "the screen keyboard works in Thunderbird",
            "line": 57,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:211"
            },
            "result": {
              "status": "passed",
              "duration": 4882188118
            }
          },
          {
            "keyword": "And ",
            "name": "the layout of the screen keyboard is set to \"us\"",
            "line": 57,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1702"
            },
            "result": {
              "status": "passed",
              "duration": 434179856
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 1348904252
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 22001
            }
          }
        ]
      },
      {
        "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 13144
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 6380722
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 7247198880
            }
          },
          {
            "keyword": "And ",
            "name": "I set an administration password",
            "line": 58,
            "match": {
              "location": "features/step_definitions/common_steps.rb:576"
            },
            "result": {
              "status": "passed",
              "duration": 6861936820
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session in Turkish (tr)",
            "line": 58,
            "match": {
              "location": "features/step_definitions/common_steps.rb:514"
            },
            "result": {
              "status": "passed",
              "duration": 27955995269
            }
          },
          {
            "keyword": "Then ",
            "name": "the keyboard layout is set to \"tr\"",
            "line": 58,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1676"
            },
            "result": {
              "status": "passed",
              "duration": 91598431
            }
          },
          {
            "keyword": "And ",
            "name": "tpsd is localized to the selected locale",
            "line": 58,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1706"
            },
            "result": {
              "status": "passed",
              "duration": 98675338
            }
          },
          {
            "keyword": "Given ",
            "name": "the network is plugged",
            "line": 58,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 17831128
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 58,
            "match": {
              "location": "features/step_definitions/common_steps.rb:650"
            },
            "result": {
              "status": "passed",
              "duration": 11208352930
            }
          },
          {
            "keyword": "Then ",
            "name": "I successfully start the Unsafe Browser",
            "line": 58,
            "match": {
              "location": "features/step_definitions/browser.rb:110"
            },
            "result": {
              "status": "passed",
              "duration": 6630607034
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Unsafe Browser",
            "line": 58,
            "match": {
              "location": "features/step_definitions/browser.rb:122"
            },
            "result": {
              "status": "passed",
              "duration": 5273851185
            }
          },
          {
            "keyword": "Given ",
            "name": "Thunderbird is installed",
            "line": 58,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:280"
            },
            "result": {
              "status": "passed",
              "duration": 23932298669
            }
          },
          {
            "keyword": "When ",
            "name": "I enable the screen keyboard",
            "line": 58,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1694"
            },
            "result": {
              "status": "passed",
              "duration": 81645982
            }
          },
          {
            "keyword": "Then ",
            "name": "the screen keyboard works in Tor Browser",
            "line": 58,
            "match": {
              "location": "features/step_definitions/browser.rb:448"
            },
            "result": {
              "status": "passed",
              "duration": 11042229473
            }
          },
          {
            "keyword": "And ",
            "name": "DuckDuckGo is the default search engine",
            "line": 58,
            "match": {
              "location": "features/step_definitions/browser.rb:437"
            },
            "result": {
              "status": "passed",
              "duration": 5505789287
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Tor Browser",
            "line": 58,
            "match": {
              "location": "features/step_definitions/browser.rb:122"
            },
            "result": {
              "status": "passed",
              "duration": 5205775073
            }
          },
          {
            "keyword": "And ",
            "name": "the screen keyboard works in Thunderbird",
            "line": 58,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:211"
            },
            "result": {
              "status": "passed",
              "duration": 4578282919
            }
          },
          {
            "keyword": "And ",
            "name": "the layout of the screen keyboard is set to \"us\"",
            "line": 58,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1702"
            },
            "result": {
              "status": "passed",
              "duration": 389066474
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 1141722140
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 22633
            }
          }
        ]
      },
      {
        "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 15209
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 2878095
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 8416797533
            }
          },
          {
            "keyword": "When ",
            "name": "I set the language to Italian (it)",
            "line": 62,
            "match": {
              "location": "features/step_definitions/common_steps.rb:482"
            },
            "result": {
              "status": "passed",
              "duration": 4545350438
            }
          },
          {
            "keyword": "Then ",
            "name": "the language and keyboard have not been saved in cleartext storage",
            "line": 63,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1842"
            },
            "result": {
              "status": "passed",
              "duration": 2088370125
            }
          },
          {
            "keyword": "When ",
            "name": "I shutdown Tails and wait for the computer to power off",
            "line": 64,
            "match": {
              "location": "features/step_definitions/common_steps.rb:904"
            },
            "result": {
              "status": "passed",
              "duration": 5723731732
            }
          },
          {
            "keyword": "And ",
            "name": "I start Tails from USB drive \"__internal\" with network unplugged",
            "line": 65,
            "match": {
              "location": "features/step_definitions/common_steps.rb:232"
            },
            "result": {
              "status": "passed",
              "duration": 41063508889
            }
          },
          {
            "keyword": "Then ",
            "name": "the Welcome Screen's language is set to English",
            "line": 66,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1871"
            },
            "result": {
              "status": "passed",
              "duration": 299469690
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 1062751923
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 7294987
            }
          }
        ]
      },
      {
        "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 21049
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 3164993
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 7746095799
            }
          },
          {
            "keyword": "When ",
            "name": "I set the language to Italian (it)",
            "line": 70,
            "match": {
              "location": "features/step_definitions/common_steps.rb:482"
            },
            "result": {
              "status": "passed",
              "duration": 4537018223
            }
          },
          {
            "keyword": "And ",
            "name": "I save the language and keyboard options in cleartext storage",
            "line": 71,
            "match": {
              "location": "features/step_definitions/common_steps.rb:501"
            },
            "result": {
              "status": "passed",
              "duration": 2493376698
            }
          },
          {
            "keyword": "Then ",
            "name": "the \"it\" language and keyboard have been saved in cleartext storage",
            "line": 72,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1850"
            },
            "result": {
              "status": "passed",
              "duration": 117345654
            }
          },
          {
            "keyword": "When ",
            "name": "I set the language to French (fr)",
            "line": 73,
            "match": {
              "location": "features/step_definitions/common_steps.rb:482"
            },
            "result": {
              "status": "passed",
              "duration": 4540127493
            }
          },
          {
            "keyword": "Then ",
            "name": "the \"fr\" language and keyboard have been saved in cleartext storage",
            "line": 74,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1850"
            },
            "result": {
              "status": "passed",
              "duration": 96248773
            }
          },
          {
            "keyword": "And ",
            "name": "I shutdown Tails and wait for the computer to power off",
            "line": 75,
            "match": {
              "location": "features/step_definitions/common_steps.rb:904"
            },
            "result": {
              "status": "passed",
              "duration": 5706396646
            }
          },
          {
            "keyword": "And ",
            "name": "I start Tails from USB drive \"__internal\" with network unplugged",
            "line": 76,
            "match": {
              "location": "features/step_definitions/common_steps.rb:232"
            },
            "result": {
              "status": "passed",
              "duration": 42965885851
            }
          },
          {
            "keyword": "Then ",
            "name": "the \"fr\" language and keyboard have been saved in cleartext storage",
            "line": 77,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1850"
            },
            "result": {
              "status": "passed",
              "duration": 414429929
            }
          },
          {
            "keyword": "And ",
            "name": "the Welcome Screen's language is set to French",
            "line": 78,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1871"
            },
            "result": {
              "status": "passed",
              "duration": 748205844
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session",
            "line": 79,
            "match": {
              "location": "features/step_definitions/common_steps.rb:514"
            },
            "result": {
              "status": "passed",
              "duration": 8575581337
            }
          },
          {
            "keyword": "Then ",
            "name": "the language is set to French",
            "line": 80,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1888"
            },
            "result": {
              "status": "passed",
              "duration": 49619460
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 757168097
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 6330126
            }
          }
        ]
      },
      {
        "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 14698
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 1729472
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 8513820779
            }
          },
          {
            "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:935"
            },
            "result": {
              "status": "passed",
              "duration": 261808683
            }
          },
          {
            "keyword": "And ",
            "name": "I create a persistent partition",
            "line": 86,
            "match": {
              "location": "features/step_definitions/usb.rb:341"
            },
            "result": {
              "status": "passed",
              "duration": 31695350062
            }
          },
          {
            "keyword": "And ",
            "name": "I manually store legacy localization settings in Persistent Storage",
            "line": 87,
            "match": {
              "location": "features/step_definitions/usb.rb:1603"
            },
            "result": {
              "status": "passed",
              "duration": 213800704
            }
          },
          {
            "keyword": "When ",
            "name": "I shutdown Tails and wait for the computer to power off",
            "line": 88,
            "match": {
              "location": "features/step_definitions/common_steps.rb:904"
            },
            "result": {
              "status": "passed",
              "duration": 8269862037
            }
          },
          {
            "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:232"
            },
            "result": {
              "status": "passed",
              "duration": 38559646849
            }
          },
          {
            "keyword": "Then ",
            "name": "the Welcome Screen's language is set to English",
            "line": 91,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1871"
            },
            "result": {
              "status": "passed",
              "duration": 247603653
            }
          },
          {
            "keyword": "And ",
            "name": "the Welcome Screen's formats is set to United States",
            "line": 92,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1881"
            },
            "result": {
              "status": "passed",
              "duration": 200730694
            }
          },
          {
            "keyword": "When ",
            "name": "I enable persistence",
            "line": 93,
            "match": {
              "location": "features/step_definitions/usb.rb:721"
            },
            "result": {
              "status": "passed",
              "duration": 7637338189
            }
          },
          {
            "keyword": "Then ",
            "name": "the Welcome Screen's language is set to German",
            "line": 94,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1871"
            },
            "result": {
              "status": "passed",
              "duration": 589975428
            }
          },
          {
            "keyword": "And ",
            "name": "the Welcome Screen's formats is set to France",
            "line": 95,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1881"
            },
            "result": {
              "status": "passed",
              "duration": 210617946
            }
          },
          {
            "keyword": "When ",
            "name": "I set the language to Italian (it)",
            "line": 96,
            "match": {
              "location": "features/step_definitions/common_steps.rb:482"
            },
            "result": {
              "status": "passed",
              "duration": 4504464738
            }
          },
          {
            "keyword": "Then ",
            "name": "the language and keyboard have not been saved in cleartext storage",
            "line": 97,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1842"
            },
            "result": {
              "status": "passed",
              "duration": 2154512368
            }
          },
          {
            "keyword": "When ",
            "name": "I save the language and keyboard options in cleartext storage",
            "line": 98,
            "match": {
              "location": "features/step_definitions/common_steps.rb:501"
            },
            "result": {
              "status": "passed",
              "duration": 2386129679
            }
          },
          {
            "keyword": "Then ",
            "name": "the \"it\" language and keyboard have been saved in cleartext storage",
            "line": 99,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1850"
            },
            "result": {
              "status": "passed",
              "duration": 112596294
            }
          },
          {
            "keyword": "And ",
            "name": "I shutdown Tails and wait for the computer to power off",
            "line": 100,
            "match": {
              "location": "features/step_definitions/common_steps.rb:904"
            },
            "result": {
              "status": "passed",
              "duration": 2722991684
            }
          },
          {
            "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:232"
            },
            "result": {
              "status": "passed",
              "duration": 38723436004
            }
          },
          {
            "keyword": "Then ",
            "name": "the Welcome Screen's language is set to Italian",
            "line": 103,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1871"
            },
            "result": {
              "status": "passed",
              "duration": 514655278
            }
          },
          {
            "keyword": "And ",
            "name": "the Welcome Screen's formats is set to Italy",
            "line": 104,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1881"
            },
            "result": {
              "status": "passed",
              "duration": 181566378
            }
          },
          {
            "keyword": "When ",
            "name": "I enable persistence",
            "line": 105,
            "match": {
              "location": "features/step_definitions/usb.rb:721"
            },
            "result": {
              "status": "passed",
              "duration": 9140749601
            }
          },
          {
            "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:1881"
            },
            "result": {
              "status": "passed",
              "duration": 226401535
            }
          },
          {
            "keyword": "And ",
            "name": "the Welcome Screen's language is set to Italian",
            "line": 108,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1871"
            },
            "result": {
              "status": "passed",
              "duration": 840298473
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 931050879
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 17137737
            }
          }
        ]
      }
    ]
  },
  {
    "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 47178
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 10886318
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 7258557702
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:185"
            },
            "result": {
              "status": "passed",
              "duration": 4033080
            }
          },
          {
            "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": 7904294015
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session",
            "line": 12,
            "match": {
              "location": "features/step_definitions/common_steps.rb:514"
            },
            "result": {
              "status": "passed",
              "duration": 12048385897
            }
          },
          {
            "keyword": "And ",
            "name": "the network is plugged",
            "line": 13,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 17723886
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 14,
            "match": {
              "location": "features/step_definitions/common_steps.rb:650"
            },
            "result": {
              "status": "passed",
              "duration": 10163696071
            }
          },
          {
            "keyword": "Then ",
            "name": "1 network interface is enabled",
            "line": 15,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:83"
            },
            "result": {
              "status": "passed",
              "duration": 63750399
            }
          },
          {
            "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": 76526622
            }
          },
          {
            "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": 360518686
            }
          },
          {
            "keyword": "Then ",
            "name": "2 network interfaces are enabled",
            "line": 18,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:83"
            },
            "result": {
              "status": "passed",
              "duration": 83597735
            }
          },
          {
            "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": 74490795
            }
          },
          {
            "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": 145521152
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 1317997094
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 41850586
            }
          }
        ]
      },
      {
        "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 23916
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 5022786
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 7329178881
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 24,
            "match": {
              "location": "features/step_definitions/common_steps.rb:185"
            },
            "result": {
              "status": "passed",
              "duration": 3565613
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session",
            "line": 25,
            "match": {
              "location": "features/step_definitions/common_steps.rb:514"
            },
            "result": {
              "status": "passed",
              "duration": 11747521511
            }
          },
          {
            "keyword": "And ",
            "name": "the network is plugged",
            "line": 26,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 18186623
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 27,
            "match": {
              "location": "features/step_definitions/common_steps.rb:650"
            },
            "result": {
              "status": "passed",
              "duration": 11914783419
            }
          },
          {
            "keyword": "Then ",
            "name": "1 network interface is enabled",
            "line": 28,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:83"
            },
            "result": {
              "status": "passed",
              "duration": 62456946
            }
          },
          {
            "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": 76377190
            }
          },
          {
            "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": 269502854
            }
          },
          {
            "keyword": "Then ",
            "name": "2 network interfaces are enabled",
            "line": 31,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:83"
            },
            "result": {
              "status": "passed",
              "duration": 81840883
            }
          },
          {
            "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": 60765124
            }
          },
          {
            "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": 91224964
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 799812309
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 53375611
            }
          }
        ]
      },
      {
        "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 15219
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 3624815
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 7410261907
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 37,
            "match": {
              "location": "features/step_definitions/common_steps.rb:185"
            },
            "result": {
              "status": "passed",
              "duration": 5761440
            }
          },
          {
            "keyword": "And ",
            "name": "the network is plugged",
            "line": 38,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 31640505
            }
          },
          {
            "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": 110917212
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session",
            "line": 40,
            "match": {
              "location": "features/step_definitions/common_steps.rb:514"
            },
            "result": {
              "status": "passed",
              "duration": 12868379224
            }
          },
          {
            "keyword": "Then ",
            "name": "no network interfaces are enabled",
            "line": 41,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:83"
            },
            "result": {
              "status": "passed",
              "duration": 50553871
            }
          },
          {
            "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": 5282323
            }
          },
          {
            "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:629"
            },
            "result": {
              "status": "passed",
              "duration": 1584976208
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 669824779
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 55744271
            }
          }
        ]
      },
      {
        "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 19566
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 4047117
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 7454510971
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 47,
            "match": {
              "location": "features/step_definitions/common_steps.rb:185"
            },
            "result": {
              "status": "passed",
              "duration": 3927232
            }
          },
          {
            "keyword": "And ",
            "name": "the network is plugged",
            "line": 48,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 18907757
            }
          },
          {
            "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": 102634143
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session",
            "line": 50,
            "match": {
              "location": "features/step_definitions/common_steps.rb:514"
            },
            "result": {
              "status": "passed",
              "duration": 11458340138
            }
          },
          {
            "keyword": "Then ",
            "name": "no network interfaces are enabled",
            "line": 51,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:83"
            },
            "result": {
              "status": "passed",
              "duration": 68381451
            }
          },
          {
            "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": 5536389
            }
          },
          {
            "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:629"
            },
            "result": {
              "status": "passed",
              "duration": 1614204329
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 1129866591
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 41976059
            }
          }
        ]
      },
      {
        "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 34625
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 3493339
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 7469273943
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 57,
            "match": {
              "location": "features/step_definitions/common_steps.rb:185"
            },
            "result": {
              "status": "passed",
              "duration": 5269938
            }
          },
          {
            "keyword": "And ",
            "name": "the network is plugged",
            "line": 58,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 19467345
            }
          },
          {
            "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": 100427514
            }
          },
          {
            "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": 171329882
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session",
            "line": 61,
            "match": {
              "location": "features/step_definitions/common_steps.rb:514"
            },
            "result": {
              "status": "passed",
              "duration": 13823889466
            }
          },
          {
            "keyword": "Then ",
            "name": "1 network interface is enabled",
            "line": 62,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:83"
            },
            "result": {
              "status": "passed",
              "duration": 70276904
            }
          },
          {
            "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": 261757891
            }
          },
          {
            "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": 9170320
            }
          },
          {
            "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:629"
            },
            "result": {
              "status": "passed",
              "duration": 1617721732
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 632628681
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 51748920
            }
          }
        ]
      },
      {
        "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 11481
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 2974015
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 68,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 53332569
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 69,
            "match": {
              "location": "features/step_definitions/common_steps.rb:185"
            },
            "result": {
              "status": "passed",
              "duration": 1772013
            }
          },
          {
            "keyword": "When ",
            "name": "I start the computer",
            "line": 70,
            "match": {
              "location": "features/step_definitions/common_steps.rb:202"
            },
            "result": {
              "status": "passed",
              "duration": 821892631
            }
          },
          {
            "keyword": "Then ",
            "name": "the computer boots Tails",
            "line": 71,
            "match": {
              "location": "features/step_definitions/common_steps.rb:402"
            },
            "result": {
              "status": "passed",
              "duration": 35881175743
            }
          },
          {
            "keyword": "And ",
            "name": "no network interfaces are enabled",
            "line": 72,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:83"
            },
            "result": {
              "status": "passed",
              "duration": 330098622
            }
          },
          {
            "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": 5349869
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 642559681
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 59198537
            }
          }
        ]
      }
    ]
  },
  {
    "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 18726
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 1995921
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 8,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 78478850
            }
          },
          {
            "keyword": "And ",
            "name": "I start Tails from DVD with network unplugged and I login",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:211"
            },
            "result": {
              "status": "passed",
              "duration": 51418737062
            }
          },
          {
            "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": 8850222639
            }
          },
          {
            "keyword": "Then ",
            "name": "MAT can clean some sample PNG file",
            "line": 11,
            "match": {
              "location": "features/step_definitions/checks.rb:267"
            },
            "result": {
              "status": "passed",
              "duration": 1151137328
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 812043476
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 9108105
            }
          }
        ]
      }
    ]
  },
  {
    "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 87515
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 8241410
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 5,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 7520241919
            }
          },
          {
            "keyword": "And ",
            "name": "I wait between 30 and 60 seconds",
            "line": 6,
            "output": [
              "Slept for 43 seconds"
            ],
            "match": {
              "location": "features/step_definitions/common_steps.rb:1370"
            },
            "result": {
              "status": "passed",
              "duration": 43000155375
            }
          },
          {
            "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": 352339290
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 8,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 16361973
            }
          },
          {
            "keyword": "Then ",
            "name": "I successfully configure Tor",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:675"
            },
            "result": {
              "status": "passed",
              "duration": 9854091260
            }
          },
          {
            "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": 371897516
            }
          },
          {
            "keyword": "And ",
            "name": "all notifications have disappeared",
            "line": 11,
            "match": {
              "location": "features/step_definitions/common_steps.rb:762"
            },
            "result": {
              "status": "passed",
              "duration": 6859002822
            }
          },
          {
            "keyword": "And ",
            "name": "the time has synced",
            "line": 12,
            "match": {
              "location": "features/step_definitions/common_steps.rb:752"
            },
            "result": {
              "status": "passed",
              "duration": 40807400
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 709259369
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 20408
            }
          }
        ]
      },
      {
        "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 13274
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 2895557
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 7301439936
            }
          },
          {
            "keyword": "And ",
            "name": "I disable networking in Tails Greeter",
            "line": 17,
            "match": {
              "location": "features/step_definitions/common_steps.rb:568"
            },
            "result": {
              "status": "passed",
              "duration": 7992132477
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session",
            "line": 18,
            "match": {
              "location": "features/step_definitions/common_steps.rb:514"
            },
            "result": {
              "status": "passed",
              "duration": 12860629673
            }
          },
          {
            "keyword": "Then ",
            "name": "no network interfaces are enabled",
            "line": 19,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:83"
            },
            "result": {
              "status": "passed",
              "duration": 54217150
            }
          },
          {
            "keyword": "When ",
            "name": "I hotplug a network device",
            "line": 20,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:106"
            },
            "result": {
              "status": "passed",
              "duration": 67000075
            }
          },
          {
            "keyword": "And ",
            "name": "I wait 10 seconds",
            "line": 21,
            "output": [
              "Slept for 10 seconds"
            ],
            "match": {
              "location": "features/step_definitions/common_steps.rb:1370"
            },
            "result": {
              "status": "passed",
              "duration": 10000132715
            }
          },
          {
            "keyword": "Then ",
            "name": "no network interfaces are enabled",
            "line": 22,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:83"
            },
            "result": {
              "status": "passed",
              "duration": 321601376
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 755435815
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 22582
            }
          }
        ]
      }
    ]
  },
  {
    "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 11822
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 2989877
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 11277275189
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Onion Circuits\" via GNOME Activities Overview",
            "line": 6,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1165"
            },
            "result": {
              "status": "passed",
              "duration": 9020832928
            }
          },
          {
            "keyword": "Then ",
            "name": "Onion Circuits starts",
            "line": 7,
            "match": {
              "location": "features/step_definitions/onioncircuits.rb:5"
            },
            "result": {
              "status": "passed",
              "duration": 641925217
            }
          },
          {
            "keyword": "And ",
            "name": "Onion Circuits shows some circuits",
            "line": 8,
            "match": {
              "location": "features/step_definitions/onioncircuits.rb:9"
            },
            "result": {
              "status": "passed",
              "duration": 193631461
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 1095687783
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 21711
            }
          }
        ]
      }
    ]
  },
  {
    "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 12063
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 6155960
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 80452907799
            }
          },
          {
            "keyword": "And ",
            "name": "I update the APT lists using apt",
            "line": 8,
            "match": {
              "location": "features/step_definitions/apt.rb:54"
            },
            "result": {
              "status": "passed",
              "duration": 7667243077
            }
          },
          {
            "keyword": "And ",
            "name": "I install \"python3-behave\" using apt",
            "line": 9,
            "match": {
              "location": "features/step_definitions/apt.rb:76"
            },
            "result": {
              "status": "passed",
              "duration": 6316381707
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tails Persistent Storage behave tests pass",
            "line": 10,
            "match": {
              "location": "features/step_definitions/usb.rb:1699"
            },
            "result": {
              "status": "passed",
              "duration": 997586119
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 875549421
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 21310
            }
          }
        ]
      },
      {
        "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 13546
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 3529506
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 8234436784
            }
          },
          {
            "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:514"
            },
            "result": {
              "status": "passed",
              "duration": 14714625750
            }
          },
          {
            "keyword": "Then ",
            "name": "Tails is running from USB drive \"__internal\"",
            "line": 15,
            "match": {
              "location": "features/step_definitions/usb.rb:935"
            },
            "result": {
              "status": "passed",
              "duration": 360791141
            }
          },
          {
            "keyword": "And ",
            "name": "persistence is disabled",
            "line": 16,
            "match": {
              "location": "features/step_definitions/usb.rb:847"
            },
            "result": {
              "status": "passed",
              "duration": 134189801
            }
          },
          {
            "keyword": "But ",
            "name": "a Tails persistence partition exists on USB drive \"__internal\"",
            "line": 17,
            "match": {
              "location": "features/step_definitions/usb.rb:648"
            },
            "result": {
              "status": "passed",
              "duration": 8041397329
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 1035057194
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 20279
            }
          }
        ]
      },
      {
        "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 10740
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 3069454
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 8659795112
            }
          },
          {
            "keyword": "Then ",
            "name": "Tails is running from USB drive \"__internal\"",
            "line": 21,
            "match": {
              "location": "features/step_definitions/usb.rb:935"
            },
            "result": {
              "status": "passed",
              "duration": 251684873
            }
          },
          {
            "keyword": "When ",
            "name": "I create a file in the Persistent directory",
            "line": 22,
            "match": {
              "location": "features/step_definitions/usb.rb:1712"
            },
            "result": {
              "status": "passed",
              "duration": 101998341
            }
          },
          {
            "keyword": "And ",
            "name": "I create a persistent partition with the default settings",
            "line": 23,
            "match": {
              "location": "features/step_definitions/usb.rb:341"
            },
            "result": {
              "status": "passed",
              "duration": 21031911894
            }
          },
          {
            "keyword": "Then ",
            "name": "the file I created was copied to the Persistent Storage",
            "line": 24,
            "match": {
              "location": "features/step_definitions/usb.rb:1719"
            },
            "result": {
              "status": "passed",
              "duration": 67248819
            }
          },
          {
            "keyword": "When ",
            "name": "I shutdown Tails and wait for the computer to power off",
            "line": 25,
            "match": {
              "location": "features/step_definitions/common_steps.rb:904"
            },
            "result": {
              "status": "passed",
              "duration": 7295042561
            }
          },
          {
            "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:232"
            },
            "result": {
              "status": "passed",
              "duration": 64389065770
            }
          },
          {
            "keyword": "Then ",
            "name": "persistence for \"Persistent\" is active",
            "line": 27,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1049"
            },
            "result": {
              "status": "passed",
              "duration": 215906200
            }
          },
          {
            "keyword": "And ",
            "name": "the file I created in the Persistent directory exists",
            "line": 28,
            "match": {
              "location": "features/step_definitions/usb.rb:1730"
            },
            "result": {
              "status": "passed",
              "duration": 41924732
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 773239544
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 6722241
            }
          }
        ]
      },
      {
        "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 18745
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 2217367
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 7700687420
            }
          },
          {
            "keyword": "And ",
            "name": "the system is very low on memory",
            "line": 32,
            "match": {
              "location": "features/step_definitions/usb.rb:387"
            },
            "result": {
              "status": "passed",
              "duration": 4673589766
            }
          },
          {
            "keyword": "When ",
            "name": "I create a file in the Persistent directory",
            "line": 33,
            "match": {
              "location": "features/step_definitions/usb.rb:1712"
            },
            "result": {
              "status": "passed",
              "duration": 265252234
            }
          },
          {
            "keyword": "When ",
            "name": "I try to create a persistent partition",
            "line": 34,
            "match": {
              "location": "features/step_definitions/usb.rb:365"
            },
            "result": {
              "status": "passed",
              "duration": 5288477169
            }
          },
          {
            "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:458"
            },
            "result": {
              "status": "passed",
              "duration": 249915054
            }
          },
          {
            "keyword": "When ",
            "name": "I close the Persistent Storage app",
            "line": 36,
            "match": {
              "location": "features/step_definitions/usb.rb:434"
            },
            "result": {
              "status": "passed",
              "duration": 2421235186
            }
          },
          {
            "keyword": "And ",
            "name": "I free up some memory",
            "line": 37,
            "match": {
              "location": "features/step_definitions/usb.rb:427"
            },
            "result": {
              "status": "passed",
              "duration": 847789406
            }
          },
          {
            "keyword": "And ",
            "name": "I create a persistent partition with the default settings",
            "line": 38,
            "match": {
              "location": "features/step_definitions/usb.rb:341"
            },
            "result": {
              "status": "passed",
              "duration": 10634294459
            }
          },
          {
            "keyword": "Then ",
            "name": "the file I created was copied to the Persistent Storage",
            "line": 39,
            "match": {
              "location": "features/step_definitions/usb.rb:1719"
            },
            "result": {
              "status": "passed",
              "duration": 58186497
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 831519886
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 25127
            }
          }
        ]
      },
      {
        "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 18225
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 4481230
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 8550671216
            }
          },
          {
            "keyword": "Then ",
            "name": "Tails is running from USB drive \"__internal\"",
            "line": 43,
            "match": {
              "location": "features/step_definitions/usb.rb:935"
            },
            "result": {
              "status": "passed",
              "duration": 347683826
            }
          },
          {
            "keyword": "And ",
            "name": "all tps features are active",
            "line": 44,
            "match": {
              "location": "features/step_definitions/usb.rb:778"
            },
            "result": {
              "status": "passed",
              "duration": 1352962411
            }
          },
          {
            "keyword": "And ",
            "name": "all persistent directories have safe access rights",
            "line": 45,
            "match": {
              "location": "features/step_definitions/usb.rb:1037"
            },
            "result": {
              "status": "passed",
              "duration": 1941592061
            }
          },
          {
            "keyword": "When ",
            "name": "I disable the first tps feature",
            "line": 46,
            "match": {
              "location": "features/step_definitions/usb.rb:294"
            },
            "result": {
              "status": "passed",
              "duration": 2554323530
            }
          },
          {
            "keyword": "Then ",
            "name": "all tps features but the first one are active",
            "line": 47,
            "match": {
              "location": "features/step_definitions/usb.rb:778"
            },
            "result": {
              "status": "passed",
              "duration": 1122738840
            }
          },
          {
            "keyword": "And ",
            "name": "I shutdown Tails and wait for the computer to power off",
            "line": 48,
            "match": {
              "location": "features/step_definitions/common_steps.rb:904"
            },
            "result": {
              "status": "passed",
              "duration": 9882773387
            }
          },
          {
            "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:232"
            },
            "result": {
              "status": "passed",
              "duration": 66283957897
            }
          },
          {
            "keyword": "Then ",
            "name": "all tps features but the first one are active",
            "line": 50,
            "match": {
              "location": "features/step_definitions/usb.rb:778"
            },
            "result": {
              "status": "passed",
              "duration": 1236152055
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 985306116
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 8618426
            }
          }
        ]
      },
      {
        "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 19106
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 4860331
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 7567813780
            }
          },
          {
            "keyword": "Then ",
            "name": "persistence for \"Persistent\" is active",
            "line": 54,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1049"
            },
            "result": {
              "status": "passed",
              "duration": 88330810
            }
          },
          {
            "keyword": "And ",
            "name": "I create a file in the Persistent directory",
            "line": 55,
            "match": {
              "location": "features/step_definitions/usb.rb:1712"
            },
            "result": {
              "status": "passed",
              "duration": 102273757
            }
          },
          {
            "keyword": "Then ",
            "name": "the file I created was copied to the Persistent Storage",
            "line": 56,
            "match": {
              "location": "features/step_definitions/usb.rb:1719"
            },
            "result": {
              "status": "passed",
              "duration": 86214583
            }
          },
          {
            "keyword": "When ",
            "name": "I disable the first tps feature",
            "line": 57,
            "match": {
              "location": "features/step_definitions/usb.rb:294"
            },
            "result": {
              "status": "passed",
              "duration": 2666049917
            }
          },
          {
            "keyword": "Then ",
            "name": "persistence for \"Persistent\" is not active",
            "line": 58,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1049"
            },
            "result": {
              "status": "passed",
              "duration": 74947532
            }
          },
          {
            "keyword": "And ",
            "name": "the Persistent directory does not exist",
            "line": 59,
            "match": {
              "location": "features/step_definitions/usb.rb:1736"
            },
            "result": {
              "status": "passed",
              "duration": 34698186
            }
          },
          {
            "keyword": "When ",
            "name": "I enable the first tps feature",
            "line": 60,
            "match": {
              "location": "features/step_definitions/usb.rb:294"
            },
            "result": {
              "status": "passed",
              "duration": 2439807031
            }
          },
          {
            "keyword": "Then ",
            "name": "persistence for \"Persistent\" is active",
            "line": 61,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1049"
            },
            "result": {
              "status": "passed",
              "duration": 60209212
            }
          },
          {
            "keyword": "And ",
            "name": "the file I created in the Persistent directory exists",
            "line": 62,
            "match": {
              "location": "features/step_definitions/usb.rb:1730"
            },
            "result": {
              "status": "passed",
              "duration": 35628621
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 569851744
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 22853
            }
          }
        ]
      },
      {
        "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 10610
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 3089702
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 7328374093
            }
          },
          {
            "keyword": "Then ",
            "name": "persistence for \"Persistent\" is active",
            "line": 66,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1049"
            },
            "result": {
              "status": "passed",
              "duration": 70383384
            }
          },
          {
            "keyword": "When ",
            "name": "I create a file in the Persistent directory",
            "line": 67,
            "match": {
              "location": "features/step_definitions/usb.rb:1712"
            },
            "result": {
              "status": "passed",
              "duration": 71936034
            }
          },
          {
            "keyword": "And ",
            "name": "I disable the first tps feature",
            "line": 68,
            "match": {
              "location": "features/step_definitions/usb.rb:294"
            },
            "result": {
              "status": "passed",
              "duration": 2660146290
            }
          },
          {
            "keyword": "And ",
            "name": "I delete the data of the Persistent Folder feature",
            "line": 69,
            "match": {
              "location": "features/step_definitions/usb.rb:1740"
            },
            "result": {
              "status": "passed",
              "duration": 2980651104
            }
          },
          {
            "keyword": "Then ",
            "name": "the file I created does not exist on the Persistent Storage",
            "line": 70,
            "match": {
              "location": "features/step_definitions/usb.rb:1725"
            },
            "result": {
              "status": "passed",
              "duration": 61123687
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 653966188
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 20409
            }
          }
        ]
      },
      {
        "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 10729
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 3083621
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 7476754194
            }
          },
          {
            "keyword": "And ",
            "name": "the network is plugged",
            "line": 74,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 14959223
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 75,
            "match": {
              "location": "features/step_definitions/common_steps.rb:650"
            },
            "result": {
              "status": "passed",
              "duration": 12281329437
            }
          },
          {
            "keyword": "And ",
            "name": "I take note of which tps features are available",
            "line": 76,
            "match": {
              "location": "features/step_definitions/usb.rb:1115"
            },
            "result": {
              "status": "passed",
              "duration": 207192933
            }
          },
          {
            "keyword": "When ",
            "name": "I write some files expected to persist",
            "line": 77,
            "match": {
              "location": "features/step_definitions/usb.rb:1075"
            },
            "result": {
              "status": "passed",
              "duration": 1453273779
            }
          },
          {
            "keyword": "And ",
            "name": "I shutdown Tails and wait for the computer to power off",
            "line": 78,
            "match": {
              "location": "features/step_definitions/common_steps.rb:904"
            },
            "result": {
              "status": "passed",
              "duration": 5514983857
            }
          },
          {
            "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:1154"
            },
            "result": {
              "status": "passed",
              "duration": 12274057311
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 104010322
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 24205
            }
          }
        ]
      },
      {
        "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 28423
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 22870635
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 7454872145
            }
          },
          {
            "keyword": "And ",
            "name": "the network is plugged",
            "line": 84,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 16028488
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 85,
            "match": {
              "location": "features/step_definitions/common_steps.rb:650"
            },
            "result": {
              "status": "passed",
              "duration": 9562997884
            }
          },
          {
            "keyword": "And ",
            "name": "I add a wired DHCP NetworkManager connection called \"persistent-con-current\"",
            "line": 86,
            "match": {
              "location": "features/step_definitions/common_steps.rb:955"
            },
            "result": {
              "status": "passed",
              "duration": 130401553
            }
          },
          {
            "keyword": "And ",
            "name": "I shutdown Tails and wait for the computer to power off",
            "line": 87,
            "match": {
              "location": "features/step_definitions/common_steps.rb:904"
            },
            "result": {
              "status": "passed",
              "duration": 9493889140
            }
          },
          {
            "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:232"
            },
            "result": {
              "status": "passed",
              "duration": 63146236099
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 89,
            "match": {
              "location": "features/step_definitions/common_steps.rb:185"
            },
            "result": {
              "status": "passed",
              "duration": 3504540
            }
          },
          {
            "keyword": "And ",
            "name": "the network is plugged",
            "line": 90,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 22884951
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 91,
            "match": {
              "location": "features/step_definitions/common_steps.rb:650"
            },
            "result": {
              "status": "passed",
              "duration": 11800804951
            }
          },
          {
            "keyword": "And ",
            "name": "I switch to the \"persistent-con-current\" NetworkManager connection",
            "line": 92,
            "match": {
              "location": "features/step_definitions/common_steps.rb:970"
            },
            "result": {
              "status": "passed",
              "duration": 340398580
            }
          },
          {
            "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": 52450306
            }
          },
          {
            "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": 152590895
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 748638030
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 64602718
            }
          }
        ]
      },
      {
        "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 41349
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 4630039
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 8345044181
            }
          },
          {
            "keyword": "And ",
            "name": "I enable persistence creation in Tails Greeter",
            "line": 98,
            "match": {
              "location": "features/step_definitions/usb.rb:322"
            },
            "result": {
              "status": "passed",
              "duration": 1061192763
            }
          },
          {
            "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:514"
            },
            "result": {
              "status": "passed",
              "duration": 14081570020
            }
          },
          {
            "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:341"
            },
            "result": {
              "status": "passed",
              "duration": 19830155893
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 1215090247
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 23464
            }
          }
        ]
      },
      {
        "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 11442
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 2925564
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 8622906831
            }
          },
          {
            "keyword": "When ",
            "name": "I enable persistence",
            "line": 104,
            "match": {
              "location": "features/step_definitions/usb.rb:721"
            },
            "result": {
              "status": "passed",
              "duration": 15809953267
            }
          },
          {
            "keyword": "Then ",
            "name": "no persistent Greeter options were restored",
            "line": 105,
            "match": {
              "location": "features/step_definitions/usb.rb:1687"
            },
            "result": {
              "status": "passed",
              "duration": 12888998303
            }
          },
          {
            "keyword": "When ",
            "name": "I set all Greeter options to non-default values",
            "line": 106,
            "match": {
              "location": "features/step_definitions/usb.rb:1627"
            },
            "result": {
              "status": "passed",
              "duration": 38678333568
            }
          },
          {
            "keyword": "Then ",
            "name": "the Welcome Screen's language is set to English",
            "line": 107,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1871"
            },
            "result": {
              "status": "passed",
              "duration": 360769527
            }
          },
          {
            "keyword": "And ",
            "name": "the Welcome Screen's formats is set to United States",
            "line": 108,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1881"
            },
            "result": {
              "status": "passed",
              "duration": 262072471
            }
          },
          {
            "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:468"
            },
            "result": {
              "status": "passed",
              "duration": 4561744272
            }
          },
          {
            "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:514"
            },
            "result": {
              "status": "passed",
              "duration": 24503424227
            }
          },
          {
            "keyword": "Then ",
            "name": "all Persistent Greeter options are set to non-default values",
            "line": 112,
            "match": {
              "location": "features/step_definitions/usb.rb:1651"
            },
            "result": {
              "status": "passed",
              "duration": 159039434
            }
          },
          {
            "keyword": "When ",
            "name": "I cold reboot the computer",
            "line": 113,
            "match": {
              "location": "features/step_definitions/common_steps.rb:279"
            },
            "result": {
              "status": "passed",
              "duration": 6380891990
            }
          },
          {
            "keyword": "And ",
            "name": "the computer reboots Tails",
            "line": 114,
            "match": {
              "location": "features/step_definitions/common_steps.rb:402"
            },
            "result": {
              "status": "passed",
              "duration": 37941936245
            }
          },
          {
            "keyword": "Then ",
            "name": "the Welcome Screen's language is set to English",
            "line": 115,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1871"
            },
            "result": {
              "status": "passed",
              "duration": 258797810
            }
          },
          {
            "keyword": "And ",
            "name": "the Welcome Screen's formats is set to United States",
            "line": 116,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1881"
            },
            "result": {
              "status": "passed",
              "duration": 185451987
            }
          },
          {
            "keyword": "Given ",
            "name": "I enable persistence",
            "line": 117,
            "match": {
              "location": "features/step_definitions/usb.rb:721"
            },
            "result": {
              "status": "passed",
              "duration": 7507794680
            }
          },
          {
            "keyword": "Then ",
            "name": "persistent Greeter options were restored",
            "line": 118,
            "match": {
              "location": "features/step_definitions/usb.rb:1687"
            },
            "result": {
              "status": "passed",
              "duration": 67602046
            }
          },
          {
            "keyword": "And ",
            "name": "the Welcome Screen's formats is set to Belgium",
            "line": 119,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1881"
            },
            "result": {
              "status": "passed",
              "duration": 228360411
            }
          },
          {
            "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:514"
            },
            "result": {
              "status": "passed",
              "duration": 9910489920
            }
          },
          {
            "keyword": "Then ",
            "name": "all Persistent Greeter options are set to non-default values",
            "line": 121,
            "match": {
              "location": "features/step_definitions/usb.rb:1651"
            },
            "result": {
              "status": "passed",
              "duration": 193204240
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 808004878
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 7750599
            }
          }
        ]
      },
      {
        "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 23014
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 3722187
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 8514440238
            }
          },
          {
            "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:462"
            },
            "result": {
              "status": "passed",
              "duration": 31038737996
            }
          },
          {
            "keyword": "And ",
            "name": "I shutdown Tails and wait for the computer to power off",
            "line": 129,
            "match": {
              "location": "features/step_definitions/common_steps.rb:904"
            },
            "result": {
              "status": "passed",
              "duration": 9953949812
            }
          },
          {
            "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:232"
            },
            "result": {
              "status": "passed",
              "duration": 64027472709
            }
          },
          {
            "keyword": "And ",
            "name": "I change the passphrase of the Persistent Storage back to the original",
            "line": 131,
            "match": {
              "location": "features/step_definitions/usb.rb:462"
            },
            "result": {
              "status": "passed",
              "duration": 24495913917
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 1185409758
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 28288850
            }
          }
        ]
      },
      {
        "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 22603
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 4468267
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 7989043147
            }
          },
          {
            "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:514"
            },
            "result": {
              "status": "passed",
              "duration": 14016265119
            }
          },
          {
            "keyword": "Then ",
            "name": "persistence is disabled",
            "line": 136,
            "match": {
              "location": "features/step_definitions/usb.rb:847"
            },
            "result": {
              "status": "passed",
              "duration": 113491745
            }
          },
          {
            "keyword": "But ",
            "name": "a Tails persistence partition exists on USB drive \"__internal\"",
            "line": 137,
            "match": {
              "location": "features/step_definitions/usb.rb:648"
            },
            "result": {
              "status": "passed",
              "duration": 6874814896
            }
          },
          {
            "keyword": "And ",
            "name": "all notifications have disappeared",
            "line": 138,
            "match": {
              "location": "features/step_definitions/common_steps.rb:762"
            },
            "result": {
              "status": "passed",
              "duration": 8095416091
            }
          },
          {
            "keyword": "When ",
            "name": "I delete the persistent partition",
            "line": 139,
            "match": {
              "location": "features/step_definitions/usb.rb:1194"
            },
            "result": {
              "status": "passed",
              "duration": 2806144779
            }
          },
          {
            "keyword": "Then ",
            "name": "there is no persistence partition on USB drive \"__internal\"",
            "line": 140,
            "match": {
              "location": "features/step_definitions/usb.rb:606"
            },
            "result": {
              "status": "passed",
              "duration": 343854294
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 1078105327
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 23535
            }
          }
        ]
      },
      {
        "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 11421
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 3584720
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 8110041497
            }
          },
          {
            "keyword": "When ",
            "name": "I write some dotfile expected to persist",
            "line": 144,
            "match": {
              "location": "features/step_definitions/usb.rb:1085"
            },
            "result": {
              "status": "passed",
              "duration": 54385262
            }
          },
          {
            "keyword": "And ",
            "name": "I shutdown Tails and wait for the computer to power off",
            "line": 145,
            "match": {
              "location": "features/step_definitions/common_steps.rb:904"
            },
            "result": {
              "status": "passed",
              "duration": 9463914702
            }
          },
          {
            "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:232"
            },
            "result": {
              "status": "passed",
              "duration": 65343366569
            }
          },
          {
            "keyword": "Then ",
            "name": "the expected persistent dotfile is present in the filesystem",
            "line": 147,
            "match": {
              "location": "features/step_definitions/usb.rb:1140"
            },
            "result": {
              "status": "passed",
              "duration": 261002061
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 1016800028
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 29791378
            }
          }
        ]
      },
      {
        "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 19657
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 3151769
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 7851726533
            }
          },
          {
            "keyword": "And ",
            "name": "I create a symlink \"/home/amnesia/Persistent\" to \"/etc\"",
            "line": 151,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1734"
            },
            "result": {
              "status": "passed",
              "duration": 56582482
            }
          },
          {
            "keyword": "When ",
            "name": "I try to enable persistence",
            "line": 152,
            "match": {
              "location": "features/step_definitions/usb.rb:690"
            },
            "result": {
              "status": "passed",
              "duration": 1162630869
            }
          },
          {
            "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:1773"
            },
            "result": {
              "status": "passed",
              "duration": 14435809479
            }
          },
          {
            "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:514"
            },
            "result": {
              "status": "passed",
              "duration": 10261257029
            }
          },
          {
            "keyword": "And ",
            "name": "all notifications have disappeared",
            "line": 155,
            "match": {
              "location": "features/step_definitions/common_steps.rb:762"
            },
            "result": {
              "status": "passed",
              "duration": 7723933935
            }
          },
          {
            "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:1796"
            },
            "result": {
              "status": "passed",
              "duration": 1435992077
            }
          },
          {
            "keyword": "And ",
            "name": "all tps features are enabled",
            "line": 157,
            "match": {
              "location": "features/step_definitions/usb.rb:798"
            },
            "result": {
              "status": "passed",
              "duration": 1180453884
            }
          },
          {
            "keyword": "And ",
            "name": "all tps features but the first one are active",
            "line": 158,
            "match": {
              "location": "features/step_definitions/usb.rb:778"
            },
            "result": {
              "status": "passed",
              "duration": 1277902054
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 1179753832
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 22412
            }
          }
        ]
      },
      {
        "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 11431
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 3819251
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 32860109405
            }
          },
          {
            "keyword": "And ",
            "name": "I enable persistence",
            "line": 162,
            "match": {
              "location": "features/step_definitions/usb.rb:721"
            },
            "result": {
              "status": "passed",
              "duration": 22268228283
            }
          },
          {
            "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:514"
            },
            "result": {
              "status": "passed",
              "duration": 10016395003
            }
          },
          {
            "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:636"
            },
            "result": {
              "status": "passed",
              "duration": 658329880
            }
          },
          {
            "keyword": "And ",
            "name": "persistence is enabled",
            "line": 165,
            "match": {
              "location": "features/step_definitions/usb.rb:851"
            },
            "result": {
              "status": "passed",
              "duration": 1721127108
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 1045379535
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 24016
            }
          }
        ]
      },
      {
        "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 13114
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 3389744
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 7373910351
            }
          },
          {
            "keyword": "And ",
            "name": "I enable persistence but something goes wrong during the LUKS header upgrade",
            "line": 169,
            "match": {
              "location": "features/step_definitions/usb.rb:726"
            },
            "result": {
              "status": "passed",
              "duration": 15266468580
            }
          },
          {
            "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:643"
            },
            "result": {
              "status": "passed",
              "duration": 702331147
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 887068948
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 23765
            }
          }
        ]
      },
      {
        "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 15509
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 4564026
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 8553324806
            }
          },
          {
            "keyword": "And ",
            "name": "I corrupt the Persistent Storage filesystem on USB drive \"__internal\"",
            "line": 174,
            "match": {
              "location": "features/step_definitions/usb.rb:1823"
            },
            "result": {
              "status": "passed",
              "duration": 10028074375
            }
          },
          {
            "keyword": "When ",
            "name": "I enable persistence",
            "line": 175,
            "match": {
              "location": "features/step_definitions/usb.rb:721"
            },
            "result": {
              "status": "passed",
              "duration": 7460623125
            }
          },
          {
            "keyword": "Then ",
            "name": "the filesystem of the Persistent Storage was repaired",
            "line": 176,
            "match": {
              "location": "features/step_definitions/usb.rb:1865"
            },
            "result": {
              "status": "passed",
              "duration": 47744096
            }
          },
          {
            "keyword": "And ",
            "name": "persistence is successfully enabled",
            "line": 177,
            "match": {
              "location": "features/step_definitions/usb.rb:701"
            },
            "result": {
              "status": "passed",
              "duration": 1854748276
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 801418261
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 23284
            }
          }
        ]
      },
      {
        "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 12353
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 3630356
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 7797396585
            }
          },
          {
            "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:1823"
            },
            "result": {
              "status": "passed",
              "duration": 10404142490
            }
          },
          {
            "keyword": "When ",
            "name": "I try to enable persistence",
            "line": 182,
            "match": {
              "location": "features/step_definitions/usb.rb:690"
            },
            "result": {
              "status": "passed",
              "duration": 1324814226
            }
          },
          {
            "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:1781"
            },
            "result": {
              "status": "passed",
              "duration": 3515886896
            }
          },
          {
            "keyword": "When ",
            "name": "I repair the filesystem of the Persistent Storage",
            "line": 184,
            "match": {
              "location": "features/step_definitions/usb.rb:1873"
            },
            "result": {
              "status": "passed",
              "duration": 1189954371
            }
          },
          {
            "keyword": "Then ",
            "name": "the Welcome Screen tells me that the filesystem was repaired successfully",
            "line": 185,
            "match": {
              "location": "features/step_definitions/usb.rb:1877"
            },
            "result": {
              "status": "passed",
              "duration": 354293651
            }
          },
          {
            "keyword": "And ",
            "name": "the filesystem of the Persistent Storage was repaired",
            "line": 186,
            "match": {
              "location": "features/step_definitions/usb.rb:1865"
            },
            "result": {
              "status": "passed",
              "duration": 53607818
            }
          },
          {
            "keyword": "When ",
            "name": "I close the filesystem repair dialog",
            "line": 187,
            "match": {
              "location": "features/step_definitions/usb.rb:1883"
            },
            "result": {
              "status": "passed",
              "duration": 1144978575
            }
          },
          {
            "keyword": "Then ",
            "name": "persistence is successfully enabled",
            "line": 188,
            "match": {
              "location": "features/step_definitions/usb.rb:701"
            },
            "result": {
              "status": "passed",
              "duration": 1056606674
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 899497202
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 23514
            }
          }
        ]
      },
      {
        "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 12413
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 3830933
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 7960844086
            }
          },
          {
            "keyword": "And ",
            "name": "the Persistent Storage filesystem is corrupted beyond what e2fsck can repair",
            "line": 193,
            "match": {
              "location": "features/step_definitions/usb.rb:1856"
            },
            "result": {
              "status": "passed",
              "duration": 69367663
            }
          },
          {
            "keyword": "When ",
            "name": "I try to enable persistence",
            "line": 194,
            "match": {
              "location": "features/step_definitions/usb.rb:690"
            },
            "result": {
              "status": "passed",
              "duration": 1224325026
            }
          },
          {
            "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:1781"
            },
            "result": {
              "status": "passed",
              "duration": 11891025044
            }
          },
          {
            "keyword": "When ",
            "name": "I repair the filesystem of the Persistent Storage",
            "line": 196,
            "match": {
              "location": "features/step_definitions/usb.rb:1873"
            },
            "result": {
              "status": "passed",
              "duration": 1287850920
            }
          },
          {
            "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:1788"
            },
            "result": {
              "status": "passed",
              "duration": 45400770
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session",
            "line": 198,
            "match": {
              "location": "features/step_definitions/common_steps.rb:514"
            },
            "result": {
              "status": "passed",
              "duration": 11139525435
            }
          },
          {
            "keyword": "And ",
            "name": "all notifications have disappeared",
            "line": 199,
            "match": {
              "location": "features/step_definitions/common_steps.rb:762"
            },
            "result": {
              "status": "passed",
              "duration": 9393785475
            }
          },
          {
            "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:1831"
            },
            "result": {
              "status": "passed",
              "duration": 163650412
            }
          },
          {
            "keyword": "And ",
            "name": "the file \"/var/lib/gdm3/post-greeter-whisperback.json\" is empty",
            "line": 206,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1021"
            },
            "result": {
              "status": "passed",
              "duration": 139746131
            }
          },
          {
            "keyword": "When ",
            "name": "I close the \"whisperback\" window",
            "line": 207,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1203"
            },
            "result": {
              "status": "passed",
              "duration": 1235937657
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Browser starts",
            "line": 208,
            "match": {
              "location": "features/step_definitions/browser.rb:502"
            },
            "result": {
              "status": "passed",
              "duration": 1478439665
            }
          },
          {
            "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": 981144934
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 1143690331
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 21260
            }
          }
        ]
      },
      {
        "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 14258
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 3291881
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 7739164280
            }
          },
          {
            "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:1823"
            },
            "result": {
              "status": "passed",
              "duration": 9792279557
            }
          },
          {
            "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": 1393514307
            }
          },
          {
            "keyword": "When ",
            "name": "I try to enable persistence",
            "line": 216,
            "match": {
              "location": "features/step_definitions/usb.rb:690"
            },
            "result": {
              "status": "passed",
              "duration": 1244673968
            }
          },
          {
            "keyword": "Then ",
            "name": "the Welcome Screen tells me that my hardware is probably failing",
            "line": 217,
            "match": {
              "location": "features/step_definitions/usb.rb:1891"
            },
            "result": {
              "status": "passed",
              "duration": 3258229655
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session",
            "line": 218,
            "match": {
              "location": "features/step_definitions/common_steps.rb:514"
            },
            "result": {
              "status": "passed",
              "duration": 10625227129
            }
          },
          {
            "keyword": "And ",
            "name": "all notifications have disappeared",
            "line": 219,
            "match": {
              "location": "features/step_definitions/common_steps.rb:762"
            },
            "result": {
              "status": "passed",
              "duration": 9576437011
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Browser starts",
            "line": 220,
            "match": {
              "location": "features/step_definitions/browser.rb:502"
            },
            "result": {
              "status": "passed",
              "duration": 1812130183
            }
          },
          {
            "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": 740995312
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 608703294
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 21872
            }
          }
        ]
      }
    ]
  },
  {
    "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 19637
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 4134150
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 8473979667
            }
          },
          {
            "keyword": "And ",
            "name": "I create a persistent partition with the default settings",
            "line": 9,
            "match": {
              "location": "features/step_definitions/usb.rb:341"
            },
            "result": {
              "status": "passed",
              "duration": 19186357354
            }
          },
          {
            "keyword": "Then ",
            "name": "the \"TorConfiguration\" tps feature is not enabled",
            "line": 10,
            "match": {
              "location": "features/step_definitions/usb.rb:822"
            },
            "result": {
              "status": "passed",
              "duration": 317421256
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 11,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 18704934
            }
          },
          {
            "keyword": "And ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 12,
            "match": {
              "location": "features/step_definitions/tor.rb:370"
            },
            "result": {
              "status": "passed",
              "duration": 5335935512
            }
          },
          {
            "keyword": "And ",
            "name": "I configure some persistent obfs4 bridges in the Tor Connection Assistant",
            "line": 13,
            "match": {
              "location": "features/step_definitions/tor.rb:616"
            },
            "result": {
              "status": "passed",
              "duration": 11151948584
            }
          },
          {
            "keyword": "And ",
            "name": "I wait until Tor is ready",
            "line": 14,
            "match": {
              "location": "features/step_definitions/common_steps.rb:705"
            },
            "result": {
              "status": "passed",
              "duration": 1290163441
            }
          },
          {
            "keyword": "Then ",
            "name": "tca.conf includes the configured bridges",
            "line": 15,
            "match": {
              "location": "features/step_definitions/tor.rb:1161"
            },
            "result": {
              "status": "passed",
              "duration": 6954646
            }
          },
          {
            "keyword": "And ",
            "name": "the \"TorConfiguration\" tps feature is enabled and active",
            "line": 16,
            "match": {
              "location": "features/step_definitions/usb.rb:842"
            },
            "result": {
              "status": "passed",
              "duration": 674007380
            }
          },
          {
            "keyword": "When ",
            "name": "I cold reboot the computer",
            "line": 17,
            "match": {
              "location": "features/step_definitions/common_steps.rb:279"
            },
            "result": {
              "status": "passed",
              "duration": 9149088834
            }
          },
          {
            "keyword": "And ",
            "name": "the computer reboots Tails",
            "line": 18,
            "match": {
              "location": "features/step_definitions/common_steps.rb:402"
            },
            "result": {
              "status": "passed",
              "duration": 38810757699
            }
          },
          {
            "keyword": "And ",
            "name": "I enable persistence",
            "line": 19,
            "match": {
              "location": "features/step_definitions/usb.rb:721"
            },
            "result": {
              "status": "passed",
              "duration": 6045205548
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 20,
            "match": {
              "location": "features/step_definitions/common_steps.rb:185"
            },
            "result": {
              "status": "passed",
              "duration": 5571896
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session",
            "line": 21,
            "match": {
              "location": "features/step_definitions/common_steps.rb:514"
            },
            "result": {
              "status": "passed",
              "duration": 9365219699
            }
          },
          {
            "keyword": "Then ",
            "name": "tca.conf includes the configured bridges",
            "line": 22,
            "match": {
              "location": "features/step_definitions/tor.rb:1161"
            },
            "result": {
              "status": "passed",
              "duration": 9049916
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 23,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 13631895
            }
          },
          {
            "keyword": "And ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 24,
            "match": {
              "location": "features/step_definitions/tor.rb:370"
            },
            "result": {
              "status": "passed",
              "duration": 5047083508
            }
          }
        ]
      },
      {
        "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:509"
            },
            "result": {
              "status": "passed",
              "duration": 1265668023
            }
          },
          {
            "keyword": "And ",
            "name": "I accept Tor Connection's offer to use my persistent bridges",
            "line": 28,
            "match": {
              "location": "features/step_definitions/tor.rb:841"
            },
            "result": {
              "status": "passed",
              "duration": 1734022734
            }
          },
          {
            "keyword": "And ",
            "name": "I click \"Connect to Tor\"",
            "line": 29,
            "match": {
              "location": "features/step_definitions/tor.rb:922"
            },
            "result": {
              "status": "passed",
              "duration": 1258984965
            }
          },
          {
            "keyword": "Then ",
            "name": "I wait until Tor is ready",
            "line": 30,
            "match": {
              "location": "features/step_definitions/common_steps.rb:705"
            },
            "result": {
              "status": "passed",
              "duration": 7171661168
            }
          },
          {
            "keyword": "And ",
            "name": "tca.conf includes the configured bridges",
            "line": 31,
            "match": {
              "location": "features/step_definitions/tor.rb:1161"
            },
            "result": {
              "status": "passed",
              "duration": 9739838
            }
          },
          {
            "keyword": "And ",
            "name": "the \"TorConfiguration\" tps feature is enabled and active",
            "line": 32,
            "match": {
              "location": "features/step_definitions/usb.rb:842"
            },
            "result": {
              "status": "passed",
              "duration": 601833902
            }
          },
          {
            "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:1020"
            },
            "result": {
              "status": "passed",
              "duration": 333531813
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 1103039106
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 51806491
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 14377
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 5432223
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 7523297913
            }
          },
          {
            "keyword": "And ",
            "name": "I create a persistent partition with the default settings",
            "line": 9,
            "match": {
              "location": "features/step_definitions/usb.rb:341"
            },
            "result": {
              "status": "passed",
              "duration": 18771196085
            }
          },
          {
            "keyword": "Then ",
            "name": "the \"TorConfiguration\" tps feature is not enabled",
            "line": 10,
            "match": {
              "location": "features/step_definitions/usb.rb:822"
            },
            "result": {
              "status": "passed",
              "duration": 304614491
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 11,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 19357538
            }
          },
          {
            "keyword": "And ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 12,
            "match": {
              "location": "features/step_definitions/tor.rb:370"
            },
            "result": {
              "status": "passed",
              "duration": 2180820598
            }
          },
          {
            "keyword": "And ",
            "name": "I configure some persistent obfs4 bridges in the Tor Connection Assistant",
            "line": 13,
            "match": {
              "location": "features/step_definitions/tor.rb:616"
            },
            "result": {
              "status": "passed",
              "duration": 11218913692
            }
          },
          {
            "keyword": "And ",
            "name": "I wait until Tor is ready",
            "line": 14,
            "match": {
              "location": "features/step_definitions/common_steps.rb:705"
            },
            "result": {
              "status": "passed",
              "duration": 1177127501
            }
          },
          {
            "keyword": "Then ",
            "name": "tca.conf includes the configured bridges",
            "line": 15,
            "match": {
              "location": "features/step_definitions/tor.rb:1161"
            },
            "result": {
              "status": "passed",
              "duration": 8507880
            }
          },
          {
            "keyword": "And ",
            "name": "the \"TorConfiguration\" tps feature is enabled and active",
            "line": 16,
            "match": {
              "location": "features/step_definitions/usb.rb:842"
            },
            "result": {
              "status": "passed",
              "duration": 548159046
            }
          },
          {
            "keyword": "When ",
            "name": "I cold reboot the computer",
            "line": 17,
            "match": {
              "location": "features/step_definitions/common_steps.rb:279"
            },
            "result": {
              "status": "passed",
              "duration": 6394975862
            }
          },
          {
            "keyword": "And ",
            "name": "the computer reboots Tails",
            "line": 18,
            "match": {
              "location": "features/step_definitions/common_steps.rb:402"
            },
            "result": {
              "status": "passed",
              "duration": 38968570495
            }
          },
          {
            "keyword": "And ",
            "name": "I enable persistence",
            "line": 19,
            "match": {
              "location": "features/step_definitions/usb.rb:721"
            },
            "result": {
              "status": "passed",
              "duration": 5778727995
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 20,
            "match": {
              "location": "features/step_definitions/common_steps.rb:185"
            },
            "result": {
              "status": "passed",
              "duration": 10007780
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session",
            "line": 21,
            "match": {
              "location": "features/step_definitions/common_steps.rb:514"
            },
            "result": {
              "status": "passed",
              "duration": 10005408490
            }
          },
          {
            "keyword": "Then ",
            "name": "tca.conf includes the configured bridges",
            "line": 22,
            "match": {
              "location": "features/step_definitions/tor.rb:1161"
            },
            "result": {
              "status": "passed",
              "duration": 8714957
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 23,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 13219922
            }
          },
          {
            "keyword": "And ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 24,
            "match": {
              "location": "features/step_definitions/tor.rb:370"
            },
            "result": {
              "status": "passed",
              "duration": 4486609110
            }
          }
        ]
      },
      {
        "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:509"
            },
            "result": {
              "status": "passed",
              "duration": 1542460018
            }
          },
          {
            "keyword": "And ",
            "name": "I accept Tor Connection's offer to use my persistent bridges",
            "line": 37,
            "match": {
              "location": "features/step_definitions/tor.rb:841"
            },
            "result": {
              "status": "passed",
              "duration": 1808982282
            }
          },
          {
            "keyword": "And ",
            "name": "I disable saving bridges to Persistent Storage",
            "line": 38,
            "match": {
              "location": "features/step_definitions/tor.rb:740"
            },
            "result": {
              "status": "passed",
              "duration": 1267377037
            }
          },
          {
            "keyword": "And ",
            "name": "I configure a direct connection in the Tor Connection Assistant",
            "line": 39,
            "match": {
              "location": "features/step_definitions/tor.rb:513"
            },
            "result": {
              "status": "passed",
              "duration": 6775842486
            }
          },
          {
            "keyword": "Then ",
            "name": "I wait until Tor is ready",
            "line": 40,
            "match": {
              "location": "features/step_definitions/common_steps.rb:705"
            },
            "result": {
              "status": "passed",
              "duration": 905070371
            }
          },
          {
            "keyword": "And ",
            "name": "tca.conf includes no bridge",
            "line": 41,
            "match": {
              "location": "features/step_definitions/tor.rb:1157"
            },
            "result": {
              "status": "passed",
              "duration": 15084849
            }
          },
          {
            "keyword": "And ",
            "name": "the \"TorConfiguration\" tps feature is not enabled and not active",
            "line": 42,
            "match": {
              "location": "features/step_definitions/usb.rb:842"
            },
            "result": {
              "status": "passed",
              "duration": 595981499
            }
          },
          {
            "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:1020"
            },
            "result": {
              "status": "passed",
              "duration": 511141157
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 986727688
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 48341692
            }
          }
        ]
      }
    ]
  },
  {
    "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 30247
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:548"
            },
            "result": {
              "status": "passed",
              "duration": 133118
            }
          }
        ],
        "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": 338956
            }
          },
          {
            "keyword": "Then ",
            "name": "no Qt5 package is installed",
            "line": 8,
            "match": {
              "location": "features/step_definitions/needed_package_updates.rb:13"
            },
            "result": {
              "status": "passed",
              "duration": 77769189
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:555"
            },
            "result": {
              "status": "passed",
              "duration": 362950
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 10841
            }
          }
        ]
      }
    ]
  },
  {
    "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 10550
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 4903974
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 7,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 84884728
            }
          },
          {
            "keyword": "And ",
            "name": "I temporarily create a 7200 MiB disk named \"temp\"",
            "line": 8,
            "match": {
              "location": "features/step_definitions/common_steps.rb:111"
            },
            "result": {
              "status": "passed",
              "duration": 12041925
            }
          },
          {
            "keyword": "And ",
            "name": "I plug USB drive \"temp\"",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:123"
            },
            "result": {
              "status": "passed",
              "duration": 1026804287
            }
          },
          {
            "keyword": "And ",
            "name": "I write the Tails USB image to disk \"temp\"",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1754"
            },
            "result": {
              "status": "passed",
              "duration": 13325625071
            }
          },
          {
            "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": 2753638266
            }
          },
          {
            "keyword": "When ",
            "name": "I start Tails from USB drive \"temp\" with network unplugged",
            "line": 12,
            "match": {
              "location": "features/step_definitions/common_steps.rb:232"
            },
            "result": {
              "status": "passed",
              "duration": 55985105357
            }
          },
          {
            "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": 353735032
            }
          },
          {
            "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": 2880895680
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session",
            "line": 15,
            "match": {
              "location": "features/step_definitions/common_steps.rb:514"
            },
            "result": {
              "status": "passed",
              "duration": 9842894635
            }
          },
          {
            "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": 1058639748
            }
          },
          {
            "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": 2565043736
            }
          },
          {
            "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": 70833
            }
          },
          {
            "keyword": "And ",
            "name": "I shutdown Tails and wait for the computer to power off",
            "line": 19,
            "match": {
              "location": "features/step_definitions/common_steps.rb:904"
            },
            "result": {
              "status": "passed",
              "duration": 8416449680
            }
          },
          {
            "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": 2688314911
            }
          },
          {
            "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": 50254
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 370679386
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 130544900
            }
          }
        ]
      }
    ]
  },
  {
    "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 19316
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 3821695
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 5,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 7791256004
            }
          },
          {
            "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": 97048928
            }
          },
          {
            "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": 57109237
            }
          },
          {
            "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": 147744472
            }
          },
          {
            "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": 112055039
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 982912150
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 25027
            }
          }
        ]
      },
      {
        "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 24045
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 5391367
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 11487198632
            }
          },
          {
            "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": 108424001
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 706211738
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 21971
            }
          }
        ]
      },
      {
        "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 14738
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 4383878
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 10022437867
            }
          },
          {
            "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 cupsd on 127.0.0.1:631 (TCP) 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 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 onion-grater on 0.0.0.0:951 (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": 5140872309
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 592901065
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 22843
            }
          }
        ]
      },
      {
        "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 16600
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 9150645
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 21,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 7050875446
            }
          },
          {
            "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": 51069636
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 639815611
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 21700
            }
          }
        ]
      },
      {
        "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 11591
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 3480464
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 8072255110
            }
          },
          {
            "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": 65667530
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 968020956
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 21380
            }
          }
        ]
      }
    ]
  },
  {
    "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 11693
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 4282047
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 8659528044
            }
          },
          {
            "keyword": "And ",
            "name": "I enable persistence",
            "line": 6,
            "match": {
              "location": "features/step_definitions/usb.rb:721"
            },
            "result": {
              "status": "passed",
              "duration": 16851405002
            }
          },
          {
            "keyword": "And ",
            "name": "I write a file \"/home/amnesia/Persistent/Passwords.kdbx\" with contents \"\"",
            "line": 7,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1726"
            },
            "result": {
              "status": "passed",
              "duration": 11819457
            }
          },
          {
            "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:1730"
            },
            "result": {
              "status": "passed",
              "duration": 96060142
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:514"
            },
            "result": {
              "status": "passed",
              "duration": 9561387917
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Secrets\" via GNOME Activities Overview",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1165"
            },
            "result": {
              "status": "passed",
              "duration": 10025084946
            }
          },
          {
            "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": 3129330516
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 1664633904
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 27942
            }
          }
        ]
      },
      {
        "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 23994
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 5010110
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 14,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6729277559
            }
          },
          {
            "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": 8300660
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Files\" via GNOME Activities Overview",
            "line": 16,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1165"
            },
            "result": {
              "status": "passed",
              "duration": 7595158859
            }
          },
          {
            "keyword": "And ",
            "name": "I open \"MyPass.kdbx\" in Files",
            "line": 17,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1942"
            },
            "result": {
              "status": "passed",
              "duration": 5921996760
            }
          },
          {
            "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": 2789225742
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 1090877379
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 24376
            }
          }
        ]
      }
    ]
  },
  {
    "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 11893
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 3651734
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 10875878754
            }
          },
          {
            "keyword": "When ",
            "name": "I request a shutdown using the system menu",
            "line": 6,
            "match": {
              "location": "features/step_definitions/common_steps.rb:919"
            },
            "result": {
              "status": "passed",
              "duration": 3188631742
            }
          },
          {
            "keyword": "Then ",
            "name": "Tails eventually shuts down",
            "line": 7,
            "match": {
              "location": "features/step_definitions/common_steps.rb:886"
            },
            "result": {
              "status": "passed",
              "duration": 6857057664
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 459644425
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 57067
            }
          }
        ]
      },
      {
        "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": 10,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 9
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 15860
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 4213930
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 10338540112
            }
          },
          {
            "keyword": "When ",
            "name": "I request a reboot using the system menu",
            "line": 12,
            "match": {
              "location": "features/step_definitions/common_steps.rb:919"
            },
            "result": {
              "status": "passed",
              "duration": 3268385438
            }
          },
          {
            "keyword": "Then ",
            "name": "Tails eventually restarts",
            "line": 13,
            "match": {
              "location": "features/step_definitions/common_steps.rb:886"
            },
            "result": {
              "status": "passed",
              "duration": 46133048007
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 4059377021
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 22402
            }
          }
        ]
      }
    ]
  },
  {
    "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 15910
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 3097306
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:523"
            },
            "result": {
              "status": "passed",
              "duration": 5318281
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 11003147407
            }
          }
        ]
      },
      {
        "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:315"
            },
            "result": {
              "status": "passed",
              "duration": 68833750
            }
          },
          {
            "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": 261878436
            }
          },
          {
            "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": 7092708449
            }
          },
          {
            "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": 1232358123
            }
          },
          {
            "keyword": "And ",
            "name": "I see that SSH is properly stream isolated",
            "line": 16,
            "match": {
              "location": "features/step_definitions/tor.rb:327"
            },
            "result": {
              "status": "passed",
              "duration": 6627353
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:531"
            },
            "result": {
              "status": "passed",
              "duration": 197206636
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 1202971419
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 77535
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 12954
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 4025073
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:523"
            },
            "result": {
              "status": "passed",
              "duration": 2154086
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 10213820619
            }
          }
        ]
      },
      {
        "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": 152458847
            }
          },
          {
            "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": 133266793
            }
          },
          {
            "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": 5845684939
            }
          },
          {
            "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": 1601323915
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:531"
            },
            "result": {
              "status": "passed",
              "duration": 160139676
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 616714867
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 632756
            }
          }
        ]
      }
    ]
  },
  {
    "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 12694
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 3218473
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:523"
            },
            "result": {
              "status": "passed",
              "duration": 1627351
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 81136985151
            }
          },
          {
            "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": 73631990
            }
          },
          {
            "keyword": "And ",
            "name": "Thunderbird is installed",
            "line": 9,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:280"
            },
            "result": {
              "status": "passed",
              "duration": 29553230726
            }
          },
          {
            "keyword": "When ",
            "name": "I start Thunderbird",
            "line": 10,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:23"
            },
            "result": {
              "status": "passed",
              "duration": 2040710338
            }
          },
          {
            "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": 772437380
            }
          }
        ]
      },
      {
        "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": 2252117917
            }
          },
          {
            "keyword": "When ",
            "name": "I open Thunderbird's Add-ons Manager",
            "line": 15,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:53"
            },
            "result": {
              "status": "passed",
              "duration": 1686102071
            }
          },
          {
            "keyword": "And ",
            "name": "I open the Extensions tab",
            "line": 16,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:67"
            },
            "result": {
              "status": "passed",
              "duration": 1052543339
            }
          },
          {
            "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": 10255929372
            }
          },
          {
            "keyword": "And ",
            "name": "no unexpected connection has leaked from Thunderbird",
            "line": 18,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:248"
            },
            "result": {
              "status": "passed",
              "duration": 562128281
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:531"
            },
            "result": {
              "status": "passed",
              "duration": 24398725482
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 1497232113
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 7883637
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 6,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 15480
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 6889074
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:523"
            },
            "result": {
              "status": "passed",
              "duration": 4297895
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 10529398432
            }
          },
          {
            "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": 52488697
            }
          },
          {
            "keyword": "And ",
            "name": "Thunderbird is installed",
            "line": 9,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:280"
            },
            "result": {
              "status": "passed",
              "duration": 29041931606
            }
          },
          {
            "keyword": "When ",
            "name": "I start Thunderbird",
            "line": 10,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:23"
            },
            "result": {
              "status": "passed",
              "duration": 2288542173
            }
          },
          {
            "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": 1091675222
            }
          }
        ]
      },
      {
        "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": 8701255649
            }
          },
          {
            "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": 181133956
            }
          },
          {
            "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": 180396095
            }
          },
          {
            "keyword": "When ",
            "name": "I accept the autoconfiguration wizard's configuration",
            "line": 24,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:132"
            },
            "result": {
              "status": "passed",
              "duration": 16269626777
            }
          },
          {
            "keyword": "And ",
            "name": "I send an email to myself",
            "line": 25,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:167"
            },
            "result": {
              "status": "passed",
              "duration": 5756921293
            }
          },
          {
            "keyword": "And ",
            "name": "I fetch my email",
            "line": 26,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:127"
            },
            "result": {
              "status": "passed",
              "duration": 1216702411
            }
          },
          {
            "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": 5143524674
            }
          },
          {
            "keyword": "And ",
            "name": "the system only established connections with my email server",
            "line": 28,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:256"
            },
            "result": {
              "status": "passed",
              "duration": 649781877
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:531"
            },
            "result": {
              "status": "passed",
              "duration": 23487672013
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 1133499623
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 8916152
            }
          }
        ]
      }
    ]
  },
  {
    "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 16070
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 11376644
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 7,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 8330372225
            }
          }
        ]
      },
      {
        "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:1165"
            },
            "result": {
              "status": "passed",
              "duration": 8713892998
            }
          },
          {
            "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:1208"
            },
            "result": {
              "status": "passed",
              "duration": 1265550111
            }
          },
          {
            "keyword": "When ",
            "name": "I plug a Wi-Fi adapter",
            "line": 12,
            "match": {
              "location": "features/step_definitions/tor.rb:1211"
            },
            "result": {
              "status": "passed",
              "duration": 242713867
            }
          },
          {
            "keyword": "Then ",
            "name": "Tor Connection suggests me to connect to Wi-Fi",
            "line": 13,
            "match": {
              "location": "features/step_definitions/tor.rb:1215"
            },
            "result": {
              "status": "passed",
              "duration": 762178025
            }
          },
          {
            "keyword": "And ",
            "name": "I click on the Wi-Fi settings",
            "line": 14,
            "match": {
              "location": "features/step_definitions/tor.rb:1220"
            },
            "result": {
              "status": "passed",
              "duration": 1225260772
            }
          },
          {
            "keyword": "And ",
            "name": "The Wi-Fi settings are displayed",
            "line": 15,
            "match": {
              "location": "features/step_definitions/tor.rb:1224"
            },
            "result": {
              "status": "passed",
              "duration": 2431797428
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 935277504
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 22733
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 6,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 12372
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 10697811
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 7,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 7024575078
            }
          }
        ]
      },
      {
        "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:137"
            },
            "result": {
              "status": "passed",
              "duration": 18120515
            }
          },
          {
            "keyword": "And ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 45,
            "match": {
              "location": "features/step_definitions/tor.rb:370"
            },
            "result": {
              "status": "passed",
              "duration": 2284610036
            }
          },
          {
            "keyword": "And ",
            "name": "I look at the hide mode but then I go back",
            "line": 46,
            "match": {
              "location": "features/step_definitions/tor.rb:517"
            },
            "result": {
              "status": "passed",
              "duration": 3698716503
            }
          },
          {
            "keyword": "And ",
            "name": "I choose to connect to Tor automatically",
            "line": 47,
            "match": {
              "location": "features/step_definitions/tor.rb:509"
            },
            "result": {
              "status": "passed",
              "duration": 1209555042
            }
          },
          {
            "keyword": "Then ",
            "name": "Tor Connection does not propose me to use Tor bridges",
            "line": 48,
            "match": {
              "location": "features/step_definitions/tor.rb:860"
            },
            "result": {
              "status": "passed",
              "duration": 93593040
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 916557113
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 24426
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 6,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 13535
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 6616512
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 7,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 7241985871
            }
          }
        ]
      },
      {
        "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:1081"
            },
            "result": {
              "status": "passed",
              "duration": 1296474797
            }
          },
          {
            "keyword": "And ",
            "name": "the network is plugged",
            "line": 52,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 17790337
            }
          },
          {
            "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": 1134052269
            }
          },
          {
            "keyword": "And ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 54,
            "match": {
              "location": "features/step_definitions/tor.rb:370"
            },
            "result": {
              "status": "passed",
              "duration": 1198372151
            }
          },
          {
            "keyword": "When ",
            "name": "I choose to connect to Tor automatically",
            "line": 55,
            "match": {
              "location": "features/step_definitions/tor.rb:509"
            },
            "result": {
              "status": "passed",
              "duration": 1196296621
            }
          },
          {
            "keyword": "And ",
            "name": "I click \"Connect to Tor\"",
            "line": 56,
            "match": {
              "location": "features/step_definitions/tor.rb:922"
            },
            "result": {
              "status": "passed",
              "duration": 1109373891
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant fails to connect to Tor",
            "line": 57,
            "match": {
              "location": "features/step_definitions/tor.rb:423"
            },
            "result": {
              "status": "passed",
              "duration": 26467867197
            }
          },
          {
            "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:435"
            },
            "result": {
              "status": "passed",
              "duration": 10686157095
            }
          },
          {
            "keyword": "And ",
            "name": "the Tor Connection Assistant knows that there might be a captive portal",
            "line": 59,
            "match": {
              "location": "features/step_definitions/tor.rb:441"
            },
            "result": {
              "status": "passed",
              "duration": 108023130
            }
          },
          {
            "keyword": "When ",
            "name": "I open the Unsafe Browser from Tor Connection",
            "line": 60,
            "match": {
              "location": "features/step_definitions/tor.rb:1176"
            },
            "result": {
              "status": "passed",
              "duration": 5850637284
            }
          },
          {
            "keyword": "And ",
            "name": "I log-in to the Captive Portal",
            "line": 61,
            "match": {
              "location": "features/step_definitions/browser.rb:471"
            },
            "result": {
              "status": "passed",
              "duration": 5221216787
            }
          },
          {
            "keyword": "And ",
            "name": "I close the Unsafe Browser",
            "line": 62,
            "match": {
              "location": "features/step_definitions/browser.rb:118"
            },
            "result": {
              "status": "passed",
              "duration": 123648969
            }
          },
          {
            "keyword": "And ",
            "name": "the Tor network and default bridges are unblocked",
            "line": 63,
            "match": {
              "location": "features/step_definitions/tor.rb:1081"
            },
            "result": {
              "status": "passed",
              "duration": 1383076620
            }
          },
          {
            "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": 99693596
            }
          },
          {
            "keyword": "And ",
            "name": "I click \"Connect to Tor\"",
            "line": 65,
            "match": {
              "location": "features/step_definitions/tor.rb:922"
            },
            "result": {
              "status": "passed",
              "duration": 1106806565
            }
          },
          {
            "keyword": "Then ",
            "name": "I wait until Tor is ready",
            "line": 66,
            "match": {
              "location": "features/step_definitions/common_steps.rb:705"
            },
            "result": {
              "status": "passed",
              "duration": 4162957013
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 1165962594
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 1071018
            }
          }
        ]
      }
    ]
  },
  {
    "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 13686
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 6387993
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 11261796204
            }
          },
          {
            "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": 89535839
            }
          },
          {
            "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": 179515288
            }
          },
          {
            "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:133"
            },
            "result": {
              "status": "passed",
              "duration": 46344099
            }
          },
          {
            "keyword": "And ",
            "name": "the firewall is configured to block all external IPv6 traffic",
            "line": 13,
            "match": {
              "location": "features/step_definitions/tor.rb:182"
            },
            "result": {
              "status": "passed",
              "duration": 53332609
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 618709686
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 21832
            }
          }
        ]
      },
      {
        "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 22872
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 20146774
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 10462931772
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 18,
            "match": {
              "location": "features/step_definitions/common_steps.rb:185"
            },
            "result": {
              "status": "passed",
              "duration": 10856138
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully start the Unsafe Browser",
            "line": 19,
            "match": {
              "location": "features/step_definitions/browser.rb:110"
            },
            "result": {
              "status": "passed",
              "duration": 7333315443
            }
          },
          {
            "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": 8078976833
            }
          },
          {
            "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": 293224959
            }
          },
          {
            "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": 411613381
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 605339555
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 62495314
            }
          }
        ]
      },
      {
        "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 69520
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 10357403
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 9928212614
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 26,
            "match": {
              "location": "features/step_definitions/common_steps.rb:185"
            },
            "result": {
              "status": "passed",
              "duration": 5819027
            }
          },
          {
            "keyword": "And ",
            "name": "I disable Tails' firewall",
            "line": 27,
            "match": {
              "location": "features/step_definitions/firewall_leaks.rb:7"
            },
            "result": {
              "status": "passed",
              "duration": 113313458
            }
          },
          {
            "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": 346304793
            }
          },
          {
            "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": 43688011
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 848951739
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 45539370
            }
          }
        ]
      },
      {
        "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 20578
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 9347662
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 10155950389
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 33,
            "match": {
              "location": "features/step_definitions/common_steps.rb:185"
            },
            "result": {
              "status": "passed",
              "duration": 7733496
            }
          },
          {
            "keyword": "And ",
            "name": "I disable Tails' firewall",
            "line": 34,
            "match": {
              "location": "features/step_definitions/firewall_leaks.rb:7"
            },
            "result": {
              "status": "passed",
              "duration": 115342623
            }
          },
          {
            "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": 196947507
            }
          },
          {
            "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": 38590406
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 708033782
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 33795508
            }
          }
        ]
      },
      {
        "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 18114
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 7895331
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 9768735401
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 40,
            "match": {
              "location": "features/step_definitions/common_steps.rb:185"
            },
            "result": {
              "status": "passed",
              "duration": 12035940
            }
          },
          {
            "keyword": "And ",
            "name": "I disable Tails' firewall",
            "line": 41,
            "match": {
              "location": "features/step_definitions/firewall_leaks.rb:7"
            },
            "result": {
              "status": "passed",
              "duration": 148020687
            }
          },
          {
            "keyword": "When ",
            "name": "I send some ICMP pings",
            "line": 42,
            "match": {
              "location": "features/step_definitions/firewall_leaks.rb:30"
            },
            "result": {
              "status": "passed",
              "duration": 4079144302
            }
          },
          {
            "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": 46217713
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 749273114
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 48120309
            }
          }
        ]
      },
      {
        "id": "the-tor-enforcement-is-effective;the-tor-enforcement-is-effective-at-blocking-untorified-tcp-connection-attempts",
        "keyword": "Scenario",
        "name": "The Tor enforcement is effective at blocking untorified TCP 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:270"
            },
            "result": {
              "status": "passed",
              "duration": 19436
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 9964888
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:523"
            },
            "result": {
              "status": "passed",
              "duration": 9840276
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 9959820800
            }
          },
          {
            "keyword": "When ",
            "name": "I open an untorified TCP connection to 1.2.3.4 on port 42",
            "line": 48,
            "match": {
              "location": "features/step_definitions/tor.rb:216"
            },
            "result": {
              "status": "passed",
              "duration": 1292972708
            }
          },
          {
            "keyword": "Then ",
            "name": "the untorified connection fails",
            "line": 49,
            "match": {
              "location": "features/step_definitions/tor.rb:246"
            },
            "result": {
              "status": "passed",
              "duration": 47048
            }
          },
          {
            "keyword": "And ",
            "name": "the untorified connection is logged as dropped by the firewall",
            "line": 50,
            "match": {
              "location": "features/step_definitions/tor.rb:260"
            },
            "result": {
              "status": "passed",
              "duration": 81188142
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:531"
            },
            "result": {
              "status": "passed",
              "duration": 180288109
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 644473417
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 74129
            }
          }
        ]
      },
      {
        "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": 53,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 52
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 13115
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 6529239
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:523"
            },
            "result": {
              "status": "passed",
              "duration": 3746492
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 10322896456
            }
          },
          {
            "keyword": "When ",
            "name": "I open an untorified UDP connection to 1.2.3.4 on port 42",
            "line": 55,
            "match": {
              "location": "features/step_definitions/tor.rb:216"
            },
            "result": {
              "status": "passed",
              "duration": 1218401360
            }
          },
          {
            "keyword": "Then ",
            "name": "the untorified connection fails",
            "line": 56,
            "match": {
              "location": "features/step_definitions/tor.rb:246"
            },
            "result": {
              "status": "passed",
              "duration": 46047
            }
          },
          {
            "keyword": "And ",
            "name": "the untorified connection is logged as dropped by the firewall",
            "line": 57,
            "match": {
              "location": "features/step_definitions/tor.rb:260"
            },
            "result": {
              "status": "passed",
              "duration": 74403235
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:531"
            },
            "result": {
              "status": "passed",
              "duration": 208929486
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 906659439
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 68930
            }
          }
        ]
      },
      {
        "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": 60,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 59
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 16862
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 7746530
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:523"
            },
            "result": {
              "status": "passed",
              "duration": 4772006
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 61,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 9831979651
            }
          },
          {
            "keyword": "When ",
            "name": "I open an untorified ICMP connection to 1.2.3.4",
            "line": 62,
            "match": {
              "location": "features/step_definitions/tor.rb:216"
            },
            "result": {
              "status": "passed",
              "duration": 5361105322
            }
          },
          {
            "keyword": "Then ",
            "name": "the untorified connection fails",
            "line": 63,
            "match": {
              "location": "features/step_definitions/tor.rb:246"
            },
            "result": {
              "status": "passed",
              "duration": 51296
            }
          },
          {
            "keyword": "And ",
            "name": "the untorified connection is logged as dropped by the firewall",
            "line": 64,
            "match": {
              "location": "features/step_definitions/tor.rb:260"
            },
            "result": {
              "status": "passed",
              "duration": 74734846
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:531"
            },
            "result": {
              "status": "passed",
              "duration": 216170749
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 791836440
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 74949
            }
          }
        ]
      },
      {
        "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": 66,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 23493
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 8067802
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 67,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6871450797
            }
          },
          {
            "keyword": "And ",
            "name": "the system DNS is using the local DNS resolver",
            "line": 68,
            "match": {
              "location": "features/step_definitions/tor.rb:271"
            },
            "result": {
              "status": "passed",
              "duration": 7735068
            }
          },
          {
            "keyword": "And ",
            "name": "the network is plugged",
            "line": 69,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 13357759
            }
          },
          {
            "keyword": "And ",
            "name": "I successfully configure Tor",
            "line": 70,
            "match": {
              "location": "features/step_definitions/common_steps.rb:675"
            },
            "result": {
              "status": "passed",
              "duration": 11765788333
            }
          },
          {
            "keyword": "Then ",
            "name": "the system DNS is still using the local DNS resolver",
            "line": 71,
            "match": {
              "location": "features/step_definitions/tor.rb:271"
            },
            "result": {
              "status": "passed",
              "duration": 5443493
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 559146448
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 21811
            }
          }
        ]
      }
    ]
  },
  {
    "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 15900
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 7736711
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:523"
            },
            "result": {
              "status": "passed",
              "duration": 5028966
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 10122251381
            }
          }
        ]
      },
      {
        "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:315"
            },
            "result": {
              "status": "passed",
              "duration": 69234418
            }
          },
          {
            "keyword": "And ",
            "name": "I re-run tails-security-check",
            "line": 12,
            "match": {
              "location": "features/step_definitions/tor.rb:346"
            },
            "result": {
              "status": "passed",
              "duration": 128509155
            }
          },
          {
            "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:327"
            },
            "result": {
              "status": "passed",
              "duration": 10061933478
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:531"
            },
            "result": {
              "status": "passed",
              "duration": 260207949
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 1200815961
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 109245
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 6,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 25708
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 9989726
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:523"
            },
            "result": {
              "status": "passed",
              "duration": 12150175
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 10372988890
            }
          }
        ]
      },
      {
        "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:315"
            },
            "result": {
              "status": "passed",
              "duration": 90632327
            }
          },
          {
            "keyword": "And ",
            "name": "I re-run htpdate",
            "line": 18,
            "match": {
              "location": "features/step_definitions/tor.rb:353"
            },
            "result": {
              "status": "passed",
              "duration": 2430563373
            }
          },
          {
            "keyword": "Then ",
            "name": "I see that htpdate is properly stream isolated",
            "line": 19,
            "match": {
              "location": "features/step_definitions/tor.rb:327"
            },
            "result": {
              "status": "passed",
              "duration": 8088381
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:531"
            },
            "result": {
              "status": "passed",
              "duration": 267961083
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 632390551
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 76053
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 6,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 12824
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 7613271
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:523"
            },
            "result": {
              "status": "passed",
              "duration": 9452277
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 9994375216
            }
          }
        ]
      },
      {
        "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:315"
            },
            "result": {
              "status": "passed",
              "duration": 61155614
            }
          },
          {
            "keyword": "And ",
            "name": "I re-run tails-upgrade-frontend-wrapper",
            "line": 24,
            "match": {
              "location": "features/step_definitions/tor.rb:360"
            },
            "result": {
              "status": "passed",
              "duration": 33356219661
            }
          },
          {
            "keyword": "Then ",
            "name": "I see that tails-upgrade-frontend-wrapper is properly stream isolated",
            "line": 25,
            "match": {
              "location": "features/step_definitions/tor.rb:327"
            },
            "result": {
              "status": "passed",
              "duration": 12412307
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:531"
            },
            "result": {
              "status": "passed",
              "duration": 264916583
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 1541248042
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 85779
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 6,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 11803
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 7398619
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:523"
            },
            "result": {
              "status": "passed",
              "duration": 5356751
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 10102205165
            }
          }
        ]
      },
      {
        "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:315"
            },
            "result": {
              "status": "passed",
              "duration": 48378583
            }
          },
          {
            "keyword": "And ",
            "name": "I start the Tor Browser",
            "line": 29,
            "match": {
              "location": "features/step_definitions/browser.rb:493"
            },
            "result": {
              "status": "passed",
              "duration": 11203402081
            }
          },
          {
            "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": 10812216943
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Browser loads the Tails homepage",
            "line": 31,
            "match": {
              "location": "features/step_definitions/browser.rb:602"
            },
            "result": {
              "status": "passed",
              "duration": 383756061
            }
          },
          {
            "keyword": "And ",
            "name": "I see that Tor Browser is properly stream isolated",
            "line": 32,
            "match": {
              "location": "features/step_definitions/tor.rb:327"
            },
            "result": {
              "status": "passed",
              "duration": 42070870
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:531"
            },
            "result": {
              "status": "passed",
              "duration": 815810257
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 1510187565
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 232236
            }
          }
        ]
      }
    ]
  },
  {
    "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 14297
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 10111012
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 10072954453
            }
          },
          {
            "keyword": "And ",
            "name": "a web server is running on the LAN",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1291"
            },
            "result": {
              "status": "passed",
              "duration": 1044472959
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:185"
            },
            "result": {
              "status": "passed",
              "duration": 3701088
            }
          },
          {
            "keyword": "When ",
            "name": "I start the Tor Browser",
            "line": 11,
            "match": {
              "location": "features/step_definitions/browser.rb:493"
            },
            "result": {
              "status": "passed",
              "duration": 8989114956
            }
          },
          {
            "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:1360"
            },
            "result": {
              "status": "passed",
              "duration": 4261670215
            }
          },
          {
            "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": 108567577
            }
          },
          {
            "keyword": "And ",
            "name": "no traffic was sent to the web server on the LAN",
            "line": 14,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1364"
            },
            "result": {
              "status": "passed",
              "duration": 18428835
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 834182036
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 53310669
            }
          }
        ]
      },
      {
        "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 18675
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 9170250
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:523"
            },
            "result": {
              "status": "passed",
              "duration": 10856609
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 10186188280
            }
          },
          {
            "keyword": "Then ",
            "name": "the live user's Downloads directory exists",
            "line": 19,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1268"
            },
            "result": {
              "status": "passed",
              "duration": 54562596
            }
          },
          {
            "keyword": "And ",
            "name": "there is a GNOME bookmark for the Downloads directory",
            "line": 20,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1272"
            },
            "result": {
              "status": "passed",
              "duration": 15073415881
            }
          },
          {
            "keyword": "When ",
            "name": "I start the Tor Browser",
            "line": 21,
            "match": {
              "location": "features/step_definitions/browser.rb:493"
            },
            "result": {
              "status": "passed",
              "duration": 9770953968
            }
          },
          {
            "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:650"
            },
            "result": {
              "status": "passed",
              "duration": 4402173694
            }
          },
          {
            "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:639"
            },
            "result": {
              "status": "passed",
              "duration": 3159768779
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:531"
            },
            "result": {
              "status": "passed",
              "duration": 232980113
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 897895205
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 76834
            }
          }
        ]
      },
      {
        "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 13717
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 7368632
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:523"
            },
            "result": {
              "status": "passed",
              "duration": 6909822
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 9961631290
            }
          },
          {
            "keyword": "When ",
            "name": "I start the Tor Browser",
            "line": 28,
            "match": {
              "location": "features/step_definitions/browser.rb:493"
            },
            "result": {
              "status": "passed",
              "duration": 9548745571
            }
          },
          {
            "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": 12492114273
            }
          },
          {
            "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": 429739632
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:531"
            },
            "result": {
              "status": "passed",
              "duration": 675139286
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 692002587
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 399048
            }
          }
        ]
      },
      {
        "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 30647
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 10044879
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:523"
            },
            "result": {
              "status": "passed",
              "duration": 4253363
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 9976388840
            }
          },
          {
            "keyword": "When ",
            "name": "I start the Tor Browser",
            "line": 35,
            "match": {
              "location": "features/step_definitions/browser.rb:493"
            },
            "result": {
              "status": "passed",
              "duration": 9526695555
            }
          },
          {
            "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": 37578045850
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:531"
            },
            "result": {
              "status": "passed",
              "duration": 7937279029
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 1176744859
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 2930133
            }
          }
        ]
      },
      {
        "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 11651
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 6761494
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:523"
            },
            "result": {
              "status": "passed",
              "duration": 10079584
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 10024543277
            }
          },
          {
            "keyword": "When ",
            "name": "I start the Tor Browser",
            "line": 41,
            "match": {
              "location": "features/step_definitions/browser.rb:493"
            },
            "result": {
              "status": "passed",
              "duration": 8707139504
            }
          },
          {
            "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": 7324797775
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:531"
            },
            "result": {
              "status": "passed",
              "duration": 257967281
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 1143307279
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 72256
            }
          }
        ]
      },
      {
        "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 24987
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 6481640
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 10113636596
            }
          },
          {
            "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:1038"
            },
            "result": {
              "status": "passed",
              "duration": 64610928
            }
          },
          {
            "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:1038"
            },
            "result": {
              "status": "passed",
              "duration": 42262755
            }
          },
          {
            "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:1038"
            },
            "result": {
              "status": "passed",
              "duration": 45882180
            }
          },
          {
            "keyword": "Then ",
            "name": "the file \"/home/amnesia/.gnupg/synaptic.html\" exists",
            "line": 49,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1007"
            },
            "result": {
              "status": "passed",
              "duration": 43299126
            }
          },
          {
            "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:1007"
            },
            "result": {
              "status": "passed",
              "duration": 60912193
            }
          },
          {
            "keyword": "And ",
            "name": "the file \"/live/overlay/rw/home/amnesia/.gnupg/synaptic.html\" exists",
            "line": 51,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1007"
            },
            "result": {
              "status": "passed",
              "duration": 41516625
            }
          },
          {
            "keyword": "And ",
            "name": "the file \"/tmp/synaptic.html\" exists",
            "line": 52,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1007"
            },
            "result": {
              "status": "passed",
              "duration": 42804409
            }
          },
          {
            "keyword": "Given ",
            "name": "I start monitoring the AppArmor log of \"torbrowser_firefox\"",
            "line": 53,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1380"
            },
            "result": {
              "status": "passed",
              "duration": 81059091
            }
          },
          {
            "keyword": "When ",
            "name": "I start the Tor Browser",
            "line": 54,
            "match": {
              "location": "features/step_definitions/browser.rb:493"
            },
            "result": {
              "status": "passed",
              "duration": 8415657372
            }
          },
          {
            "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": 4851618275
            }
          },
          {
            "keyword": "Then ",
            "name": "I see \"TorBrowserSynapticManual.png\" after at most 5 seconds",
            "line": 56,
            "match": {
              "location": "features/step_definitions/common_steps.rb:798"
            },
            "result": {
              "status": "passed",
              "duration": 520592521
            }
          },
          {
            "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:1393"
            },
            "result": {
              "status": "passed",
              "duration": 58896274
            }
          },
          {
            "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": 4237124492
            }
          },
          {
            "keyword": "Then ",
            "name": "I do not see \"TorBrowserSynapticManual.png\" after at most 5 seconds",
            "line": 59,
            "match": {
              "location": "features/step_definitions/common_steps.rb:798"
            },
            "result": {
              "status": "passed",
              "duration": 380116430
            }
          },
          {
            "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": 4332073851
            }
          },
          {
            "keyword": "Then ",
            "name": "I do not see \"TorBrowserSynapticManual.png\" after at most 5 seconds",
            "line": 61,
            "match": {
              "location": "features/step_definitions/common_steps.rb:798"
            },
            "result": {
              "status": "passed",
              "duration": 364545902
            }
          },
          {
            "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": 4084101081
            }
          },
          {
            "keyword": "Then ",
            "name": "I do not see \"TorBrowserSynapticManual.png\" after at most 5 seconds",
            "line": 63,
            "match": {
              "location": "features/step_definitions/common_steps.rb:798"
            },
            "result": {
              "status": "passed",
              "duration": 452231214
            }
          },
          {
            "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": 4513993468
            }
          },
          {
            "keyword": "Then ",
            "name": "I do not see \"TorBrowserSynapticManual.png\" after at most 5 seconds",
            "line": 65,
            "match": {
              "location": "features/step_definitions/common_steps.rb:798"
            },
            "result": {
              "status": "passed",
              "duration": 570390848
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 1172019934
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 24236
            }
          }
        ]
      },
      {
        "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 17102
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 7018868
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 10084041547
            }
          },
          {
            "keyword": "When ",
            "name": "I start the Tor Browser",
            "line": 69,
            "match": {
              "location": "features/step_definitions/browser.rb:493"
            },
            "result": {
              "status": "passed",
              "duration": 9310592293
            }
          },
          {
            "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": 858333312
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 1053656888
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 24016
            }
          }
        ]
      },
      {
        "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 16360
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 7463912
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:523"
            },
            "result": {
              "status": "passed",
              "duration": 9093074
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 10099979800
            }
          },
          {
            "keyword": "When ",
            "name": "I start the Tor Browser",
            "line": 75,
            "match": {
              "location": "features/step_definitions/browser.rb:493"
            },
            "result": {
              "status": "passed",
              "duration": 9283840196
            }
          },
          {
            "keyword": "When ",
            "name": "I open the address \"https://example.com/\" in the Tor Browser",
            "line": 76,
            "match": {
              "location": "features/step_definitions/browser.rb:211"
            },
            "result": {
              "status": "passed",
              "duration": 7210079380
            }
          },
          {
            "keyword": "Then ",
            "name": "Tor Browser displays a \"Example Domain\" heading on the \"Example Domain\" page",
            "line": 77,
            "match": {
              "location": "features/step_definitions/browser.rb:389"
            },
            "result": {
              "status": "passed",
              "duration": 114731332
            }
          },
          {
            "keyword": "And ",
            "name": "the Tor Browser has 2 tabs open",
            "line": 78,
            "match": {
              "location": "features/step_definitions/browser.rb:671"
            },
            "result": {
              "status": "passed",
              "duration": 68675678
            }
          },
          {
            "keyword": "When ",
            "name": "I request a new identity in Tor Browser",
            "line": 79,
            "match": {
              "location": "features/step_definitions/browser.rb:665"
            },
            "result": {
              "status": "passed",
              "duration": 3172825302
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Browser loads about:tor",
            "line": 80,
            "match": {
              "location": "features/step_definitions/browser.rb:522"
            },
            "result": {
              "status": "passed",
              "duration": 2181803300
            }
          },
          {
            "keyword": "And ",
            "name": "the Tor Browser has 1 tab open",
            "line": 81,
            "match": {
              "location": "features/step_definitions/browser.rb:671"
            },
            "result": {
              "status": "passed",
              "duration": 86426562
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:531"
            },
            "result": {
              "status": "passed",
              "duration": 253407622
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 1230486186
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 71684
            }
          }
        ]
      },
      {
        "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 13455
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 6106517
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 10195376566
            }
          },
          {
            "keyword": "When ",
            "name": "I start the Tor Browser",
            "line": 88,
            "match": {
              "location": "features/step_definitions/browser.rb:493"
            },
            "result": {
              "status": "passed",
              "duration": 8598295272
            }
          },
          {
            "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": 10558149653
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Browser loads the Tails homepage",
            "line": 90,
            "match": {
              "location": "features/step_definitions/browser.rb:602"
            },
            "result": {
              "status": "passed",
              "duration": 369719144
            }
          },
          {
            "keyword": "And ",
            "name": "Tor Browser's circuit view is working",
            "line": 91,
            "match": {
              "location": "features/step_definitions/browser.rb:483"
            },
            "result": {
              "status": "passed",
              "duration": 1346987157
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 1141794066
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 24575
            }
          }
        ]
      },
      {
        "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 18665
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 7933312
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 9932552193
            }
          },
          {
            "keyword": "When ",
            "name": "I start the Tor Browser",
            "line": 95,
            "match": {
              "location": "features/step_definitions/browser.rb:493"
            },
            "result": {
              "status": "passed",
              "duration": 9193847547
            }
          },
          {
            "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": 6966613614
            }
          },
          {
            "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": 97148072
            }
          },
          {
            "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": 7092908864
            }
          },
          {
            "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": 193749211
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 775345693
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 21780
            }
          }
        ]
      },
      {
        "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 13145
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 7538653
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 8323873256
            }
          },
          {
            "keyword": "And ",
            "name": "the network is plugged",
            "line": 103,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 32284421
            }
          },
          {
            "keyword": "And ",
            "name": "I successfully configure Tor",
            "line": 104,
            "match": {
              "location": "features/step_definitions/common_steps.rb:675"
            },
            "result": {
              "status": "passed",
              "duration": 10304680958
            }
          },
          {
            "keyword": "And ",
            "name": "available upgrades have been checked",
            "line": 105,
            "match": {
              "location": "features/step_definitions/common_steps.rb:758"
            },
            "result": {
              "status": "passed",
              "duration": 2164722863
            }
          },
          {
            "keyword": "And ",
            "name": "all notifications have disappeared",
            "line": 106,
            "match": {
              "location": "features/step_definitions/common_steps.rb:762"
            },
            "result": {
              "status": "passed",
              "duration": 7006484959
            }
          },
          {
            "keyword": "And ",
            "name": "there is a GNOME bookmark for the Persistent directory",
            "line": 107,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1272"
            },
            "result": {
              "status": "passed",
              "duration": 14580819985
            }
          },
          {
            "keyword": "When ",
            "name": "I start the Tor Browser",
            "line": 108,
            "match": {
              "location": "features/step_definitions/browser.rb:493"
            },
            "result": {
              "status": "passed",
              "duration": 10904806040
            }
          },
          {
            "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": 11971944766
            }
          },
          {
            "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": 403148610
            }
          },
          {
            "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": 10363892430
            }
          },
          {
            "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": 385003927
            }
          },
          {
            "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:639"
            },
            "result": {
              "status": "passed",
              "duration": 9087849415
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 1115308838
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 23625
            }
          }
        ]
      },
      {
        "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 20860
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 8461993
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 123,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6973853879
            }
          },
          {
            "keyword": "Then ",
            "name": "the live user's Documents directory exists",
            "line": 123,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1268"
            },
            "result": {
              "status": "passed",
              "duration": 57629663
            }
          },
          {
            "keyword": "And ",
            "name": "there is a GNOME bookmark for the Documents directory",
            "line": 123,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1272"
            },
            "result": {
              "status": "passed",
              "duration": 15311737393
            }
          },
          {
            "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": 12109214493
            }
          },
          {
            "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:650"
            },
            "result": {
              "status": "passed",
              "duration": 7574669355
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 972340449
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 23003
            }
          }
        ]
      },
      {
        "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 14207
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 7370255
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 124,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6963168470
            }
          },
          {
            "keyword": "Then ",
            "name": "the live user's Downloads directory exists",
            "line": 124,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1268"
            },
            "result": {
              "status": "passed",
              "duration": 70676030
            }
          },
          {
            "keyword": "And ",
            "name": "there is a GNOME bookmark for the Downloads directory",
            "line": 124,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1272"
            },
            "result": {
              "status": "passed",
              "duration": 15354104948
            }
          },
          {
            "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": 11796919664
            }
          },
          {
            "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:650"
            },
            "result": {
              "status": "passed",
              "duration": 7086062385
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 962649279
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 22873
            }
          }
        ]
      },
      {
        "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 11382
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 6378166
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 125,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6759031571
            }
          },
          {
            "keyword": "Then ",
            "name": "the live user's Music directory exists",
            "line": 125,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1268"
            },
            "result": {
              "status": "passed",
              "duration": 74397325
            }
          },
          {
            "keyword": "And ",
            "name": "there is a GNOME bookmark for the Music directory",
            "line": 125,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1272"
            },
            "result": {
              "status": "passed",
              "duration": 15159982517
            }
          },
          {
            "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": 12427860593
            }
          },
          {
            "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:650"
            },
            "result": {
              "status": "passed",
              "duration": 7058590372
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 1056907444
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 61975
            }
          }
        ]
      },
      {
        "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 17553
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 7613122
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 126,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 7077380476
            }
          },
          {
            "keyword": "Then ",
            "name": "the live user's Pictures directory exists",
            "line": 126,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1268"
            },
            "result": {
              "status": "passed",
              "duration": 116518946
            }
          },
          {
            "keyword": "And ",
            "name": "there is a GNOME bookmark for the Pictures directory",
            "line": 126,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1272"
            },
            "result": {
              "status": "passed",
              "duration": 14980313346
            }
          },
          {
            "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": 11638439691
            }
          },
          {
            "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:650"
            },
            "result": {
              "status": "passed",
              "duration": 7367798151
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 667007848
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 22763
            }
          }
        ]
      },
      {
        "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 17262
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 7654359
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 127,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 7194724374
            }
          },
          {
            "keyword": "Then ",
            "name": "the live user's Videos directory exists",
            "line": 127,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1268"
            },
            "result": {
              "status": "passed",
              "duration": 93838656
            }
          },
          {
            "keyword": "And ",
            "name": "there is a GNOME bookmark for the Videos directory",
            "line": 127,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1272"
            },
            "result": {
              "status": "passed",
              "duration": 15243742148
            }
          },
          {
            "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": 12648939019
            }
          },
          {
            "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:650"
            },
            "result": {
              "status": "passed",
              "duration": 8227139120
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 918284014
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 29174
            }
          }
        ]
      },
      {
        "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 27491
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 9148090
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 7634844431
            }
          },
          {
            "keyword": "And ",
            "name": "all tps features are active",
            "line": 131,
            "match": {
              "location": "features/step_definitions/usb.rb:778"
            },
            "result": {
              "status": "passed",
              "duration": 1488186116
            }
          },
          {
            "keyword": "And ",
            "name": "all persistent filesystems have safe access rights",
            "line": 132,
            "match": {
              "location": "features/step_definitions/usb.rb:992"
            },
            "result": {
              "status": "passed",
              "duration": 174940114
            }
          },
          {
            "keyword": "And ",
            "name": "all persistence configuration files have safe access rights",
            "line": 133,
            "match": {
              "location": "features/step_definitions/usb.rb:1009"
            },
            "result": {
              "status": "passed",
              "duration": 380872787
            }
          },
          {
            "keyword": "And ",
            "name": "all persistent directories have safe access rights",
            "line": 134,
            "match": {
              "location": "features/step_definitions/usb.rb:1037"
            },
            "result": {
              "status": "passed",
              "duration": 2169570739
            }
          },
          {
            "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": 15412675388
            }
          },
          {
            "keyword": "And ",
            "name": "I add a bookmark to eff.org in the Tor Browser",
            "line": 136,
            "match": {
              "location": "features/step_definitions/browser.rb:622"
            },
            "result": {
              "status": "passed",
              "duration": 8480946113
            }
          },
          {
            "keyword": "And ",
            "name": "I cold reboot the computer",
            "line": 137,
            "match": {
              "location": "features/step_definitions/common_steps.rb:279"
            },
            "result": {
              "status": "passed",
              "duration": 10569261931
            }
          },
          {
            "keyword": "And ",
            "name": "the computer reboots Tails",
            "line": 138,
            "match": {
              "location": "features/step_definitions/common_steps.rb:402"
            },
            "result": {
              "status": "passed",
              "duration": 38875402097
            }
          },
          {
            "keyword": "And ",
            "name": "I enable persistence",
            "line": 139,
            "match": {
              "location": "features/step_definitions/usb.rb:721"
            },
            "result": {
              "status": "passed",
              "duration": 7196301651
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session",
            "line": 140,
            "match": {
              "location": "features/step_definitions/common_steps.rb:514"
            },
            "result": {
              "status": "passed",
              "duration": 10977046715
            }
          },
          {
            "keyword": "And ",
            "name": "all notifications have disappeared",
            "line": 141,
            "match": {
              "location": "features/step_definitions/common_steps.rb:762"
            },
            "result": {
              "status": "passed",
              "duration": 7940533368
            }
          },
          {
            "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": 9010309983
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Browser has a bookmark to eff.org",
            "line": 143,
            "match": {
              "location": "features/step_definitions/browser.rb:634"
            },
            "result": {
              "status": "passed",
              "duration": 571374568
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 972358912
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 13915645
            }
          }
        ]
      }
    ]
  },
  {
    "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 18474
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 8248573
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:523"
            },
            "result": {
              "status": "passed",
              "duration": 6377575
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 10072167423
            }
          }
        ]
      },
      {
        "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": 6038852031
            }
          },
          {
            "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": 167680181
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:531"
            },
            "result": {
              "status": "passed",
              "duration": 223419427
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 694007939
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 93545
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 13004
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 8666995
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:523"
            },
            "result": {
              "status": "passed",
              "duration": 11153788
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 10073498552
            }
          }
        ]
      },
      {
        "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": 210471596
            }
          },
          {
            "keyword": "When ",
            "name": "I clone the Git repository \"ssh://gitolite3@lizard.tails.boum.org:3004/myprivatekeyispublic/testing.git\" in Console",
            "line": 16,
            "match": {
              "location": "features/step_definitions/git.rb:1"
            },
            "result": {
              "status": "passed",
              "duration": 9216662651
            }
          },
          {
            "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": 194045338
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:531"
            },
            "result": {
              "status": "passed",
              "duration": 211364535
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 868755066
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 98704
            }
          }
        ]
      }
    ]
  },
  {
    "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 22473
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 11359383
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:523"
            },
            "result": {
              "status": "passed",
              "duration": 11292260
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 10040005020
            }
          }
        ]
      },
      {
        "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": 257881812
            }
          },
          {
            "keyword": "Then ",
            "name": "the wget command is successful",
            "line": 9,
            "match": {
              "location": "features/step_definitions/torified_misc.rb:19"
            },
            "result": {
              "status": "passed",
              "duration": 46217
            }
          },
          {
            "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": 19066
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:531"
            },
            "result": {
              "status": "passed",
              "duration": 172041289
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 796696597
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 97873
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 4,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 14598
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 8330215
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:523"
            },
            "result": {
              "status": "passed",
              "duration": 11572483
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 10306100641
            }
          }
        ]
      },
      {
        "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": 229721094
            }
          },
          {
            "keyword": "Then ",
            "name": "the curl command is successful",
            "line": 14,
            "match": {
              "location": "features/step_definitions/torified_misc.rb:19"
            },
            "result": {
              "status": "passed",
              "duration": 51768
            }
          },
          {
            "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": 32582
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:531"
            },
            "result": {
              "status": "passed",
              "duration": 262741481
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 1002853047
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 70362
            }
          }
        ]
      }
    ]
  },
  {
    "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 16481
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 8585041
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 8275440389
            }
          },
          {
            "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": 13482212
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:514"
            },
            "result": {
              "status": "passed",
              "duration": 12703055318
            }
          },
          {
            "keyword": "And ",
            "name": "all notifications have disappeared",
            "line": 11,
            "match": {
              "location": "features/step_definitions/common_steps.rb:762"
            },
            "result": {
              "status": "passed",
              "duration": 7711554370
            }
          },
          {
            "keyword": "And ",
            "name": "I unblock tails-uefi-ca-notify",
            "line": 12,
            "match": {
              "location": "features/step_definitions/hardware.rb:152"
            },
            "result": {
              "status": "passed",
              "duration": 46494587
            }
          },
          {
            "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:629"
            },
            "result": {
              "status": "passed",
              "duration": 735560444
            }
          },
          {
            "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": 15440367202
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 1548298413
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 23404
            }
          }
        ]
      },
      {
        "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 16922
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 8557021
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 7596825246
            }
          },
          {
            "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": 18938149
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session",
            "line": 19,
            "match": {
              "location": "features/step_definitions/common_steps.rb:514"
            },
            "result": {
              "status": "passed",
              "duration": 13074748388
            }
          },
          {
            "keyword": "And ",
            "name": "all notifications have disappeared",
            "line": 20,
            "match": {
              "location": "features/step_definitions/common_steps.rb:762"
            },
            "result": {
              "status": "passed",
              "duration": 8019093535
            }
          },
          {
            "keyword": "And ",
            "name": "I unblock tails-uefi-ca-notify",
            "line": 21,
            "match": {
              "location": "features/step_definitions/hardware.rb:152"
            },
            "result": {
              "status": "passed",
              "duration": 55490991
            }
          },
          {
            "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:1946"
            },
            "result": {
              "status": "passed",
              "duration": 1123090265
            }
          },
          {
            "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:629"
            },
            "result": {
              "status": "passed",
              "duration": 10681641364
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 1383458778
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 26019
            }
          }
        ]
      }
    ]
  },
  {
    "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 19055
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 10595682
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 7459993569
            }
          },
          {
            "keyword": "And ",
            "name": "I disable the Unsafe Browser",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:585"
            },
            "result": {
              "status": "passed",
              "duration": 7940463847
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:514"
            },
            "result": {
              "status": "passed",
              "duration": 11926849936
            }
          },
          {
            "keyword": "And ",
            "name": "the network is plugged",
            "line": 11,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 17723936
            }
          },
          {
            "keyword": "And ",
            "name": "all notifications have disappeared",
            "line": 12,
            "match": {
              "location": "features/step_definitions/common_steps.rb:762"
            },
            "result": {
              "status": "passed",
              "duration": 8155597184
            }
          },
          {
            "keyword": "When ",
            "name": "I try to start the Unsafe Browser",
            "line": 13,
            "match": {
              "location": "features/step_definitions/browser.rb:106"
            },
            "result": {
              "status": "passed",
              "duration": 79798097
            }
          },
          {
            "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": 1262518132
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 1464980481
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 26801
            }
          }
        ]
      },
      {
        "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 146514
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 7426943
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 10119766768
            }
          },
          {
            "keyword": "And ",
            "name": "a web server is running on the LAN",
            "line": 18,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1291"
            },
            "result": {
              "status": "passed",
              "duration": 1042528967
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully start the Unsafe Browser",
            "line": 19,
            "match": {
              "location": "features/step_definitions/browser.rb:110"
            },
            "result": {
              "status": "passed",
              "duration": 7221932916
            }
          },
          {
            "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:1360"
            },
            "result": {
              "status": "passed",
              "duration": 4780381526
            }
          },
          {
            "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": 219923140
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 948795850
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 1233391
            }
          }
        ]
      },
      {
        "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 14396
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 14531721
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 10307592892
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully start the Unsafe Browser",
            "line": 26,
            "match": {
              "location": "features/step_definitions/browser.rb:110"
            },
            "result": {
              "status": "passed",
              "duration": 7605696853
            }
          },
          {
            "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": 193854493
            }
          },
          {
            "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": 442909182
            }
          },
          {
            "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": 693622139
            }
          },
          {
            "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": 4658375898
            }
          },
          {
            "keyword": "And ",
            "name": "the Unsafe Browser has no bookmarks",
            "line": 31,
            "match": {
              "location": "features/step_definitions/unsafe_browser.rb:11"
            },
            "result": {
              "status": "passed",
              "duration": 4228712143
            }
          },
          {
            "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": 697292269
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 998044003
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 27531
            }
          }
        ]
      },
      {
        "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 22602
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 10714574
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 10178265981
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully start the Unsafe Browser",
            "line": 37,
            "match": {
              "location": "features/step_definitions/browser.rb:110"
            },
            "result": {
              "status": "passed",
              "duration": 7659656028
            }
          },
          {
            "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": 7178595312
            }
          },
          {
            "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": 383213023
            }
          },
          {
            "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": 49430241
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 824907555
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 22482
            }
          }
        ]
      },
      {
        "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 13646
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 6820625
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 10154261557
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully start the Unsafe Browser",
            "line": 45,
            "match": {
              "location": "features/step_definitions/browser.rb:110"
            },
            "result": {
              "status": "passed",
              "duration": 7704165171
            }
          },
          {
            "keyword": "And ",
            "name": "I close the Unsafe Browser",
            "line": 46,
            "match": {
              "location": "features/step_definitions/browser.rb:118"
            },
            "result": {
              "status": "passed",
              "duration": 125532428
            }
          },
          {
            "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:629"
            },
            "result": {
              "status": "passed",
              "duration": 1233502500
            }
          },
          {
            "keyword": "And ",
            "name": "the Unsafe Browser chroot is torn down",
            "line": 48,
            "match": {
              "location": "features/step_definitions/browser.rb:317"
            },
            "result": {
              "status": "passed",
              "duration": 86142165
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 980564183
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 22041
            }
          }
        ]
      },
      {
        "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 19597
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 9854544
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 10147651190
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully start the Unsafe Browser",
            "line": 53,
            "match": {
              "location": "features/step_definitions/browser.rb:110"
            },
            "result": {
              "status": "passed",
              "duration": 7400350985
            }
          },
          {
            "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:1370"
            },
            "result": {
              "status": "passed",
              "duration": 10000147740
            }
          },
          {
            "keyword": "And ",
            "name": "I try to start the Unsafe Browser",
            "line": 59,
            "match": {
              "location": "features/step_definitions/browser.rb:106"
            },
            "result": {
              "status": "passed",
              "duration": 71340447
            }
          },
          {
            "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": 1437166886
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 1344587063
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 22733
            }
          }
        ]
      },
      {
        "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 17874
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 7927450
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 10250479758
            }
          },
          {
            "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": 136724708
            }
          },
          {
            "keyword": "And ",
            "name": "I successfully start the Unsafe Browser",
            "line": 65,
            "match": {
              "location": "features/step_definitions/browser.rb:110"
            },
            "result": {
              "status": "passed",
              "duration": 7529797281
            }
          },
          {
            "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": 4182254895
            }
          },
          {
            "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": 132140024
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 1071695836
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 22542
            }
          }
        ]
      },
      {
        "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 16461
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 8970607
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:523"
            },
            "result": {
              "status": "passed",
              "duration": 5787569
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 10027413412
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 72,
            "match": {
              "location": "features/step_definitions/common_steps.rb:185"
            },
            "result": {
              "status": "passed",
              "duration": 6002964
            }
          },
          {
            "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": 34037227
            }
          },
          {
            "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": 6510265
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully start the Unsafe Browser",
            "line": 75,
            "match": {
              "location": "features/step_definitions/browser.rb:110"
            },
            "result": {
              "status": "passed",
              "duration": 7898505911
            }
          },
          {
            "keyword": "And ",
            "name": "I wait 120 seconds",
            "line": 76,
            "output": [
              "Slept for 120 seconds"
            ],
            "match": {
              "location": "features/step_definitions/common_steps.rb:1370"
            },
            "result": {
              "status": "passed",
              "duration": 120000162918
            }
          },
          {
            "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": 517983438
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:531"
            },
            "result": {
              "status": "passed",
              "duration": 354967128
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 1013079000
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 59999325
            }
          }
        ]
      },
      {
        "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 35066
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 9428755
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 10209823630
            }
          },
          {
            "keyword": "And ",
            "name": "the network is unplugged",
            "line": 82,
            "match": {
              "location": "features/step_definitions/common_steps.rb:151"
            },
            "result": {
              "status": "passed",
              "duration": 21627222
            }
          },
          {
            "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:1370"
            },
            "result": {
              "status": "passed",
              "duration": 10000492027
            }
          },
          {
            "keyword": "When ",
            "name": "I try to start the Unsafe Browser",
            "line": 85,
            "match": {
              "location": "features/step_definitions/browser.rb:106"
            },
            "result": {
              "status": "passed",
              "duration": 213051275
            }
          },
          {
            "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": 4843132430
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 1197397995
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 21650
            }
          }
        ]
      }
    ]
  },
  {
    "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 13766
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 7085442
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6926862859
            }
          }
        ]
      },
      {
        "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": 10692515014
            }
          },
          {
            "keyword": "And ",
            "name": "I cancel the GNOME authentication prompt",
            "line": 14,
            "match": {
              "location": "features/step_definitions/common_steps.rb:851"
            },
            "result": {
              "status": "passed",
              "duration": 1372951345
            }
          },
          {
            "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": 5009232232
            }
          },
          {
            "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": 1697192937
            }
          },
          {
            "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": 348254296
            }
          },
          {
            "keyword": "When ",
            "name": "I lock the currently opened VeraCrypt volume",
            "line": 18,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:326"
            },
            "result": {
              "status": "passed",
              "duration": 1315802144
            }
          },
          {
            "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": 95401298
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 819883437
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 289402
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 12975
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 9085773
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 7008944981
            }
          }
        ]
      },
      {
        "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": 20110150000
            }
          },
          {
            "keyword": "And ",
            "name": "I cancel the GNOME authentication prompt",
            "line": 23,
            "match": {
              "location": "features/step_definitions/common_steps.rb:851"
            },
            "result": {
              "status": "passed",
              "duration": 1233636726
            }
          },
          {
            "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": 6690535818
            }
          },
          {
            "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": 1906677936
            }
          },
          {
            "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": 129532938
            }
          },
          {
            "keyword": "When ",
            "name": "I lock the currently opened VeraCrypt volume",
            "line": 27,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:326"
            },
            "result": {
              "status": "passed",
              "duration": 1240274718
            }
          },
          {
            "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": 92817482
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 1036213431
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 354253
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 16391
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 7393450
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 7057168688
            }
          }
        ]
      },
      {
        "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": 8594789824
            }
          },
          {
            "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": 6254019353
            }
          },
          {
            "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": 2277986813
            }
          },
          {
            "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": 107752930
            }
          },
          {
            "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": 1230722478
            }
          },
          {
            "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": 117579399
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 584670868
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 433162
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 15499
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 8246758
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6769856595
            }
          }
        ]
      },
      {
        "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": 27150775723
            }
          },
          {
            "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": 8748319877
            }
          },
          {
            "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": 1709464378
            }
          },
          {
            "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": 323014525
            }
          },
          {
            "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": 1271841463
            }
          },
          {
            "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": 91076687
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 676835287
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 10830523
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 18054
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 7058983
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 7043094364
            }
          }
        ]
      },
      {
        "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": 20835418773
            }
          },
          {
            "keyword": "And ",
            "name": "I cancel the GNOME authentication prompt",
            "line": 50,
            "match": {
              "location": "features/step_definitions/common_steps.rb:851"
            },
            "result": {
              "status": "passed",
              "duration": 1481423314
            }
          },
          {
            "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": 10244019743
            }
          },
          {
            "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": 1965825022
            }
          },
          {
            "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": 441479459
            }
          },
          {
            "keyword": "When ",
            "name": "I lock the currently opened VeraCrypt volume",
            "line": 54,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:326"
            },
            "result": {
              "status": "passed",
              "duration": 1303976684
            }
          },
          {
            "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": 132915535
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 1401758790
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 607247
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 13485
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 7417565
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6966618001
            }
          }
        ]
      },
      {
        "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": 20447802053
            }
          },
          {
            "keyword": "And ",
            "name": "I cancel the GNOME authentication prompt",
            "line": 59,
            "match": {
              "location": "features/step_definitions/common_steps.rb:851"
            },
            "result": {
              "status": "passed",
              "duration": 1273798585
            }
          },
          {
            "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": 8118618209
            }
          },
          {
            "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": 2090495384
            }
          },
          {
            "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": 211790650
            }
          },
          {
            "keyword": "When ",
            "name": "I lock the currently opened VeraCrypt volume",
            "line": 63,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:326"
            },
            "result": {
              "status": "passed",
              "duration": 1303583553
            }
          },
          {
            "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": 110597878
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 764806846
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 404267
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 12924
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 7526769
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 7087279812
            }
          }
        ]
      },
      {
        "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": 27652835582
            }
          },
          {
            "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": 19004342635
            }
          },
          {
            "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": 1871387433
            }
          },
          {
            "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": 124318036
            }
          },
          {
            "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": 1470673497
            }
          },
          {
            "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": 131341352
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 978032573
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 10587878
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 18134
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 6532205
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 7060057475
            }
          }
        ]
      },
      {
        "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": 27587579691
            }
          },
          {
            "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": 18080640676
            }
          },
          {
            "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": 1925546472
            }
          },
          {
            "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": 102624004
            }
          },
          {
            "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": 1245133798
            }
          },
          {
            "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": 102053836
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 646080819
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 21011324
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 19847
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 9226323
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 7120579884
            }
          }
        ]
      },
      {
        "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": 8200517610
            }
          },
          {
            "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": 16693637257
            }
          },
          {
            "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": 2044495668
            }
          },
          {
            "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": 301304483
            }
          },
          {
            "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": 1252664340
            }
          },
          {
            "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": 102935699
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 1070018208
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 525234
            }
          }
        ]
      }
    ]
  },
  {
    "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 16320
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 8541319
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:523"
            },
            "result": {
              "status": "passed",
              "duration": 4223417
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 8,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 86103097
            }
          },
          {
            "keyword": "And ",
            "name": "I set Tails to run with real Tor network",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:198"
            },
            "result": {
              "status": "passed",
              "duration": 28143
            }
          },
          {
            "keyword": "And ",
            "name": "I start the computer",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:202"
            },
            "result": {
              "status": "passed",
              "duration": 818958757
            }
          },
          {
            "keyword": "And ",
            "name": "the computer boots Tails",
            "line": 11,
            "match": {
              "location": "features/step_definitions/common_steps.rb:402"
            },
            "result": {
              "status": "passed",
              "duration": 37033639209
            }
          },
          {
            "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": 477383095
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session",
            "line": 14,
            "match": {
              "location": "features/step_definitions/common_steps.rb:514"
            },
            "result": {
              "status": "passed",
              "duration": 8328803013
            }
          },
          {
            "keyword": "And ",
            "name": "all notifications have disappeared",
            "line": 15,
            "match": {
              "location": "features/step_definitions/common_steps.rb:762"
            },
            "result": {
              "status": "passed",
              "duration": 7804695451
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 16,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 9216967
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 17,
            "match": {
              "location": "features/step_definitions/tor.rb:370"
            },
            "result": {
              "status": "passed",
              "duration": 4655990515
            }
          }
        ]
      },
      {
        "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:616"
            },
            "result": {
              "status": "passed",
              "duration": 31911430010
            }
          },
          {
            "keyword": "Then ",
            "name": "I wait until Tor is ready",
            "line": 22,
            "match": {
              "location": "features/step_definitions/common_steps.rb:705"
            },
            "result": {
              "status": "passed",
              "duration": 2304079808
            }
          },
          {
            "keyword": "And ",
            "name": "available upgrades have been checked",
            "line": 23,
            "match": {
              "location": "features/step_definitions/common_steps.rb:758"
            },
            "result": {
              "status": "passed",
              "duration": 1102645596
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:531"
            },
            "result": {
              "status": "passed",
              "duration": 1535874837
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 770890424
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 13388686
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 22612
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 7102502
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 8,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 108441597
            }
          },
          {
            "keyword": "And ",
            "name": "I set Tails to run with real Tor network",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:198"
            },
            "result": {
              "status": "passed",
              "duration": 34515
            }
          },
          {
            "keyword": "And ",
            "name": "I start the computer",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:202"
            },
            "result": {
              "status": "passed",
              "duration": 847646248
            }
          },
          {
            "keyword": "And ",
            "name": "the computer boots Tails",
            "line": 11,
            "match": {
              "location": "features/step_definitions/common_steps.rb:402"
            },
            "result": {
              "status": "passed",
              "duration": 36281233481
            }
          },
          {
            "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": 429997918
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session",
            "line": 14,
            "match": {
              "location": "features/step_definitions/common_steps.rb:514"
            },
            "result": {
              "status": "passed",
              "duration": 7969561632
            }
          },
          {
            "keyword": "And ",
            "name": "all notifications have disappeared",
            "line": 15,
            "match": {
              "location": "features/step_definitions/common_steps.rb:762"
            },
            "result": {
              "status": "passed",
              "duration": 7790651830
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 16,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 8304195
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 17,
            "match": {
              "location": "features/step_definitions/tor.rb:370"
            },
            "result": {
              "status": "passed",
              "duration": 4826779866
            }
          }
        ]
      },
      {
        "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:616"
            },
            "result": {
              "status": "passed",
              "duration": 4588660038
            }
          },
          {
            "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:926"
            },
            "result": {
              "status": "passed",
              "duration": 243588398
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 705252063
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 30107084
            }
          }
        ]
      }
    ]
  },
  {
    "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 22472
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 6528969
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 9,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6827277908
            }
          },
          {
            "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:1797"
            },
            "result": {
              "status": "passed",
              "duration": 79528343
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 922695523
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 22191
            }
          }
        ]
      },
      {
        "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 16540
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 9178675
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 13,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6835942030
            }
          },
          {
            "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:1792"
            },
            "result": {
              "status": "passed",
              "duration": 628659542
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 715535649
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 21230
            }
          }
        ]
      },
      {
        "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:270"
            },
            "result": {
              "status": "passed",
              "duration": 13986
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 6226610
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 17,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6650088785
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"WhisperBack\" via GNOME Activities Overview",
            "line": 18,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1165"
            },
            "result": {
              "status": "passed",
              "duration": 8403735642
            }
          },
          {
            "keyword": "Then ",
            "name": "WhisperBack has debugging information",
            "line": 19,
            "match": {
              "location": "features/step_definitions/whisperback.rb:9"
            },
            "result": {
              "status": "passed",
              "duration": 2449554375
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 1060357720
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 24967
            }
          }
        ]
      }
    ]
  }
]