Checking pause locations when stepping in, out, and over in loops.


== Running test suite: Debugger.stepping.loops
-- Running test case: Debugger.stepping.While
EXPRESSION: setTimeout(entryWhile)
STEPS: over, over, over, over, over, over, resume
PAUSED (debugger-statement)
PAUSE AT entryWhile:13:5
      9
     10    function entryWhile() {
     11        let i = 2;
 ->  12        |debugger;
     13        while (i > 0)
     14            --i;
     15    }

ACTION: step-over
PAUSE AT entryWhile:14:12
     10    function entryWhile() {
     11        let i = 2;
     12        debugger;
 ->  13        while (|i > 0)
     14            --i;
     15    }
     16

ACTION: step-over
PAUSE AT entryWhile:15:9
     11        let i = 2;
     12        debugger;
     13        while (i > 0)
 ->  14            |--i;
     15    }
     16
     17    function entryDoWhile() {

ACTION: step-over
PAUSE AT entryWhile:14:12
     10    function entryWhile() {
     11        let i = 2;
     12        debugger;
 ->  13        while (|i > 0)
     14            --i;
     15    }
     16

ACTION: step-over
PAUSE AT entryWhile:15:9
     11        let i = 2;
     12        debugger;
     13        while (i > 0)
 ->  14            |--i;
     15    }
     16
     17    function entryDoWhile() {

ACTION: step-over
PAUSE AT entryWhile:14:12
     10    function entryWhile() {
     11        let i = 2;
     12        debugger;
 ->  13        while (|i > 0)
     14            --i;
     15    }
     16

ACTION: step-over
PAUSE AT entryWhile:16:2
     12        debugger;
     13        while (i > 0)
     14            --i;
 ->  15    }|
     16
     17    function entryDoWhile() {
     18        let i = 2;

ACTION: resume
RESUMED
PASS: Should have used all steps.

-- Running test case: Debugger.stepping.DoWhile
EXPRESSION: setTimeout(entryDoWhile)
STEPS: over, over, over, over, over, resume
PAUSED (debugger-statement)
PAUSE AT entryDoWhile:20:5
     16
     17    function entryDoWhile() {
     18        let i = 2;
 ->  19        |debugger;
     20        do {
     21            --i;
     22        } while (i > 0);

ACTION: step-over
PAUSE AT entryDoWhile:22:9
     18        let i = 2;
     19        debugger;
     20        do {
 ->  21            |--i;
     22        } while (i > 0);
     23    }
     24

ACTION: step-over
PAUSE AT entryDoWhile:23:14
     19        debugger;
     20        do {
     21            --i;
 ->  22        } while (|i > 0);
     23    }
     24
     25    function entryTraditionalFor() {

ACTION: step-over
PAUSE AT entryDoWhile:22:9
     18        let i = 2;
     19        debugger;
     20        do {
 ->  21            |--i;
     22        } while (i > 0);
     23    }
     24

ACTION: step-over
PAUSE AT entryDoWhile:23:14
     19        debugger;
     20        do {
     21            --i;
 ->  22        } while (|i > 0);
     23    }
     24
     25    function entryTraditionalFor() {

ACTION: step-over
PAUSE AT entryDoWhile:24:2
     20        do {
     21            --i;
     22        } while (i > 0);
 ->  23    }|
     24
     25    function entryTraditionalFor() {
     26        debugger;

ACTION: resume
RESUMED
PASS: Should have used all steps.

-- Running test case: Debugger.stepping.TraditionalForStepOver
EXPRESSION: setTimeout(entryTraditionalFor)
STEPS: over, over, over, over, over, over, over, over, over, resume
PAUSED (debugger-statement)
PAUSE AT entryTraditionalFor:27:5
     23    }
     24
     25    function entryTraditionalFor() {
 ->  26        |debugger;
     27        for (let i = 0; i < 2; ++i)
     28            a();
     29    }

ACTION: step-over
PAUSE AT entryTraditionalFor:28:10
     24
     25    function entryTraditionalFor() {
     26        debugger;
 ->  27        for (|let i = 0; i < 2; ++i)
     28            a();
     29    }
     30

ACTION: step-over
PAUSE AT entryTraditionalFor:28:21
     24
     25    function entryTraditionalFor() {
     26        debugger;
 ->  27        for (let i = 0; |i < 2; ++i)
     28            a();
     29    }
     30

ACTION: step-over
PAUSE AT entryTraditionalFor:29:9
     25    function entryTraditionalFor() {
     26        debugger;
     27        for (let i = 0; i < 2; ++i)
 ->  28            |a();
     29    }
     30
     31    function entryTraditionalForNoInit() {

ACTION: step-over
PAUSE AT entryTraditionalFor:28:28
     24
     25    function entryTraditionalFor() {
     26        debugger;
 ->  27        for (let i = 0; i < 2; |++i)
     28            a();
     29    }
     30

ACTION: step-over
PAUSE AT entryTraditionalFor:28:21
     24
     25    function entryTraditionalFor() {
     26        debugger;
 ->  27        for (let i = 0; |i < 2; ++i)
     28            a();
     29    }
     30

ACTION: step-over
PAUSE AT entryTraditionalFor:29:9
     25    function entryTraditionalFor() {
     26        debugger;
     27        for (let i = 0; i < 2; ++i)
 ->  28            |a();
     29    }
     30
     31    function entryTraditionalForNoInit() {

ACTION: step-over
PAUSE AT entryTraditionalFor:28:28
     24
     25    function entryTraditionalFor() {
     26        debugger;
 ->  27        for (let i = 0; i < 2; |++i)
     28            a();
     29    }
     30

ACTION: step-over
PAUSE AT entryTraditionalFor:28:21
     24
     25    function entryTraditionalFor() {
     26        debugger;
 ->  27        for (let i = 0; |i < 2; ++i)
     28            a();
     29    }
     30

ACTION: step-over
PAUSE AT entryTraditionalFor:30:2
     26        debugger;
     27        for (let i = 0; i < 2; ++i)
     28            a();
 ->  29    }|
     30
     31    function entryTraditionalForNoInit() {
     32        let i = 0;

ACTION: resume
RESUMED
PASS: Should have used all steps.

-- Running test case: Debugger.stepping.TraditionalForStepIn
EXPRESSION: setTimeout(entryTraditionalFor)
STEPS: over, in, in, over, in, in, over, in, in, resume
PAUSED (debugger-statement)
PAUSE AT entryTraditionalFor:27:5
     23    }
     24
     25    function entryTraditionalFor() {
 ->  26        |debugger;
     27        for (let i = 0; i < 2; ++i)
     28            a();
     29    }

ACTION: step-over
PAUSE AT entryTraditionalFor:28:10
     24
     25    function entryTraditionalFor() {
     26        debugger;
 ->  27        for (|let i = 0; i < 2; ++i)
     28            a();
     29    }
     30

ACTION: step-in
PAUSE AT entryTraditionalFor:28:21
     24
     25    function entryTraditionalFor() {
     26        debugger;
 ->  27        for (let i = 0; |i < 2; ++i)
     28            a();
     29    }
     30

ACTION: step-in
PAUSE AT entryTraditionalFor:29:9
     25    function entryTraditionalFor() {
     26        debugger;
     27        for (let i = 0; i < 2; ++i)
 ->  28            |a();
     29    }
     30
     31    function entryTraditionalForNoInit() {

ACTION: step-over
PAUSE AT entryTraditionalFor:28:28
     24
     25    function entryTraditionalFor() {
     26        debugger;
 ->  27        for (let i = 0; i < 2; |++i)
     28            a();
     29    }
     30

ACTION: step-in
PAUSE AT entryTraditionalFor:28:21
     24
     25    function entryTraditionalFor() {
     26        debugger;
 ->  27        for (let i = 0; |i < 2; ++i)
     28            a();
     29    }
     30

ACTION: step-in
PAUSE AT entryTraditionalFor:29:9
     25    function entryTraditionalFor() {
     26        debugger;
     27        for (let i = 0; i < 2; ++i)
 ->  28            |a();
     29    }
     30
     31    function entryTraditionalForNoInit() {

ACTION: step-over
PAUSE AT entryTraditionalFor:28:28
     24
     25    function entryTraditionalFor() {
     26        debugger;
 ->  27        for (let i = 0; i < 2; |++i)
     28            a();
     29    }
     30

ACTION: step-in
PAUSE AT entryTraditionalFor:28:21
     24
     25    function entryTraditionalFor() {
     26        debugger;
 ->  27        for (let i = 0; |i < 2; ++i)
     28            a();
     29    }
     30

ACTION: step-in
PAUSE AT entryTraditionalFor:30:2
     26        debugger;
     27        for (let i = 0; i < 2; ++i)
     28            a();
 ->  29    }|
     30
     31    function entryTraditionalForNoInit() {
     32        let i = 0;

ACTION: resume
RESUMED
PASS: Should have used all steps.

-- Running test case: Debugger.stepping.TraditionalForNoInit
EXPRESSION: setTimeout(entryTraditionalForNoInit)
STEPS: over, in, over, in, in, over, in, in, resume
PAUSED (debugger-statement)
PAUSE AT entryTraditionalForNoInit:34:5
     30
     31    function entryTraditionalForNoInit() {
     32        let i = 0;
 ->  33        |debugger;
     34        for (; i < 2; ++i)
     35            a();
     36    }

ACTION: step-over
PAUSE AT entryTraditionalForNoInit:35:12
     31    function entryTraditionalForNoInit() {
     32        let i = 0;
     33        debugger;
 ->  34        for (; |i < 2; ++i)
     35            a();
     36    }
     37

ACTION: step-in
PAUSE AT entryTraditionalForNoInit:36:9
     32        let i = 0;
     33        debugger;
     34        for (; i < 2; ++i)
 ->  35            |a();
     36    }
     37
     38    function entryForIn() {

ACTION: step-over
PAUSE AT entryTraditionalForNoInit:35:19
     31    function entryTraditionalForNoInit() {
     32        let i = 0;
     33        debugger;
 ->  34        for (; i < 2; |++i)
     35            a();
     36    }
     37

ACTION: step-in
PAUSE AT entryTraditionalForNoInit:35:12
     31    function entryTraditionalForNoInit() {
     32        let i = 0;
     33        debugger;
 ->  34        for (; |i < 2; ++i)
     35            a();
     36    }
     37

ACTION: step-in
PAUSE AT entryTraditionalForNoInit:36:9
     32        let i = 0;
     33        debugger;
     34        for (; i < 2; ++i)
 ->  35            |a();
     36    }
     37
     38    function entryForIn() {

ACTION: step-over
PAUSE AT entryTraditionalForNoInit:35:19
     31    function entryTraditionalForNoInit() {
     32        let i = 0;
     33        debugger;
 ->  34        for (; i < 2; |++i)
     35            a();
     36    }
     37

ACTION: step-in
PAUSE AT entryTraditionalForNoInit:35:12
     31    function entryTraditionalForNoInit() {
     32        let i = 0;
     33        debugger;
 ->  34        for (; |i < 2; ++i)
     35            a();
     36    }
     37

ACTION: step-in
PAUSE AT entryTraditionalForNoInit:37:2
     33        debugger;
     34        for (; i < 2; ++i)
     35            a();
 ->  36    }|
     37
     38    function entryForIn() {
     39        let o = {key1: 1, key2: 2};

ACTION: resume
RESUMED
PASS: Should have used all steps.

-- Running test case: Debugger.stepping.ForIn
EXPRESSION: setTimeout(entryForIn)
STEPS: over, over, over, over, over, over, over, resume
PAUSED (debugger-statement)
PAUSE AT entryForIn:41:5
     37
     38    function entryForIn() {
     39        let o = {key1: 1, key2: 2};
 ->  40        |debugger;
     41        for (let property in o)
     42            a();
     43    }

ACTION: step-over
PAUSE AT entryForIn:42:26
     38    function entryForIn() {
     39        let o = {key1: 1, key2: 2};
     40        debugger;
 ->  41        for (let property in |o)
     42            a();
     43    }
     44

ACTION: step-over
PAUSE AT entryForIn:42:10
     38    function entryForIn() {
     39        let o = {key1: 1, key2: 2};
     40        debugger;
 ->  41        for (|let property in o)
     42            a();
     43    }
     44

ACTION: step-over
PAUSE AT entryForIn:43:9
     39        let o = {key1: 1, key2: 2};
     40        debugger;
     41        for (let property in o)
 ->  42            |a();
     43    }
     44
     45    function entryForOf() {

ACTION: step-over
PAUSE AT entryForIn:42:10
     38    function entryForIn() {
     39        let o = {key1: 1, key2: 2};
     40        debugger;
 ->  41        for (|let property in o)
     42            a();
     43    }
     44

ACTION: step-over
PAUSE AT entryForIn:43:9
     39        let o = {key1: 1, key2: 2};
     40        debugger;
     41        for (let property in o)
 ->  42            |a();
     43    }
     44
     45    function entryForOf() {

ACTION: step-over
PAUSE AT entryForIn:42:10
     38    function entryForIn() {
     39        let o = {key1: 1, key2: 2};
     40        debugger;
 ->  41        for (|let property in o)
     42            a();
     43    }
     44

ACTION: step-over
PAUSE AT entryForIn:44:2
     40        debugger;
     41        for (let property in o)
     42            a();
 ->  43    }|
     44
     45    function entryForOf() {
     46        let arr = [1, 2];

ACTION: resume
RESUMED
PASS: Should have used all steps.

-- Running test case: Debugger.stepping.ForIn
EXPRESSION: setTimeout(entryForOf)
STEPS: over, over, over, over, over, over, over, resume
PAUSED (debugger-statement)
PAUSE AT entryForOf:48:5
     44
     45    function entryForOf() {
     46        let arr = [1, 2];
 ->  47        |debugger;
     48        for (let value of arr)
     49            a();
     50    }

ACTION: step-over
PAUSE AT entryForOf:49:23
     45    function entryForOf() {
     46        let arr = [1, 2];
     47        debugger;
 ->  48        for (let value of |arr)
     49            a();
     50    }
     51

ACTION: step-over
PAUSE AT entryForOf:49:10
     45    function entryForOf() {
     46        let arr = [1, 2];
     47        debugger;
 ->  48        for (|let value of arr)
     49            a();
     50    }
     51

ACTION: step-over
PAUSE AT entryForOf:50:9
     46        let arr = [1, 2];
     47        debugger;
     48        for (let value of arr)
 ->  49            |a();
     50    }
     51
     52    function entryWhileBreakContinue() {

ACTION: step-over
PAUSE AT entryForOf:49:10
     45    function entryForOf() {
     46        let arr = [1, 2];
     47        debugger;
 ->  48        for (|let value of arr)
     49            a();
     50    }
     51

ACTION: step-over
PAUSE AT entryForOf:50:9
     46        let arr = [1, 2];
     47        debugger;
     48        for (let value of arr)
 ->  49            |a();
     50    }
     51
     52    function entryWhileBreakContinue() {

ACTION: step-over
PAUSE AT entryForOf:49:10
     45    function entryForOf() {
     46        let arr = [1, 2];
     47        debugger;
 ->  48        for (|let value of arr)
     49            a();
     50    }
     51

ACTION: step-over
PAUSE AT entryForOf:51:2
     47        debugger;
     48        for (let value of arr)
     49            a();
 ->  50    }|
     51
     52    function entryWhileBreakContinue() {
     53        let i = 0;

ACTION: resume
RESUMED
PASS: Should have used all steps.

-- Running test case: Debugger.stepping.WhileBreakContinue
EXPRESSION: setTimeout(entryWhileBreakContinue)
STEPS: over, over, over, over, over, over, over, over, over, over, resume
PAUSED (debugger-statement)
PAUSE AT entryWhileBreakContinue:55:5
     51
     52    function entryWhileBreakContinue() {
     53        let i = 0;
 ->  54        |debugger;
     55        while (truthy) {
     56            ++i;
     57            if (i === 1)

ACTION: step-over
PAUSE AT entryWhileBreakContinue:56:12
     52    function entryWhileBreakContinue() {
     53        let i = 0;
     54        debugger;
 ->  55        while (|truthy) {
     56            ++i;
     57            if (i === 1)
     58                continue;

ACTION: step-over
PAUSE AT entryWhileBreakContinue:57:9
     53        let i = 0;
     54        debugger;
     55        while (truthy) {
 ->  56            |++i;
     57            if (i === 1)
     58                continue;
     59            if (i === 2)

ACTION: step-over
PAUSE AT entryWhileBreakContinue:58:13
     54        debugger;
     55        while (truthy) {
     56            ++i;
 ->  57            if (|i === 1)
     58                continue;
     59            if (i === 2)
     60                break;

ACTION: step-over
PAUSE AT entryWhileBreakContinue:59:13
     55        while (truthy) {
     56            ++i;
     57            if (i === 1)
 ->  58                |continue;
     59            if (i === 2)
     60                break;
     61        }

ACTION: step-over
PAUSE AT entryWhileBreakContinue:56:12
     52    function entryWhileBreakContinue() {
     53        let i = 0;
     54        debugger;
 ->  55        while (|truthy) {
     56            ++i;
     57            if (i === 1)
     58                continue;

ACTION: step-over
PAUSE AT entryWhileBreakContinue:57:9
     53        let i = 0;
     54        debugger;
     55        while (truthy) {
 ->  56            |++i;
     57            if (i === 1)
     58                continue;
     59            if (i === 2)

ACTION: step-over
PAUSE AT entryWhileBreakContinue:58:13
     54        debugger;
     55        while (truthy) {
     56            ++i;
 ->  57            if (|i === 1)
     58                continue;
     59            if (i === 2)
     60                break;

ACTION: step-over
PAUSE AT entryWhileBreakContinue:60:13
     56            ++i;
     57            if (i === 1)
     58                continue;
 ->  59            if (|i === 2)
     60                break;
     61        }
     62    }

ACTION: step-over
PAUSE AT entryWhileBreakContinue:61:13
     57            if (i === 1)
     58                continue;
     59            if (i === 2)
 ->  60                |break;
     61        }
     62    }
     63

ACTION: step-over
PAUSE AT entryWhileBreakContinue:63:2
     59            if (i === 2)
     60                break;
     61        }
 ->  62    }|
     63
     64    function entryForBreakContinue() {
     65        let i = 0;

ACTION: resume
RESUMED
PASS: Should have used all steps.

-- Running test case: Debugger.stepping.ForBreakContinue
EXPRESSION: setTimeout(entryForBreakContinue)
STEPS: over, over, over, over, over, over, over, over, resume
PAUSED (debugger-statement)
PAUSE AT entryForBreakContinue:67:5
     63
     64    function entryForBreakContinue() {
     65        let i = 0;
 ->  66        |debugger;
     67        for (;;) {
     68            ++i;
     69            if (i === 1)

ACTION: step-over
PAUSE AT entryForBreakContinue:69:9
     65        let i = 0;
     66        debugger;
     67        for (;;) {
 ->  68            |++i;
     69            if (i === 1)
     70                continue;
     71            if (i === 2)

ACTION: step-over
PAUSE AT entryForBreakContinue:70:13
     66        debugger;
     67        for (;;) {
     68            ++i;
 ->  69            if (|i === 1)
     70                continue;
     71            if (i === 2)
     72                break;

ACTION: step-over
PAUSE AT entryForBreakContinue:71:13
     67        for (;;) {
     68            ++i;
     69            if (i === 1)
 ->  70                |continue;
     71            if (i === 2)
     72                break;
     73        }

ACTION: step-over
PAUSE AT entryForBreakContinue:69:9
     65        let i = 0;
     66        debugger;
     67        for (;;) {
 ->  68            |++i;
     69            if (i === 1)
     70                continue;
     71            if (i === 2)

ACTION: step-over
PAUSE AT entryForBreakContinue:70:13
     66        debugger;
     67        for (;;) {
     68            ++i;
 ->  69            if (|i === 1)
     70                continue;
     71            if (i === 2)
     72                break;

ACTION: step-over
PAUSE AT entryForBreakContinue:72:13
     68            ++i;
     69            if (i === 1)
     70                continue;
 ->  71            if (|i === 2)
     72                break;
     73        }
     74    }

ACTION: step-over
PAUSE AT entryForBreakContinue:73:13
     69            if (i === 1)
     70                continue;
     71            if (i === 2)
 ->  72                |break;
     73        }
     74    }
     75

ACTION: step-over
PAUSE AT entryForBreakContinue:75:2
     71            if (i === 2)
     72                break;
     73        }
 ->  74    }|
     75
     76    function entryForWithCommas() {
     77        debugger;

ACTION: resume
RESUMED
PASS: Should have used all steps.

-- Running test case: Debugger.stepping.ForWithCommasStepOver
EXPRESSION: setTimeout(entryForWithCommas)
STEPS: over, next, over, next, over, over, next, over, next, over, over, next, over, next, over, resume
PAUSED (debugger-statement)
PAUSE AT entryForWithCommas:78:5
     74    }
     75
     76    function entryForWithCommas() {
 ->  77        |debugger;
     78        for (let i = 0, length = 0; length = 2, i < length; length = 1, ++i)
     79            a();
     80    }

ACTION: step-over
PAUSE AT entryForWithCommas:79:10
     75
     76    function entryForWithCommas() {
     77        debugger;
 ->  78        for (|let i = 0, length = 0; length = 2, i < length; length = 1, ++i)
     79            a();
     80    }
     81

ACTION: step-next
PAUSE AT entryForWithCommas:79:21
     75
     76    function entryForWithCommas() {
     77        debugger;
 ->  78        for (let i = 0, |length = 0; length = 2, i < length; length = 1, ++i)
     79            a();
     80    }
     81

ACTION: step-over
PAUSE AT entryForWithCommas:79:33
     75
     76    function entryForWithCommas() {
     77        debugger;
 ->  78        for (let i = 0, length = 0; |length = 2, i < length; length = 1, ++i)
     79            a();
     80    }
     81

ACTION: step-next
PAUSE AT entryForWithCommas:79:45
     75
     76    function entryForWithCommas() {
     77        debugger;
 ->  78        for (let i = 0, length = 0; length = 2, |i < length; length = 1, ++i)
     79            a();
     80    }
     81

ACTION: step-over
PAUSE AT entryForWithCommas:80:9
     76    function entryForWithCommas() {
     77        debugger;
     78        for (let i = 0, length = 0; length = 2, i < length; length = 1, ++i)
 ->  79            |a();
     80    }
     81
     82    // ---------

ACTION: step-over
PAUSE AT entryForWithCommas:79:57
     75
     76    function entryForWithCommas() {
     77        debugger;
 ->  78        for (let i = 0, length = 0; length = 2, i < length; |length = 1, ++i)
     79            a();
     80    }
     81

ACTION: step-next
PAUSE AT entryForWithCommas:79:69
     75
     76    function entryForWithCommas() {
     77        debugger;
 ->  78        for (let i = 0, length = 0; length = 2, i < length; length = 1, |++i)
     79            a();
     80    }
     81

ACTION: step-over
PAUSE AT entryForWithCommas:79:33
     75
     76    function entryForWithCommas() {
     77        debugger;
 ->  78        for (let i = 0, length = 0; |length = 2, i < length; length = 1, ++i)
     79            a();
     80    }
     81

ACTION: step-next
PAUSE AT entryForWithCommas:79:45
     75
     76    function entryForWithCommas() {
     77        debugger;
 ->  78        for (let i = 0, length = 0; length = 2, |i < length; length = 1, ++i)
     79            a();
     80    }
     81

ACTION: step-over
PAUSE AT entryForWithCommas:80:9
     76    function entryForWithCommas() {
     77        debugger;
     78        for (let i = 0, length = 0; length = 2, i < length; length = 1, ++i)
 ->  79            |a();
     80    }
     81
     82    // ---------

ACTION: step-over
PAUSE AT entryForWithCommas:79:57
     75
     76    function entryForWithCommas() {
     77        debugger;
 ->  78        for (let i = 0, length = 0; length = 2, i < length; |length = 1, ++i)
     79            a();
     80    }
     81

ACTION: step-next
PAUSE AT entryForWithCommas:79:69
     75
     76    function entryForWithCommas() {
     77        debugger;
 ->  78        for (let i = 0, length = 0; length = 2, i < length; length = 1, |++i)
     79            a();
     80    }
     81

ACTION: step-over
PAUSE AT entryForWithCommas:79:33
     75
     76    function entryForWithCommas() {
     77        debugger;
 ->  78        for (let i = 0, length = 0; |length = 2, i < length; length = 1, ++i)
     79            a();
     80    }
     81

ACTION: step-next
PAUSE AT entryForWithCommas:79:45
     75
     76    function entryForWithCommas() {
     77        debugger;
 ->  78        for (let i = 0, length = 0; length = 2, |i < length; length = 1, ++i)
     79            a();
     80    }
     81

ACTION: step-over
PAUSE AT entryForWithCommas:81:2
     77        debugger;
     78        for (let i = 0, length = 0; length = 2, i < length; length = 1, ++i)
     79            a();
 ->  80    }|
     81
     82    // ---------
     83

ACTION: resume
RESUMED
PASS: Should have used all steps.

