Changeset 259781 in webkit


Ignore:
Timestamp:
Apr 8, 2020 10:10:27 PM (4 years ago)
Author:
Devin Rousso
Message:

Web Inspector: Debugger: treat comma sub-expressions as separate statements
https://bugs.webkit.org/show_bug.cgi?id=209998

Reviewed by Joseph Pecoraro.

Source/JavaScriptCore:

Minifiers sometimes use , instead of ; as a way of compressing multiple statements into
a single statement (e.g. inside an if conditional). This makes stepping through minified
code much less useful, as our current stepping logic is based on expressions (not including
step in or step out). In most cases, we do actually want to treat each sub-expression in a
comma expression as a statement so as to emulate the behaviour as if there were ; instead.

  • bytecompiler/NodesCodegen.cpp:

(JSC::CommaNode::emitBytecode):

  • parser/Parser.cpp:

(JSC::Parser<LexerType>::parseVariableDeclarationList):
(Parser<LexerType>::parseExpression):
Shift the location of subsequent sub-expressions to be after the comma. Add breakpoint pause
locations for each subsequent sub-expression.

Source/WebInspectorUI:

Minifiers sometimes use , instead of ; as a way of compressing multiple statements into
a single statement (e.g. inside an if conditional). This makes stepping through minified
code much less useful, as our current stepping logic is based on expressions (not including
step in or step out). In most cases, we do actually want to treat each sub-expression in a
comma expression as a statement so as to emulate the behaviour as if there were ; instead.

  • UserInterface/Workers/Formatter/JSFormatter.js:

(JSFormatter.prototype._isLikelyToHaveNewline):
(JSFormatter.prototype._handleTokenAtNode):
Put each sub-expression in a comma expression on it's own line.

LayoutTests:

  • inspector/debugger/breakpoints/resources/dump-functions.js:
  • inspector/debugger/breakpoints/resources/dump-general.js:
  • inspector/debugger/breakpoints/resolved-dump-all-pause-locations-expected.txt:
  • inspector/debugger/breakpoints/resolved-dump-each-line-expected.txt:
  • inspector/debugger/stepping/stepOver.html:
  • inspector/debugger/stepping/stepOver-expected.txt:
  • inspector/debugger/stepping/stepping-function-calls.html:
  • inspector/debugger/stepping/stepping-function-calls-expected.txt:
  • inspector/debugger/stepping/stepping-loops.html:
  • inspector/debugger/stepping/stepping-loops-expected.txt:
  • inspector/debugger/stepping/stepping-misc.html:
  • inspector/debugger/stepping/stepping-misc-expected.txt:
  • inspector/formatting/resources/javascript-tests/for-statements.js:
  • inspector/formatting/resources/javascript-tests/for-statements-expected.js:
  • inspector/formatting/resources/javascript-tests/if-statements.js:
  • inspector/formatting/resources/javascript-tests/if-statements-expected.js:
  • inspector/formatting/resources/javascript-tests/sample-jquery-expected.js:
  • inspector/formatting/resources/javascript-tests/sample-jquery-expected.js:
Location:
trunk
Files:
25 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r259777 r259781  
     12020-04-08  Devin Rousso  <drousso@apple.com>
     2
     3        Web Inspector: Debugger: treat comma sub-expressions as separate statements
     4        https://bugs.webkit.org/show_bug.cgi?id=209998
     5
     6        Reviewed by Joseph Pecoraro.
     7
     8        * inspector/debugger/breakpoints/resources/dump-functions.js:
     9        * inspector/debugger/breakpoints/resources/dump-general.js:
     10        * inspector/debugger/breakpoints/resolved-dump-all-pause-locations-expected.txt:
     11        * inspector/debugger/breakpoints/resolved-dump-each-line-expected.txt:
     12        * inspector/debugger/stepping/stepOver.html:
     13        * inspector/debugger/stepping/stepOver-expected.txt:
     14        * inspector/debugger/stepping/stepping-function-calls.html:
     15        * inspector/debugger/stepping/stepping-function-calls-expected.txt:
     16        * inspector/debugger/stepping/stepping-loops.html:
     17        * inspector/debugger/stepping/stepping-loops-expected.txt:
     18        * inspector/debugger/stepping/stepping-misc.html:
     19        * inspector/debugger/stepping/stepping-misc-expected.txt:
     20        * inspector/formatting/resources/javascript-tests/for-statements.js:
     21        * inspector/formatting/resources/javascript-tests/for-statements-expected.js:
     22        * inspector/formatting/resources/javascript-tests/if-statements.js:
     23        * inspector/formatting/resources/javascript-tests/if-statements-expected.js:
     24        * inspector/formatting/resources/javascript-tests/sample-jquery-expected.js:
     25        * inspector/formatting/resources/javascript-tests/sample-jquery-expected.js:
     26
    1272020-04-08  Diego Pino Garcia  <dpino@igalia.com>
    228
  • trunk/LayoutTests/inspector/debugger/breakpoints/resolved-dump-all-pause-locations-expected.txt

    r250655 r259781  
    10751075
    10761076INSERTING AT: 164:1
    1077 PAUSES AT: 166:0
     1077PAUSES AT: 165:4
    10781078    161        a();
    10791079    162    }
    10801080    163   
    10811081 -> 164    v#ar v1 = 1,
    1082     165        v2 = 1;
     1082 => 165        |v2 = 1;
     1083    166    let l1 = 2,
     1084    167        l2 = 2;
     1085    168    const c1 = 3,
     1086
     1087INSERTING AT: 165:5
     1088PAUSES AT: 166:0
     1089    162    }
     1090    163   
     1091    164    var v1 = 1,
     1092 -> 165        v#2 = 1;
    10831093 => 166    |let l1 = 2,
    10841094    167        l2 = 2;
     
    10871097
    10881098INSERTING AT: 166:1
    1089 PAUSES AT: 168:0
     1099PAUSES AT: 167:4
    10901100    163   
    10911101    164    var v1 = 1,
    10921102    165        v2 = 1;
    10931103 -> 166    l#et l1 = 2,
    1094     167        l2 = 2;
     1104 => 167        |l2 = 2;
     1105    168    const c1 = 3,
     1106    169        c2 = 3;
     1107    170   
     1108
     1109INSERTING AT: 167:5
     1110PAUSES AT: 168:0
     1111    164    var v1 = 1,
     1112    165        v2 = 1;
     1113    166    let l1 = 2,
     1114 -> 167        l#2 = 2;
    10951115 => 168    |const c1 = 3,
    10961116    169        c2 = 3;
     
    10991119
    11001120INSERTING AT: 168:1
    1101 PAUSES AT: 171:0
     1121PAUSES AT: 169:4
    11021122    165        v2 = 1;
    11031123    166    let l1 = 2,
    11041124    167        l2 = 2;
    11051125 -> 168    c#onst c1 = 3,
    1106     169        c2 = 3;
     1126 => 169        |c2 = 3;
     1127    170   
     1128    171    v1 = v2 = v1;
     1129    172   
     1130
     1131INSERTING AT: 169:5
     1132PAUSES AT: 171:0
     1133    166    let l1 = 2,
     1134    167        l2 = 2;
     1135    168    const c1 = 3,
     1136 -> 169        c#2 = 3;
    11071137    170   
    11081138 => 171    |v1 = v2 = v1;
     
    13161346    209        a();
    13171347    210   
     1348    211    a(), b(), c();
    13181349
    13191350INSERTING AT: 208:5
     
    13251356 => 209        |a();
    13261357    210   
     1358    211    a(), b(), c();
     1359    212   
     1360
     1361INSERTING AT: 209:5
     1362PAUSES AT: 211:0
     1363    206        a();
     1364    207   
     1365    208    if (String.raw`test`)
     1366 -> 209        a#();
     1367    210   
     1368 => 211    |a(), b(), c();
     1369    212   
     1370    213    a(),
     1371    214    b(),
     1372
     1373INSERTING AT: 211:1
     1374PAUSES AT: 211:5
     1375    208    if (String.raw`test`)
     1376    209        a();
     1377    210   
     1378-=> 211    a#(), |b(), c();
     1379    212   
     1380    213    a(),
     1381    214    b(),
     1382
     1383INSERTING AT: 211:6
     1384PAUSES AT: 211:10
     1385    208    if (String.raw`test`)
     1386    209        a();
     1387    210   
     1388-=> 211    a(), b#(), |c();
     1389    212   
     1390    213    a(),
     1391    214    b(),
     1392
     1393INSERTING AT: 211:11
     1394PAUSES AT: 213:0
     1395    208    if (String.raw`test`)
     1396    209        a();
     1397    210   
     1398 -> 211    a(), b(), c#();
     1399    212   
     1400 => 213    |a(),
     1401    214    b(),
     1402    215    c();
     1403    216   
     1404
     1405INSERTING AT: 213:1
     1406PAUSES AT: 214:0
     1407    210   
     1408    211    a(), b(), c();
     1409    212   
     1410 -> 213    a#(),
     1411 => 214    |b(),
     1412    215    c();
     1413    216   
     1414
     1415INSERTING AT: 214:1
     1416PAUSES AT: 215:0
     1417    211    a(), b(), c();
     1418    212   
     1419    213    a(),
     1420 -> 214    b#(),
     1421 => 215    |c();
     1422    216   
    13271423
    13281424
     
    23672463    113    };
    23682464    114   
     2465    115    function commaOneLine() {
     2466
     2467INSERTING AT: 115:0
     2468PAUSES AT: 116:4
     2469    112        }   
     2470    113    };
     2471    114   
     2472 -> 115    #function commaOneLine() {
     2473 => 116        |inline(), inline(), inline();
     2474    117    }
     2475    118   
     2476    119    function commaMultiLine() {
     2477
     2478INSERTING AT: 116:5
     2479PAUSES AT: 116:14
     2480    113    };
     2481    114   
     2482    115    function commaOneLine() {
     2483-=> 116        i#nline(), |inline(), inline();
     2484    117    }
     2485    118   
     2486    119    function commaMultiLine() {
     2487
     2488INSERTING AT: 116:15
     2489PAUSES AT: 116:24
     2490    113    };
     2491    114   
     2492    115    function commaOneLine() {
     2493-=> 116        inline(), i#nline(), |inline();
     2494    117    }
     2495    118   
     2496    119    function commaMultiLine() {
     2497
     2498INSERTING AT: 116:25
     2499PAUSES AT: 117:0
     2500    113    };
     2501    114   
     2502    115    function commaOneLine() {
     2503 -> 116        inline(), inline(), i#nline();
     2504 => 117    |}
     2505    118   
     2506    119    function commaMultiLine() {
     2507    120        inline(),
     2508
     2509INSERTING AT: 119:0
     2510PAUSES AT: 120:4
     2511    116        inline(), inline(), inline();
     2512    117    }
     2513    118   
     2514 -> 119    #function commaMultiLine() {
     2515 => 120        |inline(),
     2516    121        inline(),
     2517    122        inline();
     2518    123    }
     2519
     2520INSERTING AT: 120:5
     2521PAUSES AT: 121:4
     2522    117    }
     2523    118   
     2524    119    function commaMultiLine() {
     2525 -> 120        i#nline(),
     2526 => 121        |inline(),
     2527    122        inline();
     2528    123    }
     2529    124   
     2530
     2531INSERTING AT: 121:5
     2532PAUSES AT: 122:4
     2533    118   
     2534    119    function commaMultiLine() {
     2535    120        inline(),
     2536 -> 121        i#nline(),
     2537 => 122        |inline();
     2538    123    }
     2539    124   
     2540
     2541INSERTING AT: 122:5
     2542PAUSES AT: 123:0
     2543    119    function commaMultiLine() {
     2544    120        inline(),
     2545    121        inline(),
     2546 -> 122        i#nline();
     2547 => 123    |}
     2548    124   
    23692549
    23702550
  • trunk/LayoutTests/inspector/debugger/breakpoints/resolved-dump-each-line-expected.txt

    r208097 r259781  
    24892489
    24902490INSERTING AT: 165:0
    2491 PAUSES AT: 166:0
     2491PAUSES AT: 165:4
    24922492    162    }
    24932493    163   
    24942494    164    var v1 = 1,
    2495  -> 165    #    v2 = 1;
    2496  => 166    |let l1 = 2,
     2495-=> 165    #    |v2 = 1;
     2496    166    let l1 = 2,
    24972497    167        l2 = 2;
    24982498    168    const c1 = 3,
    2499     169        c2 = 3;
    25002499
    25012500
     
    25122511
    25132512INSERTING AT: 167:0
    2514 PAUSES AT: 168:0
     2513PAUSES AT: 167:4
    25152514    164    var v1 = 1,
    25162515    165        v2 = 1;
    25172516    166    let l1 = 2,
    2518  -> 167    #    l2 = 2;
    2519  => 168    |const c1 = 3,
     2517-=> 167    #    |l2 = 2;
     2518    168    const c1 = 3,
    25202519    169        c2 = 3;
    25212520    170   
    2522     171    v1 = v2 = v1;
    25232521
    25242522
     
    25352533
    25362534INSERTING AT: 169:0
    2537 PAUSES AT: 171:0
     2535PAUSES AT: 169:4
    25382536    166    let l1 = 2,
    25392537    167        l2 = 2;
    25402538    168    const c1 = 3,
    2541  -> 169    #    c2 = 3;
     2539-=> 169    #    |c2 = 3;
    25422540    170   
    2543  => 171    |v1 = v2 = v1;
     2541    171    v1 = v2 = v1;
    25442542    172   
    2545     173    var {x, y} = obj;
    2546     174    var [w, z] = arr;
    25472543
    25482544
     
    30193015    209        a();
    30203016    210   
     3017    211    a(), b(), c();
    30213018
    30223019
     
    30293026    209        a();
    30303027    210   
     3028    211    a(), b(), c();
    30313029
    30323030
     
    30383036-=> 209    #    |a();
    30393037    210   
     3038    211    a(), b(), c();
     3039    212   
    30403040
    30413041
    30423042INSERTING AT: 210:0
     3043PAUSES AT: 211:0
     3044    207   
     3045    208    if (String.raw`test`)
     3046    209        a();
     3047 -> 210    #
     3048 => 211    |a(), b(), c();
     3049    212   
     3050    213    a(),
     3051    214    b(),
     3052
     3053
     3054INSERTING AT: 211:0
     3055PAUSES AT: 211:0
     3056    208    if (String.raw`test`)
     3057    209        a();
     3058    210   
     3059-=> 211    |a(), b(), c();
     3060    212   
     3061    213    a(),
     3062    214    b(),
     3063
     3064
     3065INSERTING AT: 212:0
     3066PAUSES AT: 213:0
     3067    209        a();
     3068    210   
     3069    211    a(), b(), c();
     3070 -> 212    #
     3071 => 213    |a(),
     3072    214    b(),
     3073    215    c();
     3074    216   
     3075
     3076
     3077INSERTING AT: 213:0
     3078PAUSES AT: 213:0
     3079    210   
     3080    211    a(), b(), c();
     3081    212   
     3082-=> 213    |a(),
     3083    214    b(),
     3084    215    c();
     3085    216   
     3086
     3087
     3088INSERTING AT: 214:0
     3089PAUSES AT: 214:0
     3090    211    a(), b(), c();
     3091    212   
     3092    213    a(),
     3093-=> 214    |b(),
     3094    215    c();
     3095    216   
     3096
     3097
     3098INSERTING AT: 215:0
     3099PAUSES AT: 215:0
     3100    212   
     3101    213    a(),
     3102    214    b(),
     3103-=> 215    |c();
     3104    216   
     3105
     3106
     3107INSERTING AT: 216:0
    30433108PRODUCES: Could not resolve breakpoint
    30443109
     
    44414506    113    };
    44424507    114   
     4508    115    function commaOneLine() {
    44434509
    44444510
     
    44474513
    44484514INSERTING AT: 114:0
     4515PRODUCES: Could not resolve breakpoint
     4516
     4517INSERTING AT: 115:0
     4518PAUSES AT: 116:4
     4519    112        }   
     4520    113    };
     4521    114   
     4522 -> 115    #function commaOneLine() {
     4523 => 116        |inline(), inline(), inline();
     4524    117    }
     4525    118   
     4526    119    function commaMultiLine() {
     4527
     4528
     4529INSERTING AT: 116:0
     4530PAUSES AT: 116:4
     4531    113    };
     4532    114   
     4533    115    function commaOneLine() {
     4534-=> 116    #    |inline(), inline(), inline();
     4535    117    }
     4536    118   
     4537    119    function commaMultiLine() {
     4538
     4539
     4540INSERTING AT: 117:0
     4541PAUSES AT: 117:0
     4542    114   
     4543    115    function commaOneLine() {
     4544    116        inline(), inline(), inline();
     4545-=> 117    |}
     4546    118   
     4547    119    function commaMultiLine() {
     4548    120        inline(),
     4549
     4550
     4551INSERTING AT: 118:0
     4552PRODUCES: Could not resolve breakpoint
     4553
     4554INSERTING AT: 119:0
     4555PAUSES AT: 120:4
     4556    116        inline(), inline(), inline();
     4557    117    }
     4558    118   
     4559 -> 119    #function commaMultiLine() {
     4560 => 120        |inline(),
     4561    121        inline(),
     4562    122        inline();
     4563    123    }
     4564
     4565
     4566INSERTING AT: 120:0
     4567PAUSES AT: 120:4
     4568    117    }
     4569    118   
     4570    119    function commaMultiLine() {
     4571-=> 120    #    |inline(),
     4572    121        inline(),
     4573    122        inline();
     4574    123    }
     4575
     4576
     4577INSERTING AT: 121:0
     4578PAUSES AT: 121:4
     4579    118   
     4580    119    function commaMultiLine() {
     4581    120        inline(),
     4582-=> 121    #    |inline(),
     4583    122        inline();
     4584    123    }
     4585    124   
     4586
     4587
     4588INSERTING AT: 122:0
     4589PAUSES AT: 122:4
     4590    119    function commaMultiLine() {
     4591    120        inline(),
     4592    121        inline(),
     4593-=> 122    #    |inline();
     4594    123    }
     4595    124   
     4596
     4597
     4598INSERTING AT: 123:0
     4599PAUSES AT: 123:0
     4600    120        inline(),
     4601    121        inline(),
     4602    122        inline();
     4603-=> 123    |}
     4604    124   
     4605
     4606
     4607INSERTING AT: 124:0
    44494608PRODUCES: Could not resolve breakpoint
    44504609
  • trunk/LayoutTests/inspector/debugger/breakpoints/resources/dump-functions.js

    r206653 r259781  
    113113    }   
    114114};
     115
     116function commaOneLine() {
     117    inline(), inline(), inline();
     118}
     119
     120function commaMultiLine() {
     121    inline(),
     122    inline(),
     123    inline();
     124}
  • trunk/LayoutTests/inspector/debugger/breakpoints/resources/dump-general.js

    r207312 r259781  
    209209if (String.raw`test`)
    210210    a();
     211
     212a(), b(), c();
     213
     214a(),
     215b(),
     216c();
  • trunk/LayoutTests/inspector/debugger/stepping/stepOver-expected.txt

    r206652 r259781  
    1 ALERT: log 1
     1ALERT: function log 1
     2ALERT: comma log 1
     3ALERT: comma log 2
     4ALERT: comma log 3
    25Checking pause locations when stepping with "stepOver".
    36
     
    69-- Running test case: Debugger.stepOver.statements
    710PAUSED (debugger-statement)
    8 PAUSE AT entry1:12:5
     11PAUSE AT testStatements:12:5
    912      8    }
    1013      9   
    11      10    function entry1() {
     14     10    function testStatements() {
    1215 ->  11        |debugger;
    1316     12        let x = 1;
     
    1518     14    }
    1619
    17 PAUSE AT entry1:13:5
     20PAUSE AT testStatements:13:5
    1821      9   
    19      10    function entry1() {
     22     10    function testStatements() {
    2023     11        debugger;
    2124 ->  12        |let x = 1;
     
    2427     15   
    2528
    26 PAUSE AT entry1:14:5
    27      10    function entry1() {
     29PAUSE AT testStatements:14:5
     30     10    function testStatements() {
    2831     11        debugger;
    2932     12        let x = 1;
     
    3134     14    }
    3235     15   
    33      16    function entry2() {
    34 
    35 PAUSE AT entry1:15:2
     36     16    function testFunctions() {
     37
     38PAUSE AT testStatements:15:2
    3639     11        debugger;
    3740     12        let x = 1;
     
    3942 ->  14    }|
    4043     15   
    41      16    function entry2() {
     44     16    function testFunctions() {
    4245     17        debugger;
    4346
     
    4649-- Running test case: Debugger.stepOver.function
    4750PAUSED (debugger-statement)
    48 PAUSE AT entry2:18:5
    49      14    }
    50      15   
    51      16    function entry2() {
     51PAUSE AT testFunctions:18:5
     52     14    }
     53     15   
     54     16    function testFunctions() {
    5255 ->  17        |debugger;
    5356     18        let before = 1;
    54      19        testAlert("log 1");
    55      20        let after = 2;
    56 
    57 PAUSE AT entry2:19:5
    58      15   
    59      16    function entry2() {
     57     19        testAlert("function log 1");
     58     20        let after = 2;
     59
     60PAUSE AT testFunctions:19:5
     61     15   
     62     16    function testFunctions() {
    6063     17        debugger;
    6164 ->  18        |let before = 1;
    62      19        testAlert("log 1");
    63      20        let after = 2;
    64      21    }
    65 
    66 PAUSE AT entry2:20:5
    67      16    function entry2() {
    68      17        debugger;
    69      18        let before = 1;
    70  ->  19        |testAlert("log 1");
    71      20        let after = 2;
    72      21    }
    73      22   
    74 
    75 PAUSE AT entry2:21:5
    76      17        debugger;
    77      18        let before = 1;
    78      19        testAlert("log 1");
     65     19        testAlert("function log 1");
     66     20        let after = 2;
     67     21    }
     68
     69PAUSE AT testFunctions:20:5
     70     16    function testFunctions() {
     71     17        debugger;
     72     18        let before = 1;
     73 ->  19        |testAlert("function log 1");
     74     20        let after = 2;
     75     21    }
     76     22   
     77
     78PAUSE AT testFunctions:21:5
     79     17        debugger;
     80     18        let before = 1;
     81     19        testAlert("function log 1");
    7982 ->  20        |let after = 2;
    8083     21    }
    8184     22   
    82      23    function entry3() {
    83 
    84 PAUSE AT entry2:22:2
    85      18        let before = 1;
    86      19        testAlert("log 1");
     85     23    function testEval() {
     86
     87PAUSE AT testFunctions:22:2
     88     18        let before = 1;
     89     19        testAlert("function log 1");
    8790     20        let after = 2;
    8891 ->  21    }|
    8992     22   
    90      23    function entry3() {
     93     23    function testEval() {
    9194     24        debugger;
    9295
     
    9598-- Running test case: Debugger.stepOver.eval
    9699PAUSED (debugger-statement)
    97 PAUSE AT entry3:25:5
    98      21    }
    99      22   
    100      23    function entry3() {
     100PAUSE AT testEval:25:5
     101     21    }
     102     22   
     103     23    function testEval() {
    101104 ->  24        |debugger;
    102105     25        let before = 1;
     
    104107     27        let after = 2;
    105108
    106 PAUSE AT entry3:26:5
    107      22   
    108      23    function entry3() {
     109PAUSE AT testEval:26:5
     110     22   
     111     23    function testEval() {
    109112     24        debugger;
    110113 ->  25        |let before = 1;
     
    113116     28    }
    114117
    115 PAUSE AT entry3:27:5
    116      23    function entry3() {
     118PAUSE AT testEval:27:5
     119     23    function testEval() {
    117120     24        debugger;
    118121     25        let before = 1;
     
    122125     29   
    123126
    124 PAUSE AT entry3:28:5
     127PAUSE AT testEval:28:5
    125128     24        debugger;
    126129     25        let before = 1;
     
    129132     28    }
    130133     29   
    131      30    function entry4() {
    132 
    133 PAUSE AT entry3:29:2
     134     30    function testLocalFunction() {
     135
     136PAUSE AT testEval:29:2
    134137     25        let before = 1;
    135138     26        eval("1 + 1");
     
    137140 ->  28    }|
    138141     29   
    139      30    function entry4() {
     142     30    function testLocalFunction() {
    140143     31        (function() {
    141144
     
    146149PAUSE AT <anonymous>:33:9
    147150     29   
    148      30    function entry4() {
     151     30    function testLocalFunction() {
    149152     31        (function() {
    150153 ->  32            |debugger;
     
    154157
    155158PAUSE AT <anonymous>:34:9
    156      30    function entry4() {
     159     30    function testLocalFunction() {
    157160     31        (function() {
    158161     32            debugger;
     
    171174     37   
    172175
    173 PAUSE AT entry4:36:5
     176PAUSE AT testLocalFunction:36:5
    174177     32            debugger;
    175178     33            let inner = 1;
     
    178181     36    }
    179182     37   
    180      38    // ---------
    181 
    182 PAUSE AT entry4:37:2
     183     38    function testCommas() {
     184
     185PAUSE AT testLocalFunction:37:2
    183186     33            let inner = 1;
    184187     34        })();
     
    186189 ->  36    }|
    187190     37   
    188      38    // ---------
    189      39   
    190 
    191 RESUMED
    192 
     191     38    function testCommas() {
     192     39        debugger;
     193
     194RESUMED
     195
     196-- Running test case: Debugger.stepOver.commas
     197PAUSED (debugger-statement)
     198PAUSE AT testCommas:40:5
     199     36    }
     200     37   
     201     38    function testCommas() {
     202 ->  39        |debugger;
     203     40        let a = 1,
     204     41            b = 2,
     205     42            c = 3;
     206
     207PAUSE AT testCommas:41:5
     208     37   
     209     38    function testCommas() {
     210     39        debugger;
     211 ->  40        |let a = 1,
     212     41            b = 2,
     213     42            c = 3;
     214     43        testAlert("comma log 1"), testAlert("comma log 2"), testAlert("comma log 3");
     215
     216PAUSE AT testCommas:42:9
     217     38    function testCommas() {
     218     39        debugger;
     219     40        let a = 1,
     220 ->  41            |b = 2,
     221     42            c = 3;
     222     43        testAlert("comma log 1"), testAlert("comma log 2"), testAlert("comma log 3");
     223     44    }
     224
     225PAUSE AT testCommas:43:9
     226     39        debugger;
     227     40        let a = 1,
     228     41            b = 2,
     229 ->  42            |c = 3;
     230     43        testAlert("comma log 1"), testAlert("comma log 2"), testAlert("comma log 3");
     231     44    }
     232     45   
     233
     234PAUSE AT testCommas:44:5
     235     40        let a = 1,
     236     41            b = 2,
     237     42            c = 3;
     238 ->  43        |testAlert("comma log 1"), testAlert("comma log 2"), testAlert("comma log 3");
     239     44    }
     240     45   
     241     46    // ---------
     242
     243PAUSE AT testCommas:44:31
     244     40        let a = 1,
     245     41            b = 2,
     246     42            c = 3;
     247 ->  43        testAlert("comma log 1"), |testAlert("comma log 2"), testAlert("comma log 3");
     248     44    }
     249     45   
     250     46    // ---------
     251
     252PAUSE AT testCommas:44:57
     253     40        let a = 1,
     254     41            b = 2,
     255     42            c = 3;
     256 ->  43        testAlert("comma log 1"), testAlert("comma log 2"), |testAlert("comma log 3");
     257     44    }
     258     45   
     259     46    // ---------
     260
     261PAUSE AT testCommas:45:2
     262     41            b = 2,
     263     42            c = 3;
     264     43        testAlert("comma log 1"), testAlert("comma log 2"), testAlert("comma log 3");
     265 ->  44    }|
     266     45   
     267     46    // ---------
     268     47   
     269
     270RESUMED
     271
  • trunk/LayoutTests/inspector/debugger/stepping/stepOver.html

    r220119 r259781  
    99}
    1010
    11 function entry1() {
     11function testStatements() {
    1212    debugger;
    1313    let x = 1;
     
    1515}
    1616
    17 function entry2() {
     17function testFunctions() {
    1818    debugger;
    1919    let before = 1;
    20     testAlert("log 1");
     20    testAlert("function log 1");
    2121    let after = 2;
    2222}
    2323
    24 function entry3() {
     24function testEval() {
    2525    debugger;
    2626    let before = 1;
     
    2929}
    3030
    31 function entry4() {
     31function testLocalFunction() {
    3232    (function() {
    3333        debugger;
     
    3535    })();
    3636    let outer = 2;
     37}
     38
     39function testCommas() {
     40    debugger;
     41    let a = 1,
     42        b = 2,
     43        c = 3;
     44    testAlert("comma log 1"), testAlert("comma log 2"), testAlert("comma log 3");
    3745}
    3846
     
    7078        name: "Debugger.stepOver.statements",
    7179        description: "step-over should step over statements.",
    72         expression: "setTimeout(entry1)",
     80        expression: "setTimeout(testStatements)",
    7381    });
    7482
     
    7684        name: "Debugger.stepOver.function",
    7785        description: "step-over should step over function calls.",
    78         expression: "setTimeout(entry2)",
     86        expression: "setTimeout(testFunctions)",
    7987    });
    8088
     
    8290        name: "Debugger.stepOver.eval",
    8391        description: "step-over should step over an eval program.",
    84         expression: "setTimeout(entry3)",
     92        expression: "setTimeout(testEval)",
    8593    });
    8694
     
    8896        name: "Debugger.stepOver.innerFunction",
    8997        description: "step-over should step out of a function to its caller.",
    90         expression: "setTimeout(entry4)",
     98        expression: "setTimeout(testLocalFunction)",
     99    });
     100
     101    addTestCase({
     102        name: "Debugger.stepOver.commas",
     103        description: "step-over should step over comma expressions, treating them as statements.",
     104        expression: "setTimeout(testCommas)",
    91105    });
    92106
  • trunk/LayoutTests/inspector/debugger/stepping/stepping-control-flow-expected.txt

    r207228 r259781  
    811811    108    }
    812812    109   
    813     110    // ---------
     813    110    function entryIfWithCommas() {
    814814
    815815ACTION: step-over
     
    820820 -> 108    }|
    821821    109   
    822     110    // ---------
    823     111   
    824 
    825 ACTION: resume
    826 RESUMED
    827 PASS: Should have used all steps.
    828 
     822    110    function entryIfWithCommas() {
     823    111        debugger;
     824
     825ACTION: resume
     826RESUMED
     827PASS: Should have used all steps.
     828
     829-- Running test case: Debugger.stepping.IfWithCommas
     830EXPRESSION: setTimeout(entryIfWithCommas)
     831STEPS: over, over, over, over, over, resume
     832PAUSED (debugger-statement)
     833PAUSE AT entryIfWithCommas:112:5
     834    108    }
     835    109   
     836    110    function entryIfWithCommas() {
     837 -> 111        |debugger;
     838    112        if (a(), b(), a())
     839    113            b();
     840    114    }
     841
     842ACTION: step-over
     843PAUSE AT entryIfWithCommas:113:9
     844    109   
     845    110    function entryIfWithCommas() {
     846    111        debugger;
     847 -> 112        if (|a(), b(), a())
     848    113            b();
     849    114    }
     850    115   
     851
     852ACTION: step-over
     853PAUSE AT entryIfWithCommas:113:14
     854    109   
     855    110    function entryIfWithCommas() {
     856    111        debugger;
     857 -> 112        if (a(), |b(), a())
     858    113            b();
     859    114    }
     860    115   
     861
     862ACTION: step-over
     863PAUSE AT entryIfWithCommas:113:19
     864    109   
     865    110    function entryIfWithCommas() {
     866    111        debugger;
     867 -> 112        if (a(), b(), |a())
     868    113            b();
     869    114    }
     870    115   
     871
     872ACTION: step-over
     873PAUSE AT entryIfWithCommas:114:9
     874    110    function entryIfWithCommas() {
     875    111        debugger;
     876    112        if (a(), b(), a())
     877 -> 113            |b();
     878    114    }
     879    115   
     880    116    // ---------
     881
     882ACTION: step-over
     883PAUSE AT entryIfWithCommas:115:2
     884    111        debugger;
     885    112        if (a(), b(), a())
     886    113            b();
     887 -> 114    }|
     888    115   
     889    116    // ---------
     890    117   
     891
     892ACTION: resume
     893RESUMED
     894PASS: Should have used all steps.
     895
  • trunk/LayoutTests/inspector/debugger/stepping/stepping-control-flow.html

    r207228 r259781  
    109109}
    110110
     111function entryIfWithCommas() {
     112    debugger;
     113    if (a(), b(), a())
     114        b();
     115}
     116
    111117// ---------
    112118
     
    287293    });
    288294
     295    addSteppingTestCase({
     296        name: "Debugger.stepping.IfWithCommas",
     297        description: "Should pause before each comma sub-expression.",
     298        expression: "setTimeout(entryIfWithCommas)",
     299        steps: [
     300            "over",
     301                "over", // a()
     302                "over", // b()
     303                "over", // a()
     304                "over", // a() - leaving entry
     305            "resume",
     306        ]
     307    });
     308
    289309    loadMainPageContent().then(() => {
    290310        suite.runTestCasesAndFinish();
  • trunk/LayoutTests/inspector/debugger/stepping/stepping-function-calls-expected.txt

    r206652 r259781  
    976976-- Running test case: Debugger.stepping.ComplexStatement4
    977977EXPRESSION: setTimeout(entryCommaExpression)
    978 STEPS: over, over, resume
     978STEPS: over, over, over, over, resume
    979979PAUSED (debugger-statement)
    980980PAUSE AT entryCommaExpression:51:5
     
    993993     50        debugger;
    994994 ->  51        |a(), b(), a();
     995     52    }
     996     53   
     997     54    function entryDotPropertyAccessCall() {
     998
     999ACTION: step-over
     1000PAUSE AT entryCommaExpression:52:10
     1001     48   
     1002     49    function entryCommaExpression() {
     1003     50        debugger;
     1004 ->  51        a(), |b(), a();
     1005     52    }
     1006     53   
     1007     54    function entryDotPropertyAccessCall() {
     1008
     1009ACTION: step-over
     1010PAUSE AT entryCommaExpression:52:15
     1011     48   
     1012     49    function entryCommaExpression() {
     1013     50        debugger;
     1014 ->  51        a(), b(), |a();
    9951015     52    }
    9961016     53   
  • trunk/LayoutTests/inspector/debugger/stepping/stepping-function-calls.html

    r206652 r259781  
    328328        steps: [
    329329            "over",
    330                 "over", // complete: a(), b(), a()
     330                "over", // a()
     331                "over", // b()
     332                "over", // a()
    331333            "resume"
    332334        ]
  • trunk/LayoutTests/inspector/debugger/stepping/stepping-loops-expected.txt

    r207228 r259781  
    839839 ->  74    }|
    840840     75   
    841      76    // ---------
    842      77   
     841     76    function entryForWithCommas() {
     842     77        debugger;
    843843
    844844ACTION: resume
     
    846846PASS: Should have used all steps.
    847847
     848-- Running test case: Debugger.stepping.ForWithCommasStepOver
     849EXPRESSION: setTimeout(entryForWithCommas)
     850STEPS: over, over, over, over, over, over, over, over, over, over, over, over, over, over, over, resume
     851PAUSED (debugger-statement)
     852PAUSE AT entryForWithCommas:78:5
     853     74    }
     854     75   
     855     76    function entryForWithCommas() {
     856 ->  77        |debugger;
     857     78        for (let i = 0, length = 0; length = 2, i < length; length = 1, ++i)
     858     79            a();
     859     80    }
     860
     861ACTION: step-over
     862PAUSE AT entryForWithCommas:79:10
     863     75   
     864     76    function entryForWithCommas() {
     865     77        debugger;
     866 ->  78        for (|let i = 0, length = 0; length = 2, i < length; length = 1, ++i)
     867     79            a();
     868     80    }
     869     81   
     870
     871ACTION: step-over
     872PAUSE AT entryForWithCommas:79:21
     873     75   
     874     76    function entryForWithCommas() {
     875     77        debugger;
     876 ->  78        for (let i = 0, |length = 0; length = 2, i < length; length = 1, ++i)
     877     79            a();
     878     80    }
     879     81   
     880
     881ACTION: step-over
     882PAUSE AT entryForWithCommas:79:33
     883     75   
     884     76    function entryForWithCommas() {
     885     77        debugger;
     886 ->  78        for (let i = 0, length = 0; |length = 2, i < length; length = 1, ++i)
     887     79            a();
     888     80    }
     889     81   
     890
     891ACTION: step-over
     892PAUSE AT entryForWithCommas:79:45
     893     75   
     894     76    function entryForWithCommas() {
     895     77        debugger;
     896 ->  78        for (let i = 0, length = 0; length = 2, |i < length; length = 1, ++i)
     897     79            a();
     898     80    }
     899     81   
     900
     901ACTION: step-over
     902PAUSE AT entryForWithCommas:80:9
     903     76    function entryForWithCommas() {
     904     77        debugger;
     905     78        for (let i = 0, length = 0; length = 2, i < length; length = 1, ++i)
     906 ->  79            |a();
     907     80    }
     908     81   
     909     82    // ---------
     910
     911ACTION: step-over
     912PAUSE AT entryForWithCommas:79:57
     913     75   
     914     76    function entryForWithCommas() {
     915     77        debugger;
     916 ->  78        for (let i = 0, length = 0; length = 2, i < length; |length = 1, ++i)
     917     79            a();
     918     80    }
     919     81   
     920
     921ACTION: step-over
     922PAUSE AT entryForWithCommas:79:69
     923     75   
     924     76    function entryForWithCommas() {
     925     77        debugger;
     926 ->  78        for (let i = 0, length = 0; length = 2, i < length; length = 1, |++i)
     927     79            a();
     928     80    }
     929     81   
     930
     931ACTION: step-over
     932PAUSE AT entryForWithCommas:79:33
     933     75   
     934     76    function entryForWithCommas() {
     935     77        debugger;
     936 ->  78        for (let i = 0, length = 0; |length = 2, i < length; length = 1, ++i)
     937     79            a();
     938     80    }
     939     81   
     940
     941ACTION: step-over
     942PAUSE AT entryForWithCommas:79:45
     943     75   
     944     76    function entryForWithCommas() {
     945     77        debugger;
     946 ->  78        for (let i = 0, length = 0; length = 2, |i < length; length = 1, ++i)
     947     79            a();
     948     80    }
     949     81   
     950
     951ACTION: step-over
     952PAUSE AT entryForWithCommas:80:9
     953     76    function entryForWithCommas() {
     954     77        debugger;
     955     78        for (let i = 0, length = 0; length = 2, i < length; length = 1, ++i)
     956 ->  79            |a();
     957     80    }
     958     81   
     959     82    // ---------
     960
     961ACTION: step-over
     962PAUSE AT entryForWithCommas:79:57
     963     75   
     964     76    function entryForWithCommas() {
     965     77        debugger;
     966 ->  78        for (let i = 0, length = 0; length = 2, i < length; |length = 1, ++i)
     967     79            a();
     968     80    }
     969     81   
     970
     971ACTION: step-over
     972PAUSE AT entryForWithCommas:79:69
     973     75   
     974     76    function entryForWithCommas() {
     975     77        debugger;
     976 ->  78        for (let i = 0, length = 0; length = 2, i < length; length = 1, |++i)
     977     79            a();
     978     80    }
     979     81   
     980
     981ACTION: step-over
     982PAUSE AT entryForWithCommas:79:33
     983     75   
     984     76    function entryForWithCommas() {
     985     77        debugger;
     986 ->  78        for (let i = 0, length = 0; |length = 2, i < length; length = 1, ++i)
     987     79            a();
     988     80    }
     989     81   
     990
     991ACTION: step-over
     992PAUSE AT entryForWithCommas:79:45
     993     75   
     994     76    function entryForWithCommas() {
     995     77        debugger;
     996 ->  78        for (let i = 0, length = 0; length = 2, |i < length; length = 1, ++i)
     997     79            a();
     998     80    }
     999     81   
     1000
     1001ACTION: step-over
     1002PAUSE AT entryForWithCommas:81:2
     1003     77        debugger;
     1004     78        for (let i = 0, length = 0; length = 2, i < length; length = 1, ++i)
     1005     79            a();
     1006 ->  80    }|
     1007     81   
     1008     82    // ---------
     1009     83   
     1010
     1011ACTION: resume
     1012RESUMED
     1013PASS: Should have used all steps.
     1014
  • trunk/LayoutTests/inspector/debugger/stepping/stepping-loops.html

    r207228 r259781  
    7575}
    7676
     77function entryForWithCommas() {
     78    debugger;
     79    for (let i = 0, length = 0; length = 2, i < length; length = 1, ++i)
     80        a();
     81}
     82
    7783// ---------
    7884
     
    231237                "over", // complete: (i === 2) [i=2]
    232238                "over", // complete: break - leaving entry
     239            "resume",
     240        ]
     241    });
     242
     243    addSteppingTestCase({
     244        name: "Debugger.stepping.ForWithCommasStepOver",
     245        description: "Should be able to step over every comma separated init and condition in traditional for loops.",
     246        expression: "setTimeout(entryForWithCommas)",
     247        steps: [
     248            "over",
     249                "over", // complete: let i = 0
     250                "over", // complete: length = 0
     251                "over", // complete: length = 2
     252                "over", // complete: i < length
     253                "over", // complete: a()
     254                "over", // complete: length = 1
     255                "over", // complete: ++i
     256                "over", // complete: length = 2
     257                "over", // complete: i < length [i=1]
     258                "over", // complete: a()
     259                "over", // complete: length = 1
     260                "over", // complete: ++i
     261                "over", // complete: length = 2
     262                "over", // complete: i < length [i=2] - leaving entry
    233263            "resume",
    234264        ]
  • trunk/LayoutTests/inspector/debugger/stepping/stepping-misc-expected.txt

    r207312 r259781  
    390390-- Running test case: Debugger.stepping.VariableDeclaration
    391391EXPRESSION: setTimeout(entryVariableDeclaration)
    392 STEPS: over, in, in, in, resume
     392STEPS: over, in, in, in, in, in, in, resume
    393393PAUSED (debugger-statement)
    394394PAUSE AT entryVariableDeclaration:58:5
     
    412412
    413413ACTION: step-in
     414PAUSE AT entryVariableDeclaration:60:9
     415     56    function entryVariableDeclaration() {
     416     57        debugger;
     417     58        var a = 1,
     418 ->  59            |x = 1;
     419     60        let b = 2,
     420     61            y = 2;
     421     62        const c = 3,
     422
     423ACTION: step-in
    414424PAUSE AT entryVariableDeclaration:61:5
    415425     57        debugger;
     
    422432
    423433ACTION: step-in
     434PAUSE AT entryVariableDeclaration:62:9
     435     58        var a = 1,
     436     59            x = 1;
     437     60        let b = 2,
     438 ->  61            |y = 2;
     439     62        const c = 3,
     440     63            z = 3;
     441     64    }
     442
     443ACTION: step-in
    424444PAUSE AT entryVariableDeclaration:63:5
    425445     59            x = 1;
     
    432452
    433453ACTION: step-in
     454PAUSE AT entryVariableDeclaration:64:9
     455     60        let b = 2,
     456     61            y = 2;
     457     62        const c = 3,
     458 ->  63            |z = 3;
     459     64    }
     460     65   
     461     66    function entryDestructuring() {
     462
     463ACTION: step-in
    434464PAUSE AT entryVariableDeclaration:65:2
    435465     61            y = 2;
  • trunk/LayoutTests/inspector/debugger/stepping/stepping-misc.html

    r207312 r259781  
    185185    addSteppingTestCase({
    186186        name: "Debugger.stepping.VariableDeclaration",
    187         description: "Should be able to step through variable declarations.",
     187        description: "Should be able to step to each individual variable declaration.",
    188188        expression: "setTimeout(entryVariableDeclaration)",
    189189        steps: [
    190190            "over",
    191                        // FIXME: Opportunity to pause at assignment expressions.
    192                 "in",  // a = 1, x = 1
    193                 "in",  // b = 2, y = 2
    194                 "in",  // c = 3, z = 3
     191                "in",  // a = 1
     192                "in",  // x = 1
     193                "in",  // b = 2
     194                "in",  // y = 2
     195                "in",  // c = 3
     196                "in",  // z = 3
    195197            "resume",
    196198        ]
  • trunk/LayoutTests/inspector/formatting/resources/javascript-tests/for-statements-expected.js

    r248760 r259781  
    6767}
    6868
     69for (var x = 1; x < 10; ++x)
     70    1;
    6971for (var x = 1; x < len; ++x)
    7072    1;
    7173for (var x = 1, len = 10; x < len; ++x)
    7274    1;
     75for (var x = 1, len = 10; len = 20, x < len; ++x)
     76    1;
     77for (var x = 1, len = 10; len = 20, x < len; len = 15, ++x)
     78    1;
    7379
     80for (x = 1; x < 10; ++x) {
     81    1
     82}
    7483for (x = 1; x < len; ++x) {
    7584    1
     
    7887    1
    7988}
     89for (x = 1, len = 10; len = 20, x < len; ++x) {
     90    1
     91}
     92for (x = 1, len = 10; len = 20, x < len; len = 15, ++x) {
     93    1
     94}
    8095
     96for (var x = 1; x < 10; ++x) {
     97    1
     98}
    8199for (var x = 1; x < len; ++x) {
    82100    1
     
    85103    1
    86104}
     105for (var x = 1, len = 10; len = 20, x < len; len = 15, ++x) {
     106    1
     107}
    87108
     109for (var x = 1; x < 10; ++x) {
     110    1
     111}
    88112for (var x = 1; x < len; ++x) {
    89113    1
    90114}
    91115for (var x = 1, len = 10; x < len; ++x) {
     116    1
     117}
     118for (var x = 1, len = 10; len = 20, x < len; len = 15, ++x) {
    92119    1
    93120}
  • trunk/LayoutTests/inspector/formatting/resources/javascript-tests/for-statements.js

    r248760 r259781  
    3535for ( 1 ; 2 ; 3 ) {1}
    3636
     37for(var x=1;x<10;++x)1;
    3738for(var x=1;x<len;++x)1;
    3839for(var x=1,len=10;x<len;++x)1;
     40for(var x=1,len=10;len=20,x<len;++x)1;
     41for(var x=1,len=10;len=20,x<len;len=15,++x)1;
    3942
     43for(x=1;x<10;++x){1}
    4044for(x=1;x<len;++x){1}
    4145for(x=1,len=10;x<len;++x){1}
     46for(x=1,len=10;len=20,x<len;++x){1}
     47for(x=1,len=10;len=20,x<len;len=15,++x){1}
    4248
     49for(var x=1;x<10;++x){1}
    4350for(var x=1;x<len;++x){1}
    4451for(var x=1,len=10;x<len;++x){1}
     52for(var x=1,len=10;len=20,x<len;len=15,++x){1}
    4553
    46 for(var x=1;x<len;++x){1}
    47 for(var x=1,len=10;x<len;++x){1}
     54for(  var  x  =  1  ;  x  <  10  ;  ++x  )  {  1  } 
     55for(  var  x  =  1  ;  x  <  len  ;  ++x  )  {  1  } 
     56for(  var  x  =  1  ,  len  =  10  ;  x  <  len  ;  ++x  )  {  1  }
     57for(  var  x  =  1  ,  len  =  10  ;  len  =  20  ,  x  <  len  ;  len  =  15  ,  ++x  )  {  1  }
    4858
    4959for(1;2;3)for(4;5;6)for(7;8;9);
  • trunk/LayoutTests/inspector/formatting/resources/javascript-tests/if-statement-expected.js

    r199168 r259781  
    166166    if (true)
    167167        1;
     168
     169if (1, 2, 3) {}
     170if (1, 2, 3) {}
  • trunk/LayoutTests/inspector/formatting/resources/javascript-tests/if-statement.js

    r199168 r259781  
    4848if (true)
    49491;
     50
     51if(1,2,3){}
     52if  (  1  ,  2  ,  3  )  {  }
  • trunk/LayoutTests/inspector/formatting/resources/javascript-tests/sample-jquery-expected.js

    r199168 r259781  
    6363                    if (a.id !== i[2])
    6464                        return r.find(e);
    65                     this.length = 1, this[0] = a
     65                    this.length = 1,
     66                    this[0] = a
    6667                }
    6768                return this.context = o, this.selector = e, this
     
    115116        sort: [].sort,
    116117        splice: [].splice
    117     }, b.fn.init.prototype = b.fn, b.extend = b.fn.extend = function() {
     118    },
     119    b.fn.init.prototype = b.fn,
     120    b.extend = b.fn.extend = function() {
    118121        var e,
    119122            n,
     
    129132            if (null != (o = arguments[u]))
    130133                for (i in o)
    131                     e = s[i], r = o[i], s !== r && (c && r && (b.isPlainObject(r) || (n = b.isArray(r))) ? (n ? (n = !1, a = e && b.isArray(e) ? e : []) : a = e && b.isPlainObject(e) ? e : {}, s[i] = b.extend(c, a, r)) : r !== t && (s[i] = r));
     134                    e = s[i],
     135                    r = o[i],
     136                    s !== r && (c && r && (b.isPlainObject(r) || (n = b.isArray(r))) ? (n ? (n = !1, a = e && b.isArray(e) ? e : []) : a = e && b.isPlainObject(e) ? e : {}, s[i] = b.extend(c, a, r)) : r !== t && (s[i] = r));
    132137        return s
    133     }, b.extend({
     138    },
     139    b.extend({
    134140        noConflict: function(t) {
    135141            return e.$ === b && (e.$ = u), t && e.jQuery === b && (e.jQuery = s), b
     
    144150                if (!o.body)
    145151                    return setTimeout(b.ready);
    146                 b.isReady = !0, e !== !0 && --b.readyWait > 0 || (n.resolveWith(o, [b]), b.fn.trigger && b(o).trigger("ready").off("ready"))
     152                b.isReady = !0,
     153                e !== !0 && --b.readyWait > 0 || (n.resolveWith(o, [b]), b.fn.trigger && b(o).trigger("ready").off("ready"))
    147154            }
    148155        },
     
    188195            if (!e || "string" != typeof e)
    189196                return null;
    190             "boolean" == typeof t && (n = t, t = !1), t = t || o;
     197            "boolean" == typeof t && (n = t, t = !1),
     198            t = t || o;
    191199            var r = C.exec(e),
    192200                i = !n && [];
     
    282290                a = e.length;
    283291            for (n = !!n; a > o; o++)
    284                 r = !!t(e[o], o), n !== r && i.push(e[o]);
     292                r = !!t(e[o], o),
     293                n !== r && i.push(e[o]);
    285294            return i
    286295        },
     
    293302            if (a)
    294303                for (; o > i; i++)
    295                     r = t(e[i], i, n), null != r && (s[s.length] = r);
     304                    r = t(e[i], i, n),
     305                    null != r && (s[s.length] = r);
    296306            else
    297307                for (i in e)
    298                     r = t(e[i], i, n), null != r && (s[s.length] = r);
     308                    r = t(e[i], i, n),
     309                    null != r && (s[s.length] = r);
    299310            return f.apply([], s)
    300311        },
     
    326337            return (new Date).getTime()
    327338        }
    328     }), b.ready.promise = function(t) {
     339    }),
     340    b.ready.promise = function(t) {
    329341        if (!n)
    330342            if (n = b.Deferred(), "complete" === o.readyState)
    331343                setTimeout(b.ready);
    332344            else if (o.addEventListener)
    333                 o.addEventListener("DOMContentLoaded", H, !1), e.addEventListener("load", H, !1);
     345                o.addEventListener("DOMContentLoaded", H, !1),
     346                e.addEventListener("load", H, !1);
    334347            else {
    335                 o.attachEvent("onreadystatechange", H), e.attachEvent("onload", H);
     348                o.attachEvent("onreadystatechange", H),
     349                e.attachEvent("onload", H);
    336350                var r = !1;
    337351                try {
     
    345359                            return setTimeout(a, 50)
    346360                        }
    347                         q(), b.ready()
     361                        q(),
     362                        b.ready()
    348363                    }
    349364                }()
    350365            }
    351366        return n.promise(t)
    352     }, b.each("Boolean Number String Function Array Date RegExp Object Error".split(" "), function(e, t) {
     367    },
     368    b.each("Boolean Number String Function Array Date RegExp Object Error".split(" "), function(e, t) {
    353369        l["[object " + t + "]"] = t.toLowerCase()
    354370    });
     
    382398                        break
    383399                    }
    384                 n = !1, u && (l ? l.length && c(l.shift()) : r ? u = [] : p.disable())
     400                n = !1,
     401                u && (l ? l.length && c(l.shift()) : r ? u = [] : p.disable())
    385402            },
    386403            p = {
     
    393410                                "function" === r ? e.unique && p.has(n) || u.push(n) : n && n.length && "string" !== r && i(n)
    394411                            })
    395                         })(arguments), n ? o = u.length : r && (s = t, c(r))
     412                        })(arguments),
     413                        n ? o = u.length : r && (s = t, c(r))
    396414                    }
    397415                    return this
     
    401419                        var r;
    402420                        while ((r = b.inArray(t, u, r)) > -1)
    403                             u.splice(r, 1), n && (o >= r && o--, a >= r && a--)
     421                            u.splice(r, 1),
     422                            n && (o >= r && o--, a >= r && a--)
    404423                    }), this
    405424                },
     
    433452            };
    434453        return p
    435     }, b.extend({
     454    },
     455    b.extend({
    436456        Deferred: function(e) {
    437457            var t = [["resolve", "done", b.Callbacks("once memory"), "resolved"], ["reject", "fail", b.Callbacks("once memory"), "rejected"], ["notify", "progress", b.Callbacks("memory")]],
     
    454474                                    e && b.isFunction(e.promise) ? e.promise().done(n.resolve).fail(n.reject).progress(n.notify) : n[a + "With"](this === r ? n.promise() : this, s ? [e] : arguments)
    455475                                })
    456                             }), e = null
     476                            }),
     477                            e = null
    457478                        }).promise()
    458479                    },
     
    465486                var a = o[2],
    466487                    s = o[3];
    467                 r[o[1]] = a.add, s && a.add(function() {
     488                r[o[1]] = a.add,
     489                s && a.add(function() {
    468490                    n = s
    469                 }, t[1 ^ e][2].disable, t[2][2].lock), i[o[0]] = function() {
     491                }, t[1 ^ e][2].disable, t[2][2].lock),
     492                i[o[0]] = function() {
    470493                    return i[o[0] + "With"](this === i ? r : this, arguments), this
    471                 }, i[o[0] + "With"] = a.fireWith
     494                },
     495                i[o[0] + "With"] = a.fireWith
    472496            }), r.promise(i), e && e.call(i, i), i
    473497        },
     
    480504                a = function(e, t, n) {
    481505                    return function(r) {
    482                         t[e] = this, n[e] = arguments.length > 1 ? h.call(arguments) : r, n === s ? o.notifyWith(t, n) : --i || o.resolveWith(t, n)
     506                        t[e] = this,
     507                        n[e] = arguments.length > 1 ? h.call(arguments) : r,
     508                        n === s ? o.notifyWith(t, n) : --i || o.resolveWith(t, n)
    483509                    }
    484510                },
     
    491517            return i || o.resolveWith(l, n), o.promise()
    492518        }
    493     }), b.support = function() {
     519    }),
     520    b.support = function() {
    494521        var t,
    495522            n,
     
    505532        if (d.setAttribute("className", "t"), d.innerHTML = "  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>", n = d.getElementsByTagName("*"), r = d.getElementsByTagName("a")[0], !n || !r || !n.length)
    506533            return {};
    507         s = o.createElement("select"), l = s.appendChild(o.createElement("option")), a = d.getElementsByTagName("input")[0], r.style.cssText = "top:1px;float:left;opacity:.5", t = {
     534        s = o.createElement("select"),
     535        l = s.appendChild(o.createElement("option")),
     536        a = d.getElementsByTagName("input")[0],
     537        r.style.cssText = "top:1px;float:left;opacity:.5",
     538        t = {
    508539            getSetAttribute: "t" !== d.className,
    509540            leadingWhitespace: 3 === d.firstChild.nodeType,
     
    526557            boxSizingReliable: !0,
    527558            pixelPosition: !1
    528         }, a.checked = !0, t.noCloneChecked = a.cloneNode(!0).checked, s.disabled = !0, t.optDisabled = !l.disabled;
     559        },
     560        a.checked = !0,
     561        t.noCloneChecked = a.cloneNode(!0).checked,
     562        s.disabled = !0,
     563        t.optDisabled = !l.disabled;
    529564        try {
    530565            delete d.test
     
    532567            t.deleteExpando = !1
    533568        }
    534         a = o.createElement("input"), a.setAttribute("value", ""), t.input = "" === a.getAttribute("value"), a.value = "t", a.setAttribute("type", "radio"), t.radioValue = "t" === a.value, a.setAttribute("checked", "t"), a.setAttribute("name", "t"), u = o.createDocumentFragment(), u.appendChild(a), t.appendChecked = a.checked, t.checkClone = u.cloneNode(!0).cloneNode(!0).lastChild.checked, d.attachEvent && (d.attachEvent("onclick", function() {
     569        a = o.createElement("input"),
     570        a.setAttribute("value", ""),
     571        t.input = "" === a.getAttribute("value"),
     572        a.value = "t",
     573        a.setAttribute("type", "radio"),
     574        t.radioValue = "t" === a.value,
     575        a.setAttribute("checked", "t"),
     576        a.setAttribute("name", "t"),
     577        u = o.createDocumentFragment(),
     578        u.appendChild(a),
     579        t.appendChecked = a.checked,
     580        t.checkClone = u.cloneNode(!0).cloneNode(!0).lastChild.checked,
     581        d.attachEvent && (d.attachEvent("onclick", function() {
    535582            t.noCloneEvent = !1
    536583        }), d.cloneNode(!0).click());
     
    540587            focusin: !0
    541588        })
    542             d.setAttribute(c = "on" + f, "t"), t[f + "Bubbles"] = c in e || d.attributes[c].expando === !1;
     589            d.setAttribute(c = "on" + f, "t"),
     590            t[f + "Bubbles"] = c in e || d.attributes[c].expando === !1;
    543591        return d.style.backgroundClip = "content-box", d.cloneNode(!0).style.backgroundClip = "", t.clearCloneStyle = "content-box" === d.style.backgroundClip, b(function() {
    544592            var n,
     
    616664            return !t || t !== !0 && e.getAttribute("classid") === t
    617665        }
    618     }), b.fn.extend({
     666    }),
     667    b.fn.extend({
    619668        data: function(e, n) {
    620669            var r,
     
    626675                if (this.length && (s = b.data(o), 1 === o.nodeType && !b._data(o, "parsedAttrs"))) {
    627676                    for (r = o.attributes; r.length > a; a++)
    628                         i = r[a].name, i.indexOf("data-") || (i = b.camelCase(i.slice(5)), W(o, i, s[i]));
     677                        i = r[a].name,
     678                        i.indexOf("data-") || (i = b.camelCase(i.slice(5)), W(o, i, s[i]));
    629679                    b._data(o, "parsedAttrs", !0)
    630680                }
     
    679729                    b.dequeue(e, t)
    680730                };
    681             "inprogress" === i && (i = n.shift(), r--), o.cur = i, i && ("fx" === t && n.unshift("inprogress"), delete o.stop, i.call(e, a, o)), !r && o && o.empty.fire()
     731            "inprogress" === i && (i = n.shift(), r--),
     732            o.cur = i,
     733            i && ("fx" === t && n.unshift("inprogress"), delete o.stop, i.call(e, a, o)),
     734            !r && o && o.empty.fire()
    682735        },
    683736        _queueHooks: function(e, t) {
     
    685738            return b._data(e, n) || b._data(e, n, {
    686739                    empty: b.Callbacks("once memory").add(function() {
    687                         b._removeData(e, t + "queue"), b._removeData(e, n)
     740                        b._removeData(e, t + "queue"),
     741                        b._removeData(e, n)
    688742                    })
    689743                })
    690744        }
    691     }), b.fn.extend({
     745    }),
     746    b.fn.extend({
    692747        queue: function(e, n) {
    693748            var r = 2;
    694749            return "string" != typeof e && (n = e, e = "fx", r--), r > arguments.length ? b.queue(this[0], e) : n === t ? this : this.each(function() {
    695750                var t = b.queue(this, e, n);
    696                 b._queueHooks(this, e), "fx" === e && "inprogress" !== t[0] && b.dequeue(this, e)
     751                b._queueHooks(this, e),
     752                "fx" === e && "inprogress" !== t[0] && b.dequeue(this, e)
    697753            })
    698754        },
     
    722778                    --i || o.resolveWith(a, [a])
    723779                };
    724             "string" != typeof e && (n = e, e = t), e = e || "fx";
     780            "string" != typeof e && (n = e, e = t),
     781            e = e || "fx";
    725782            while (s--)
    726                 r = b._data(a[s], e + "queueHooks"), r && r.empty && (i++, r.empty.add(u));
     783                r = b._data(a[s], e + "queueHooks"),
     784                r && r.empty && (i++, r.empty.add(u));
    727785            return u(), o.promise(n)
    728786        }
     
    753811            return e = b.propFix[e] || e, this.each(function() {
    754812                try {
    755                     this[e] = t, delete this[e]
     813                    this[e] = t,
     814                    delete this[e]
    756815                } catch (n) {}
    757816            })
     
    817876                        l = e.match(w) || [];
    818877                    while (o = l[a++])
    819                         u = r ? u : !s.hasClass(o), s[u ? "addClass" : "removeClass"](o)
     878                        u = r ? u : !s.hasClass(o),
     879                        s[u ? "addClass" : "removeClass"](o)
    820880                } else
    821881                    (n === i || "boolean" === n) && (this.className && b._data(this, "__className__", this.className), this.className = this.className || e === !1 ? "" : b._data(this, "__className__") || "")
     
    849909            }
    850910        }
    851     }), b.extend({
     911    }),
     912    b.extend({
    852913        valHooks: {
    853914            option: {
     
    898959            if (o && 1 === e.nodeType)
    899960                while (n = o[i++])
    900                     r = b.propFix[n] || n, J.test(n) ? !Q && G.test(n) ? e[b.camelCase("default-" + n)] = e[r] = !1 : e[r] = !1 : b.attr(e, n, ""), e.removeAttribute(Q ? n : r)
     961                    r = b.propFix[n] || n,
     962                    J.test(n) ? !Q && G.test(n) ? e[b.camelCase("default-" + n)] = e[r] = !1 : e[r] = !1 : b.attr(e, n, ""),
     963                    e.removeAttribute(Q ? n : r)
    901964        },
    902965        attrHooks: {
     
    9401003            }
    9411004        }
    942     }), z = {
     1005    }),
     1006    z = {
    9431007        get: function(e, n) {
    9441008            var r = b.prop(e, n),
     
    9501014            return t === !1 ? b.removeAttr(e, n) : K && Q || !G.test(n) ? e.setAttribute(!Q && b.propFix[n] || n, n) : e[b.camelCase("default-" + n)] = e[n] = !0, n
    9511015        }
    952     }, K && Q || (b.attrHooks.value = {
     1016    },
     1017    K && Q || (b.attrHooks.value = {
    9531018        get: function(e, n) {
    9541019            var r = e.getAttributeNode(n);
     
    9581023            return b.nodeName(e, "input") ? (e.defaultValue = n, t) : I && I.set(e, n, r)
    9591024        }
    960     }), Q || (I = b.valHooks.button = {
     1025    }),
     1026    Q || (I = b.valHooks.button = {
    9611027        get: function(e, n) {
    9621028            var r = e.getAttributeNode(n);
     
    9781044            }
    9791045        })
    980     })), b.support.hrefNormalized || (b.each(["href", "src", "width", "height"], function(e, n) {
     1046    })),
     1047    b.support.hrefNormalized || (b.each(["href", "src", "width", "height"], function(e, n) {
    9811048        b.attrHooks[n] = b.extend(b.attrHooks[n], {
    9821049            get: function(e) {
     
    9911058            }
    9921059        }
    993     })), b.support.style || (b.attrHooks.style = {
     1060    })),
     1061    b.support.style || (b.attrHooks.style = {
    9941062        get: function(e) {
    9951063            return e.style.cssText || t
     
    9981066            return e.style.cssText = t + ""
    9991067        }
    1000     }), b.support.optSelected || (b.propHooks.selected = b.extend(b.propHooks.selected, {
     1068    }),
     1069    b.support.optSelected || (b.propHooks.selected = b.extend(b.propHooks.selected, {
    10011070        get: function(e) {
    10021071            var t = e.parentNode;
    10031072            return t && (t.selectedIndex, t.parentNode && t.parentNode.selectedIndex), null
    10041073        }
    1005     })), b.support.enctype || (b.propFix.enctype = "encoding"), b.support.checkOn || b.each(["radio", "checkbox"], function() {
     1074    })),
     1075    b.support.enctype || (b.propFix.enctype = "encoding"),
     1076    b.support.checkOn || b.each(["radio", "checkbox"], function() {
    10061077        b.valHooks[this] = {
    10071078            get: function(e) {
     
    10091080            }
    10101081        }
    1011     }), b.each(["radio", "checkbox"], function() {
     1082    }),
     1083    b.each(["radio", "checkbox"], function() {
    10121084        b.valHooks[this] = b.extend(b.valHooks[this], {
    10131085            set: function(e, n) {
     
    10431115                v = b._data(e);
    10441116            if (v) {
    1045                 r.handler && (c = r, r = c.handler, a = c.selector), r.guid || (r.guid = b.guid++), (u = v.events) || (u = v.events = {}), (f = v.handle) || (f = v.handle = function(e) {
     1117                r.handler && (c = r, r = c.handler, a = c.selector),
     1118                r.guid || (r.guid = b.guid++),
     1119                (u = v.events) || (u = v.events = {}),
     1120                (f = v.handle) || (f = v.handle = function(e) {
    10461121                    return typeof b === i || e && b.event.triggered === e.type ? t : b.event.dispatch.apply(f.elem, arguments)
    1047                 }, f.elem = e), n = (n || "").match(w) || [""], l = n.length;
     1122                }, f.elem = e),
     1123                n = (n || "").match(w) || [""],
     1124                l = n.length;
    10481125                while (l--)
    1049                     s = rt.exec(n[l]) || [], g = y = s[1], m = (s[2] || "").split(".").sort(), p = b.event.special[g] || {}, g = (a ? p.delegateType : p.bindType) || g, p = b.event.special[g] || {}, d = b.extend({
     1126                    s = rt.exec(n[l]) || [],
     1127                    g = y = s[1],
     1128                    m = (s[2] || "").split(".").sort(),
     1129                    p = b.event.special[g] || {},
     1130                    g = (a ? p.delegateType : p.bindType) || g,
     1131                    p = b.event.special[g] || {},
     1132                    d = b.extend({
    10501133                        type: g,
    10511134                        origType: y,
     
    10561139                        needsContext: a && b.expr.match.needsContext.test(a),
    10571140                        namespace: m.join(".")
    1058                     }, c), (h = u[g]) || (h = u[g] = [], h.delegateCount = 0, p.setup && p.setup.call(e, o, m, f) !== !1 || (e.addEventListener ? e.addEventListener(g, f, !1) : e.attachEvent && e.attachEvent("on" + g, f))), p.add && (p.add.call(e, d), d.handler.guid || (d.handler.guid = r.guid)), a ? h.splice(h.delegateCount++, 0, d) : h.push(d), b.event.global[g] = !0;
     1141                    }, c),
     1142                    (h = u[g]) || (h = u[g] = [], h.delegateCount = 0, p.setup && p.setup.call(e, o, m, f) !== !1 || (e.addEventListener ? e.addEventListener(g, f, !1) : e.attachEvent && e.attachEvent("on" + g, f))),
     1143                    p.add && (p.add.call(e, d), d.handler.guid || (d.handler.guid = r.guid)),
     1144                    a ? h.splice(h.delegateCount++, 0, d) : h.push(d),
     1145                    b.event.global[g] = !0;
    10591146                e = null
    10601147            }
     
    10741161                m = b.hasData(e) && b._data(e);
    10751162            if (m && (c = m.events)) {
    1076                 t = (t || "").match(w) || [""], l = t.length;
     1163                t = (t || "").match(w) || [""],
     1164                l = t.length;
    10771165                while (l--)
    10781166                    if (s = rt.exec(t[l]) || [], d = g = s[1], h = (s[2] || "").split(".").sort(), d) {
    1079                         p = b.event.special[d] || {}, d = (r ? p.delegateType : p.bindType) || d, f = c[d] || [], s = s[2] && RegExp("(^|\\.)" + h.join("\\.(?:.*\\.|)") + "(\\.|$)"), u = o = f.length;
     1167                        p = b.event.special[d] || {},
     1168                        d = (r ? p.delegateType : p.bindType) || d,
     1169                        f = c[d] || [],
     1170                        s = s[2] && RegExp("(^|\\.)" + h.join("\\.(?:.*\\.|)") + "(\\.|$)"),
     1171                        u = o = f.length;
    10801172                        while (o--)
    1081                             a = f[o], !i && g !== a.origType || n && n.guid !== a.guid || s && !s.test(a.namespace) || r && r !== a.selector && ("**" !== r || !a.selector) || (f.splice(o, 1), a.selector && f.delegateCount--, p.remove && p.remove.call(e, a));
     1173                            a = f[o],
     1174                            !i && g !== a.origType || n && n.guid !== a.guid || s && !s.test(a.namespace) || r && r !== a.selector && ("**" !== r || !a.selector) || (f.splice(o, 1), a.selector && f.delegateCount--, p.remove && p.remove.call(e, a));
    10821175                        u && !f.length && (p.teardown && p.teardown.call(e, h, m.handle) !== !1 || b.removeEvent(e, d, m.handle), delete c[d])
    10831176                    } else
     
    11011194                if (!a && !p.noBubble && !b.isWindow(i)) {
    11021195                    for (c = p.delegateType || g, nt.test(c + g) || (l = l.parentNode); l; l = l.parentNode)
    1103                         h.push(l), f = l;
     1196                        h.push(l),
     1197                        f = l;
    11041198                    f === (i.ownerDocument || o) && h.push(f.defaultView || f.parentWindow || e)
    11051199                }
    11061200                d = 0;
    11071201                while ((l = h[d++]) && !n.isPropagationStopped())
    1108                     n.type = d > 1 ? c : p.bindType || g, s = (b._data(l, "events") || {})[n.type] && b._data(l, "handle"), s && s.apply(l, r), s = u && l[u], s && b.acceptData(l) && s.apply && s.apply(l, r) === !1 && n.preventDefault();
     1202                    n.type = d > 1 ? c : p.bindType || g,
     1203                    s = (b._data(l, "events") || {})[n.type] && b._data(l, "handle"),
     1204                    s && s.apply(l, r),
     1205                    s = u && l[u],
     1206                    s && b.acceptData(l) && s.apply && s.apply(l, r) === !1 && n.preventDefault();
    11091207                if (n.type = g, !(a || n.isDefaultPrevented() || p._default && p._default.apply(i.ownerDocument, r) !== !1 || "click" === g && b.nodeName(i, "a") || !b.acceptData(i) || !u || !i[g] || b.isWindow(i))) {
    1110                     f = i[u], f && (i[u] = null), b.event.triggered = g;
     1208                    f = i[u],
     1209                    f && (i[u] = null),
     1210                    b.event.triggered = g;
    11111211                    try {
    11121212                        i[g]()
    11131213                    } catch (v) {}
    1114                     b.event.triggered = t, f && (i[u] = f)
     1214                    b.event.triggered = t,
     1215                    f && (i[u] = f)
    11151216                }
    11161217                return n.result
     
    11291230                c = b.event.special[e.type] || {};
    11301231            if (u[0] = e, e.delegateTarget = this, !c.preDispatch || c.preDispatch.call(this, e) !== !1) {
    1131                 s = b.event.handlers.call(this, e, l), n = 0;
     1232                s = b.event.handlers.call(this, e, l),
     1233                n = 0;
    11321234                while ((o = s[n++]) && !e.isPropagationStopped()) {
    1133                     e.currentTarget = o.elem, a = 0;
     1235                    e.currentTarget = o.elem,
     1236                    a = 0;
    11341237                    while ((i = o.handlers[a++]) && !e.isImmediatePropagationStopped())
    11351238                        (!e.namespace_re || e.namespace_re.test(i.namespace)) && (e.handleObj = i, e.data = i.data, r = ((b.event.special[i.origType] || {}).handle || i.handler).apply(o.elem, u), r !== t && (e.result = r) === !1 && (e.preventDefault(), e.stopPropagation()))
     
    11501253                    if (1 === l.nodeType && (l.disabled !== !0 || "click" !== e.type)) {
    11511254                        for (o = [], a = 0; u > a; a++)
    1152                             i = n[a], r = i.selector + " ", o[r] === t && (o[r] = i.needsContext ? b(r, this).index(l) >= 0 : b.find(r, this, null, [l]).length), o[r] && o.push(i);
     1255                            i = n[a],
     1256                            r = i.selector + " ",
     1257                            o[r] === t && (o[r] = i.needsContext ? b(r, this).index(l) >= 0 : b.find(r, this, null, [l]).length),
     1258                            o[r] && o.push(i);
    11531259                        o.length && s.push({
    11541260                            elem: l,
     
    11701276                a = e,
    11711277                s = this.fixHooks[i];
    1172             s || (this.fixHooks[i] = s = tt.test(i) ? this.mouseHooks : et.test(i) ? this.keyHooks : {}), r = s.props ? this.props.concat(s.props) : this.props, e = new b.Event(a), t = r.length;
     1278            s || (this.fixHooks[i] = s = tt.test(i) ? this.mouseHooks : et.test(i) ? this.keyHooks : {}),
     1279            r = s.props ? this.props.concat(s.props) : this.props,
     1280            e = new b.Event(a),
     1281            t = r.length;
    11731282            while (t--)
    1174                 n = r[t], e[n] = a[n];
     1283                n = r[t],
     1284                e[n] = a[n];
    11751285            return e.target || (e.target = a.srcElement || o), 3 === e.target.nodeType && (e.target = e.target.parentNode), e.metaKey = !!e.metaKey, s.filter ? s.filter(e, a) : e
    11761286        },
     
    12301340                originalEvent: {}
    12311341            });
    1232             r ? b.event.trigger(i, null, t) : b.event.dispatch.call(t, i), i.isDefaultPrevented() && n.preventDefault()
    1233         }
    1234     }, b.removeEvent = o.removeEventListener ? function(e, t, n) {
     1342            r ? b.event.trigger(i, null, t) : b.event.dispatch.call(t, i),
     1343            i.isDefaultPrevented() && n.preventDefault()
     1344        }
     1345    },
     1346    b.removeEvent = o.removeEventListener ? function(e, t, n) {
    12351347        e.removeEventListener && e.removeEventListener(t, n, !1)
    12361348    } : function(e, t, n) {
    12371349        var r = "on" + t;
    12381350        e.detachEvent && (typeof e[r] === i && (e[r] = null), e.detachEvent(r, n))
    1239     }, b.Event = function(e, n) {
     1351    },
     1352    b.Event = function(e, n) {
    12401353        return this instanceof b.Event ? (e && e.type ? (this.originalEvent = e, this.type = e.type, this.isDefaultPrevented = e.defaultPrevented || e.returnValue === !1 || e.getPreventDefault && e.getPreventDefault() ? it : ot) : this.type = e, n && b.extend(this, n), this.timeStamp = e && e.timeStamp || b.now(), this[b.expando] = !0, t) : new b.Event(e, n)
    1241     }, b.Event.prototype = {
     1354    },
     1355    b.Event.prototype = {
    12421356        isDefaultPrevented: ot,
    12431357        isPropagationStopped: ot,
     
    12451359        preventDefault: function() {
    12461360            var e = this.originalEvent;
    1247             this.isDefaultPrevented = it, e && (e.preventDefault ? e.preventDefault() : e.returnValue = !1)
     1361            this.isDefaultPrevented = it,
     1362            e && (e.preventDefault ? e.preventDefault() : e.returnValue = !1)
    12481363        },
    12491364        stopPropagation: function() {
    12501365            var e = this.originalEvent;
    1251             this.isPropagationStopped = it, e && (e.stopPropagation && e.stopPropagation(), e.cancelBubble = !0)
     1366            this.isPropagationStopped = it,
     1367            e && (e.stopPropagation && e.stopPropagation(), e.cancelBubble = !0)
    12521368        },
    12531369        stopImmediatePropagation: function() {
    1254             this.isImmediatePropagationStopped = it, this.stopPropagation()
    1255         }
    1256     }, b.each({
     1370            this.isImmediatePropagationStopped = it,
     1371            this.stopPropagation()
     1372        }
     1373    },
     1374    b.each({
    12571375        mouseenter: "mouseover",
    12581376        mouseleave: "mouseout"
     
    12691387            }
    12701388        }
    1271     }), b.support.submitBubbles || (b.event.special.submit = {
     1389    }),
     1390    b.support.submitBubbles || (b.event.special.submit = {
    12721391        setup: function() {
    12731392            return b.nodeName(this, "form") ? !1 : (b.event.add(this, "click._submit keypress._submit", function(e) {
     
    12851404            return b.nodeName(this, "form") ? !1 : (b.event.remove(this, "._submit"), t)
    12861405        }
    1287     }), b.support.changeBubbles || (b.event.special.change = {
     1406    }),
     1407    b.support.changeBubbles || (b.event.special.change = {
    12881408        setup: function() {
    12891409            return Z.test(this.nodeName) ? (("checkbox" === this.type || "radio" === this.type) && (b.event.add(this, "propertychange._change", function(e) {
    12901410                "checked" === e.originalEvent.propertyName && (this._just_changed = !0)
    12911411            }), b.event.add(this, "click._change", function(e) {
    1292                 this._just_changed && !e.isTrigger && (this._just_changed = !1), b.event.simulate("change", this, e, !0)
     1412                this._just_changed && !e.isTrigger && (this._just_changed = !1),
     1413                b.event.simulate("change", this, e, !0)
    12931414            })), !1) : (b.event.add(this, "beforeactivate._change", function(e) {
    12941415                var t = e.target;
     
    13051426            return b.event.remove(this, "._change"), !Z.test(this.nodeName)
    13061427        }
    1307     }), b.support.focusinBubbles || b.each({
     1428    }),
     1429    b.support.focusinBubbles || b.each({
    13081430        focus: "focusin",
    13091431        blur: "focusout"
     
    13211443            }
    13221444        }
    1323     }), b.fn.extend({
     1445    }),
     1446    b.fn.extend({
    13241447        on: function(e, n, r, i, o) {
    13251448            var a,
     
    13791502            return r ? b.event.trigger(e, n, r, !0) : t
    13801503        }
    1381     }), function(e, t) {
     1504    }),
     1505    function(e, t) {
    13821506        var n,
    13831507            r,
     
    15191643                if (T.qsa && !h.test(e)) {
    15201644                    if (f = !0, g = x, m = t, v = 9 === s && e, 1 === s && "object" !== t.nodeName.toLowerCase()) {
    1521                         l = ft(e), (f = t.getAttribute("id")) ? g = f.replace(K, "\\$&") : t.setAttribute("id", g), g = "[id='" + g + "'] ", u = l.length;
     1645                        l = ft(e),
     1646                        (f = t.getAttribute("id")) ? g = f.replace(K, "\\$&") : t.setAttribute("id", g),
     1647                        g = "[id='" + g + "'] ",
     1648                        u = l.length;
    15221649                        while (u--)
    15231650                            l[u] = g + dt(l[u]);
    1524                         m = V.test(e) && t.parentNode || t, v = l.join(",")
     1651                        m = V.test(e) && t.parentNode || t,
     1652                        v = l.join(",")
    15251653                    }
    15261654                    if (v)
     
    15371665            var t = e && (e.ownerDocument || e).documentElement;
    15381666            return t ? "HTML" !== t.nodeName : !1
    1539         }, c = st.setDocument = function(e) {
     1667        },
     1668        c = st.setDocument = function(e) {
    15401669            var n = e ? e.ownerDocument || e : w;
    15411670            return n !== p && 9 === n.nodeType && n.documentElement ? (p = n, f = n.documentElement, d = a(n), T.tagNameNoComments = at(function(e) {
     
    15481677                return e.innerHTML = "<div class='hidden e'></div><div class='hidden'></div>", e.getElementsByClassName && e.getElementsByClassName("e").length ? (e.lastChild.className = "e", 2 === e.getElementsByClassName("e").length) : !1
    15491678            }), T.getByName = at(function(e) {
    1550                 e.id = x + 0, e.innerHTML = "<a name='" + x + "'></a><div name='" + x + "'></div>", f.insertBefore(e, f.firstChild);
     1679                e.id = x + 0,
     1680                e.innerHTML = "<a name='" + x + "'></a><div name='" + x + "'></div>",
     1681                f.insertBefore(e, f.firstChild);
    15511682                var t = n.getElementsByName && n.getElementsByName(x).length === 2 + n.getElementsByName(x + 0).length;
    15521683                return T.getIdNotName = !n.getElementById(x), f.removeChild(e), t
     
    15991730                return typeof n.getElementsByClassName === A || d ? t : n.getElementsByClassName(e)
    16001731            }, g = [], h = [":focus"], (T.qsa = rt(n.querySelectorAll)) && (at(function(e) {
    1601                 e.innerHTML = "<select><option selected=''></option></select>", e.querySelectorAll("[selected]").length || h.push("\\[" + _ + "*(?:checked|disabled|ismap|multiple|readonly|selected|value)"), e.querySelectorAll(":checked").length || h.push(":checked")
     1732                e.innerHTML = "<select><option selected=''></option></select>",
     1733                e.querySelectorAll("[selected]").length || h.push("\\[" + _ + "*(?:checked|disabled|ismap|multiple|readonly|selected|value)"),
     1734                e.querySelectorAll(":checked").length || h.push(":checked")
    16021735            }), at(function(e) {
    1603                 e.innerHTML = "<input type='hidden' i=''/>", e.querySelectorAll("[i^='']").length && h.push("[*^$]=" + _ + "*(?:\"\"|'')"), e.querySelectorAll(":enabled").length || h.push(":enabled", ":disabled"), e.querySelectorAll("*,:x"), h.push(",.*:")
     1736                e.innerHTML = "<input type='hidden' i=''/>",
     1737                e.querySelectorAll("[i^='']").length && h.push("[*^$]=" + _ + "*(?:\"\"|'')"),
     1738                e.querySelectorAll(":enabled").length || h.push(":enabled", ":disabled"),
     1739                e.querySelectorAll("*,:x"),
     1740                h.push(",.*:")
    16041741            })), (T.matchesSelector = rt(m = f.matchesSelector || f.mozMatchesSelector || f.webkitMatchesSelector || f.oMatchesSelector || f.msMatchesSelector)) && at(function(e) {
    1605                 T.disconnectedMatch = m.call(e, "div"), m.call(e, "[s!='']:x"), g.push("!=", R)
     1742                T.disconnectedMatch = m.call(e, "div"),
     1743                m.call(e, "[s!='']:x"),
     1744                g.push("!=", R)
    16061745            }), h = RegExp(h.join("|")), g = RegExp(g.join("|")), y = rt(f.contains) || f.compareDocumentPosition ? function(e, t) {
    16071746                var n = 9 === e.nodeType ? e.documentElement : e,
     
    16401779                return i ? ut(s[i], l[i]) : s[i] === w ? -1 : l[i] === w ? 1 : 0
    16411780            }, u = !1, [0, 0].sort(v), T.detectDuplicates = u, p) : p
    1642         }, st.matches = function(e, t) {
     1781        },
     1782        st.matches = function(e, t) {
    16431783            return st(e, null, null, t)
    1644         }, st.matchesSelector = function(e, t) {
     1784        },
     1785        st.matchesSelector = function(e, t) {
    16451786            if ((e.ownerDocument || e) !== p && c(e), t = t.replace(Z, "='$1']"), !(!T.matchesSelector || d || g && g.test(t) || h.test(t)))
    16461787                try {
     
    16501791                } catch (r) {}
    16511792            return st(t, p, null, [e]).length > 0
    1652         }, st.contains = function(e, t) {
     1793        },
     1794        st.contains = function(e, t) {
    16531795            return (e.ownerDocument || e) !== p && c(e), y(e, t)
    1654         }, st.attr = function(e, t) {
     1796        },
     1797        st.attr = function(e, t) {
    16551798            var n;
    16561799            return (e.ownerDocument || e) !== p && c(e), d || (t = t.toLowerCase()), (n = i.attrHandle[t]) ? n(e) : d || T.attributes ? e.getAttribute(t) : ((n = e.getAttributeNode(t)) || e.getAttribute(t)) && e[t] === !0 ? t : n && n.specified ? n.value : null
    1657         }, st.error = function(e) {
     1800        },
     1801        st.error = function(e) {
    16581802            throw Error("Syntax error, unrecognized expression: " + e)
    1659         }, st.uniqueSort = function(e) {
     1803        },
     1804        st.uniqueSort = function(e) {
    16601805            var t,
    16611806                n = [],
     
    17211866                    n += o(t);
    17221867            return n
    1723         }, i = st.selectors = {
     1868        },
     1869        i = st.selectors = {
    17241870            cacheLength: 50,
    17251871            createPseudo: ot,
     
    18041950                            }
    18051951                            if (h = [a ? m.firstChild : m.lastChild], a && v) {
    1806                                 c = m[x] || (m[x] = {}), l = c[e] || [], d = l[0] === N && l[1], f = l[0] === N && l[2], p = d && m.childNodes[d];
     1952                                c = m[x] || (m[x] = {}),
     1953                                l = c[e] || [],
     1954                                d = l[0] === N && l[1],
     1955                                f = l[0] === N && l[2],
     1956                                p = d && m.childNodes[d];
    18071957                                while (p = ++d && p && p[g] || (f = d = 0) || h.pop())
    18081958                                    if (1 === p.nodeType && ++f && p === t) {
     
    18281978                            a = o.length;
    18291979                        while (a--)
    1830                             i = M.call(e, o[a]), e[i] = !(n[i] = o[a])
     1980                            i = M.call(e, o[a]),
     1981                            e[i] = !(n[i] = o[a])
    18311982                    }) : function(e) {
    18321983                        return r(e, 0, n)
     
    19732124            if (c)
    19742125                return t ? 0 : c.slice(0);
    1975             s = e, u = [], l = i.preFilter;
     2126            s = e,
     2127            u = [],
     2128            l = i.preFilter;
    19762129            while (s) {
    1977                 (!n || (r = $.exec(s))) && (r && (s = s.slice(r[0].length) || s), u.push(o = [])), n = !1, (r = I.exec(s)) && (n = r.shift(), o.push({
     2130                (!n || (r = $.exec(s))) && (r && (s = s.slice(r[0].length) || s), u.push(o = [])),
     2131                n = !1,
     2132                (r = I.exec(s)) && (n = r.shift(), o.push({
    19782133                    value: n,
    19792134                    type: r[0].replace(W, " ")
     
    20562211                    y = n ? i || (o ? e : h || r) ? [] : a : m;
    20572212                if (n && n(m, y, s, u), r) {
    2058                     l = mt(y, d), r(l, [], s, u), c = l.length;
     2213                    l = mt(y, d),
     2214                    r(l, [], s, u),
     2215                    c = l.length;
    20592216                    while (c--)
    20602217                        (p = l[c]) && (y[d[c]] = !(m[d[c]] = p))
     
    20632220                    if (i || e) {
    20642221                        if (i) {
    2065                             l = [], c = y.length;
     2222                            l = [],
     2223                            c = y.length;
    20662224                            while (c--)
    20672225                                (p = y[c]) && l.push(m[c] = p);
     
    20732231                    }
    20742232                } else
    2075                     y = mt(y === a ? y.splice(h, y.length) : y), i ? i(null, a, y, u) : H.apply(a, y)
     2233                    y = mt(y === a ? y.splice(h, y.length) : y),
     2234                    i ? i(null, a, y, u) : H.apply(a, y)
    20762235            })
    20772236        }
     
    21452304                            y = mt(y)
    21462305                        }
    2147                         H.apply(f, y), w && !s && y.length > 0 && v + t.length > 1 && st.uniqueSort(f)
     2306                        H.apply(f, y),
     2307                        w && !s && y.length > 0 && v + t.length > 1 && st.uniqueSort(f)
    21482308                    }
    21492309                    return w && (N = k, l = T), x
     
    21572317                o = S[e + " "];
    21582318            if (!o) {
    2159                 t || (t = ft(e)), n = t.length;
     2319                t || (t = ft(e)),
     2320                n = t.length;
    21602321                while (n--)
    2161                     o = vt(t[n]), o[x] ? r.push(o) : i.push(o);
     2322                    o = vt(t[n]),
     2323                    o[x] ? r.push(o) : i.push(o);
    21622324                o = S(e, bt(i, r))
    21632325            }
     
    21992361        i.pseudos.nth = i.pseudos.eq;
    22002362        function Tt() {}
    2201         i.filters = Tt.prototype = i.pseudos, i.setFilters = new Tt, c(), st.attr = b.attr, b.find = st, b.expr = st.selectors, b.expr[":"] = b.expr.pseudos, b.unique = st.uniqueSort, b.text = st.getText, b.isXMLDoc = st.isXML, b.contains = st.contains
     2363        i.filters = Tt.prototype = i.pseudos,
     2364        i.setFilters = new Tt,
     2365        c(),
     2366        st.attr = b.attr,
     2367        b.find = st,
     2368        b.expr = st.selectors,
     2369        b.expr[":"] = b.expr.pseudos,
     2370        b.unique = st.uniqueSort,
     2371        b.text = st.getText,
     2372        b.isXMLDoc = st.isXML,
     2373        b.contains = st.contains
    22022374    }(e);
    22032375    var at = /Until$/,
     
    22752447            return this.add(null == e ? this.prevObject : this.prevObject.filter(e))
    22762448        }
    2277     }), b.fn.andSelf = b.fn.addBack;
     2449    }),
     2450    b.fn.andSelf = b.fn.addBack;
    22782451    function pt(e, t) {
    22792452        do e = e[t];
     
    23242497            return at.test(e) || (r = n), r && "string" == typeof r && (i = b.filter(r, i)), i = this.length > 1 && !ct[e] ? b.unique(i) : i, this.length > 1 && st.test(e) && (i = i.reverse()), this.pushStack(i)
    23252498        }
    2326     }), b.extend({
     2499    }),
     2500    b.extend({
    23272501        filter: function(e, t, n) {
    23282502            return n && (e = ":not(" + e + ")"), 1 === t.length ? b.find.matchesSelector(t[0], e) ? [t[0]] : [] : b.find.matches(e, t)
     
    23322506                o = e[n];
    23332507            while (o && 9 !== o.nodeType && (r === t || 1 !== o.nodeType || !b(o).is(r)))
    2334                 1 === o.nodeType && i.push(o), o = o[n];
     2508                1 === o.nodeType && i.push(o),
     2509                o = o[n];
    23352510            return i
    23362511        },
     
    23992574        jt = dt(o),
    24002575        Dt = jt.appendChild(o.createElement("div"));
    2401     At.optgroup = At.option, At.tbody = At.tfoot = At.colgroup = At.caption = At.thead, At.th = At.td, b.fn.extend({
     2576    At.optgroup = At.option,
     2577    At.tbody = At.tfoot = At.colgroup = At.caption = At.thead,
     2578    At.th = At.td,
     2579    b.fn.extend({
    24022580        text: function(e) {
    24032581            return b.access(this, function(e) {
     
    24122590            if (this[0]) {
    24132591                var t = b(e, this[0].ownerDocument).eq(0).clone(!0);
    2414                 this[0].parentNode && t.insertBefore(this[0]), t.map(function() {
     2592                this[0].parentNode && t.insertBefore(this[0]),
     2593                t.map(function() {
    24152594                    var e = this;
    24162595                    while (e.firstChild && 1 === e.firstChild.nodeType)
     
    24952674                    try {
    24962675                        for (; i > r; r++)
    2497                             n = this[r] || {}, 1 === n.nodeType && (b.cleanData(Ot(n, !1)), n.innerHTML = e);
     2676                            n = this[r] || {},
     2677                            1 === n.nodeType && (b.cleanData(Ot(n, !1)), n.innerHTML = e);
    24982678                        n = 0
    24992679                    } catch (o) {}
     
    25302710                return this.each(function(i) {
    25312711                    var o = d.eq(i);
    2532                     m && (e[0] = g.call(this, i, n ? o.html() : t)), o.domManip(e, n, r)
     2712                    m && (e[0] = g.call(this, i, n ? o.html() : t)),
     2713                    o.domManip(e, n, r)
    25332714                });
    25342715            if (p && (l = b.buildFragment(e, this[0].ownerDocument, !1, this), i = l.firstChild, 1 === l.childNodes.length && (l = i), i)) {
    25352716                for (n = n && b.nodeName(i, "tr"), s = b.map(Ot(l, "script"), Ht), a = s.length; p > c; c++)
    2536                     o = l, c !== h && (o = b.clone(o, !0, !0), a && b.merge(s, Ot(o, "script"))), r.call(n && b.nodeName(this[c], "table") ? Lt(this[c], "tbody") : this[c], o, c);
     2717                    o = l,
     2718                    c !== h && (o = b.clone(o, !0, !0), a && b.merge(s, Ot(o, "script"))),
     2719                    r.call(n && b.nodeName(this[c], "table") ? Lt(this[c], "tbody") : this[c], o, c);
    25372720                if (a)
    25382721                    for (u = s[s.length - 1].ownerDocument, b.map(s, qt), c = 0; a > c; c++)
    2539                         o = s[c], kt.test(o.type || "") && !b._data(o, "globalEval") && b.contains(u, o) && (o.src ? b.ajax({
     2722                        o = s[c],
     2723                        kt.test(o.type || "") && !b._data(o, "globalEval") && b.contains(u, o) && (o.src ? b.ajax({
    25402724                            url: o.src,
    25412725                            type: "GET",
     
    25762760                s = o.events;
    25772761            if (s) {
    2578                 delete a.handle, a.events = {};
     2762                delete a.handle,
     2763                a.events = {};
    25792764                for (n in s)
    25802765                    for (r = 0, i = s[n].length; i > r; r++)
     
    26122797                a = o.length - 1;
    26132798            for (; a >= r; r++)
    2614                 n = r === a ? this : this.clone(!0), b(o[r])[t](n), d.apply(i, n.get());
     2799                n = r === a ? this : this.clone(!0),
     2800                b(o[r])[t](n),
     2801                d.apply(i, n.get());
    26152802            return this.pushStack(i)
    26162803        }
     
    26652852                        b.merge(d, o.nodeType ? [o] : o);
    26662853                    else if (wt.test(o)) {
    2667                         s = s || f.appendChild(t.createElement("div")), u = (bt.exec(o) || ["", ""])[1].toLowerCase(), c = At[u] || At._default, s.innerHTML = c[1] + o.replace(vt, "<$1></$2>") + c[2], i = c[0];
     2854                        s = s || f.appendChild(t.createElement("div")),
     2855                        u = (bt.exec(o) || ["", ""])[1].toLowerCase(),
     2856                        c = At[u] || At._default,
     2857                        s.innerHTML = c[1] + o.replace(vt, "<$1></$2>") + c[2],
     2858                        i = c[0];
    26682859                        while (i--)
    26692860                            s = s.lastChild;
    26702861                        if (!b.support.leadingWhitespace && yt.test(o) && d.push(t.createTextNode(yt.exec(o)[0])), !b.support.tbody) {
    2671                             o = "table" !== u || xt.test(o) ? "<table>" !== c[1] || xt.test(o) ? 0 : s : s.firstChild, i = o && o.childNodes.length;
     2862                            o = "table" !== u || xt.test(o) ? "<table>" !== c[1] || xt.test(o) ? 0 : s : s.firstChild,
     2863                            i = o && o.childNodes.length;
    26722864                            while (i--)
    26732865                                b.nodeName(l = o.childNodes[i], "tbody") && !l.childNodes.length && o.removeChild(l)
    26742866                        }
    2675                         b.merge(d, s.childNodes), s.textContent = "";
     2867                        b.merge(d, s.childNodes),
     2868                        s.textContent = "";
    26762869                        while (s.firstChild)
    26772870                            s.removeChild(s.firstChild);
     
    26792872                    } else
    26802873                        d.push(t.createTextNode(o));
    2681             s && f.removeChild(s), b.support.appendChecked || b.grep(Ot(d, "input"), Bt), h = 0;
     2874            s && f.removeChild(s),
     2875            b.support.appendChecked || b.grep(Ot(d, "input"), Bt),
     2876            h = 0;
    26822877            while (o = d[h++])
    26832878                if ((!r || -1 === b.inArray(o, r)) && (a = b.contains(o.ownerDocument, o), s = Ot(f.appendChild(o), "script"), a && Mt(s), n)) {
     
    27542949            s = e.length;
    27552950        for (; s > a; a++)
    2756             r = e[a], r.style && (o[a] = b._data(r, "olddisplay"), n = r.style.display, t ? (o[a] || "none" !== n || (r.style.display = ""), "" === r.style.display && nn(r) && (o[a] = b._data(r, "olddisplay", un(r.nodeName)))) : o[a] || (i = nn(r), (n && "none" !== n || !i) && b._data(r, "olddisplay", i ? n : b.css(r, "display"))));
     2951            r = e[a],
     2952            r.style && (o[a] = b._data(r, "olddisplay"), n = r.style.display, t ? (o[a] || "none" !== n || (r.style.display = ""), "" === r.style.display && nn(r) && (o[a] = b._data(r, "olddisplay", un(r.nodeName)))) : o[a] || (i = nn(r), (n && "none" !== n || !i) && b._data(r, "olddisplay", i ? n : b.css(r, "display"))));
    27572953        for (a = 0; s > a; a++)
    2758             r = e[a], r.style && (t && "none" !== r.style.display && "" !== r.style.display || (r.style.display = t ? o[a] || "" : "none"));
     2954            r = e[a],
     2955            r.style && (t && "none" !== r.style.display && "" !== r.style.display || (r.style.display = t ? o[a] || "" : "none"));
    27592956        return e
    27602957    }
     
    27862983            })
    27872984        }
    2788     }), b.extend({
     2985    }),
     2986    b.extend({
    27892987        cssHooks: {
    27902988            opacity: {
     
    28383036                a = {};
    28393037            for (o in t)
    2840                 a[o] = e.style[o], e.style[o] = t[o];
     3038                a[o] = e.style[o],
     3039                e.style[o] = t[o];
    28413040            i = n.apply(e, r || []);
    28423041            for (o in t)
     
    28443043            return i
    28453044        }
    2846     }), e.getComputedStyle ? (Rt = function(t) {
     3045    }),
     3046    e.getComputedStyle ? (Rt = function(t) {
    28473047        return e.getComputedStyle(t, null)
    28483048    }, Wt = function(e, n, r) {
     
    28733073            a = 0;
    28743074        for (; 4 > o; o += 2)
    2875             "margin" === n && (a += b.css(e, n + Zt[o], !0, i)), r ? ("content" === n && (a -= b.css(e, "padding" + Zt[o], !0, i)), "margin" !== n && (a -= b.css(e, "border" + Zt[o] + "Width", !0, i))) : (a += b.css(e, "padding" + Zt[o], !0, i), "padding" !== n && (a += b.css(e, "border" + Zt[o] + "Width", !0, i)));
     3075            "margin" === n && (a += b.css(e, n + Zt[o], !0, i)),
     3076            r ? ("content" === n && (a -= b.css(e, "padding" + Zt[o], !0, i)), "margin" !== n && (a -= b.css(e, "border" + Zt[o] + "Width", !0, i))) : (a += b.css(e, "padding" + Zt[o], !0, i), "padding" !== n && (a += b.css(e, "border" + Zt[o] + "Width", !0, i)));
    28763077        return a
    28773078    }
     
    28843085            if (i = Wt(e, t, o), (0 > i || null == i) && (i = e.style[t]), Yt.test(i))
    28853086                return i;
    2886             r = a && (b.support.boxSizingReliable || i === e.style[t]), i = parseFloat(i) || 0
     3087            r = a && (b.support.boxSizingReliable || i === e.style[t]),
     3088            i = parseFloat(i) || 0
    28873089        }
    28883090        return i + an(e, t, n || (a ? "border" : "content"), r, o) + "px"
     
    29103112            }
    29113113        }
    2912     }), b.support.opacity || (b.cssHooks.opacity = {
     3114    }),
     3115    b.support.opacity || (b.cssHooks.opacity = {
    29133116        get: function(e, t) {
    29143117            return It.test((t && e.currentStyle ? e.currentStyle.filter : e.style.filter) || "") ? .01 * parseFloat(RegExp.$1) + "" : t ? "1" : ""
     
    29193122                i = b.isNumeric(t) ? "alpha(opacity=" + 100 * t + ")" : "",
    29203123                o = r && r.filter || n.filter || "";
    2921             n.zoom = 1, (t >= 1 || "" === t) && "" === b.trim(o.replace($t, "")) && n.removeAttribute && (n.removeAttribute("filter"), "" === t || r && !r.filter) || (n.filter = $t.test(o) ? o.replace($t, i) : o + " " + i)
    2922         }
    2923     }), b(function() {
     3124            n.zoom = 1,
     3125            (t >= 1 || "" === t) && "" === b.trim(o.replace($t, "")) && n.removeAttribute && (n.removeAttribute("filter"), "" === t || r && !r.filter) || (n.filter = $t.test(o) ? o.replace($t, i) : o + " " + i)
     3126        }
     3127    }),
     3128    b(function() {
    29243129        b.support.reliableMarginRight || (b.cssHooks.marginRight = {
    29253130            get: function(e, n) {
     
    29283133                }, Wt, [e, "marginRight"]) : t
    29293134            }
    2930         }), !b.support.pixelPosition && b.fn.position && b.each(["top", "left"], function(e, n) {
     3135        }),
     3136        !b.support.pixelPosition && b.fn.position && b.each(["top", "left"], function(e, n) {
    29313137            b.cssHooks[n] = {
    29323138                get: function(e, r) {
     
    29353141            }
    29363142        })
    2937     }), b.expr && b.expr.filters && (b.expr.filters.hidden = function(e) {
     3143    }),
     3144    b.expr && b.expr.filters && (b.expr.filters.hidden = function(e) {
    29383145        return 0 >= e.offsetWidth && 0 >= e.offsetHeight || !b.support.reliableHiddenOffsets && "none" === (e.style && e.style.display || b.css(e, "display"))
    29393146    }, b.expr.filters.visible = function(e) {
    29403147        return !b.expr.filters.hidden(e)
    2941     }), b.each({
     3148    }),
     3149    b.each({
    29423150        margin: "",
    29433151        padding: "",
     
    29533161                return i
    29543162            }
    2955         }, Ut.test(e) || (b.cssHooks[e + t].set = on)
     3163        },
     3164        Ut.test(e) || (b.cssHooks[e + t].set = on)
    29563165    });
    29573166    var cn = /%20/g,
     
    29843193            }).get()
    29853194        }
    2986     }), b.param = function(e, n) {
     3195    }),
     3196    b.param = function(e, n) {
    29873197        var r,
    29883198            i = [],
    29893199            o = function(e, t) {
    2990                 t = b.isFunction(t) ? t() : null == t ? "" : t, i[i.length] = encodeURIComponent(e) + "=" + encodeURIComponent(t)
     3200                t = b.isFunction(t) ? t() : null == t ? "" : t,
     3201                i[i.length] = encodeURIComponent(e) + "=" + encodeURIComponent(t)
    29913202            };
    29923203        if (n === t && (n = b.ajaxSettings && b.ajaxSettings.traditional), b.isArray(e) || e.jquery && !b.isPlainObject(e))
     
    30153226            return arguments.length > 0 ? this.on(t, null, e, n) : this.trigger(t)
    30163227        }
    3017     }), b.fn.hover = function(e, t) {
     3228    }),
     3229    b.fn.hover = function(e, t) {
    30183230        return this.mouseenter(e).mouseleave(t || e)
    30193231    };
     
    30363248        yn = a.href
    30373249    } catch (Ln) {
    3038         yn = o.createElement("a"), yn.href = "", yn = yn.href
     3250        yn = o.createElement("a"),
     3251        yn.href = "",
     3252        yn = yn.href
    30393253    }
    30403254    mn = En.exec(yn.toLowerCase()) || [];
     
    30843298            data: n
    30853299        }).done(function(e) {
    3086             o = arguments, s.html(i ? b("<div>").append(b.parseHTML(e)).find(i) : e)
     3300            o = arguments,
     3301            s.html(i ? b("<div>").append(b.parseHTML(e)).find(i) : e)
    30873302        }).complete(r && function(e, t) {
    30883303            s.each(r, o || [e.responseText, t, e])
    30893304        }), this
    3090     }, b.each(["ajaxStart", "ajaxStop", "ajaxComplete", "ajaxError", "ajaxSuccess", "ajaxSend"], function(e, t) {
     3305    },
     3306    b.each(["ajaxStart", "ajaxStop", "ajaxComplete", "ajaxError", "ajaxSuccess", "ajaxSend"], function(e, t) {
    30913307        b.fn[t] = function(e) {
    30923308            return this.on(t, e)
    30933309        }
    3094     }), b.each(["get", "post"], function(e, n) {
     3310    }),
     3311    b.each(["get", "post"], function(e, n) {
    30953312        b[n] = function(e, r, i, o) {
    30963313            return b.isFunction(r) && (o = o || i, i = r, r = t), b.ajax({
     
    31023319            })
    31033320        }
    3104     }), b.extend({
     3321    }),
     3322    b.extend({
    31053323        active: 0,
    31063324        lastModified: {},
     
    31473365        ajaxTransport: Hn(jn),
    31483366        ajax: function(e, n) {
    3149             "object" == typeof e && (n = e, e = t), n = n || {};
     3367            "object" == typeof e && (n = e, e = t),
     3368            n = n || {};
    31503369            var r,
    31513370                i,
     
    32073426            if (h.promise(N).complete = g.add, N.success = N.done, N.error = N.fail, p.url = ((e || p.url || yn) + "").replace(xn, "").replace(kn, mn[1] + "//"), p.type = n.method || n.type || p.method || p.type, p.dataTypes = b.trim(p.dataType || "*").toLowerCase().match(w) || [""], null == p.crossDomain && (r = En.exec(p.url.toLowerCase()), p.crossDomain = !(!r || r[1] === mn[1] && r[2] === mn[2] && (r[3] || ("http:" === r[1] ? 80 : 443)) == (mn[3] || ("http:" === mn[1] ? 80 : 443)))), p.data && p.processData && "string" != typeof p.data && (p.data = b.param(p.data, p.traditional)), qn(An, p, n, N), 2 === x)
    32083427                return N;
    3209             u = p.global, u && 0 === b.active++ && b.event.trigger("ajaxStart"), p.type = p.type.toUpperCase(), p.hasContent = !Cn.test(p.type), o = p.url, p.hasContent || (p.data && (o = p.url += (bn.test(o) ? "&" : "?") + p.data, delete p.data), p.cache === !1 && (p.url = wn.test(o) ? o.replace(wn, "$1_=" + vn++) : o + (bn.test(o) ? "&" : "?") + "_=" + vn++)), p.ifModified && (b.lastModified[o] && N.setRequestHeader("If-Modified-Since", b.lastModified[o]), b.etag[o] && N.setRequestHeader("If-None-Match", b.etag[o])), (p.data && p.hasContent && p.contentType !== !1 || n.contentType) && N.setRequestHeader("Content-Type", p.contentType), N.setRequestHeader("Accept", p.dataTypes[0] && p.accepts[p.dataTypes[0]] ? p.accepts[p.dataTypes[0]] + ("*" !== p.dataTypes[0] ? ", " + Dn + "; q=0.01" : "") : p.accepts["*"]);
     3428            u = p.global,
     3429            u && 0 === b.active++ && b.event.trigger("ajaxStart"),
     3430            p.type = p.type.toUpperCase(),
     3431            p.hasContent = !Cn.test(p.type),
     3432            o = p.url,
     3433            p.hasContent || (p.data && (o = p.url += (bn.test(o) ? "&" : "?") + p.data, delete p.data), p.cache === !1 && (p.url = wn.test(o) ? o.replace(wn, "$1_=" + vn++) : o + (bn.test(o) ? "&" : "?") + "_=" + vn++)),
     3434            p.ifModified && (b.lastModified[o] && N.setRequestHeader("If-Modified-Since", b.lastModified[o]), b.etag[o] && N.setRequestHeader("If-None-Match", b.etag[o])),
     3435            (p.data && p.hasContent && p.contentType !== !1 || n.contentType) && N.setRequestHeader("Content-Type", p.contentType),
     3436            N.setRequestHeader("Accept", p.dataTypes[0] && p.accepts[p.dataTypes[0]] ? p.accepts[p.dataTypes[0]] + ("*" !== p.dataTypes[0] ? ", " + Dn + "; q=0.01" : "") : p.accepts["*"]);
    32103437            for (i in p.headers)
    32113438                N.setRequestHeader(i, p.headers[i]);
     
    32203447                N[i](p[i]);
    32213448            if (l = qn(jn, p, n, N)) {
    3222                 N.readyState = 1, u && d.trigger("ajaxSend", [N, p]), p.async && p.timeout > 0 && (s = setTimeout(function() {
     3449                N.readyState = 1,
     3450                u && d.trigger("ajaxSend", [N, p]),
     3451                p.async && p.timeout > 0 && (s = setTimeout(function() {
    32233452                    N.abort("timeout")
    32243453                }, p.timeout));
    32253454                try {
    3226                     x = 1, l.send(y, k)
     3455                    x = 1,
     3456                    l.send(y, k)
    32273457                } catch (C) {
    32283458                    if (!(2 > x))
     
    32613491            s in r && (n[c[s]] = r[s]);
    32623492        while ("*" === l[0])
    3263             l.shift(), o === t && (o = e.mimeType || n.getResponseHeader("Content-Type"));
     3493            l.shift(),
     3494            o === t && (o = e.mimeType || n.getResponseHeader("Content-Type"));
    32643495        if (o)
    32653496            for (s in u)
     
    33353566            }
    33363567        }
    3337     }), b.ajaxPrefilter("script", function(e) {
    3338         e.cache === t && (e.cache = !1), e.crossDomain && (e.type = "GET", e.global = !1)
    3339     }), b.ajaxTransport("script", function(e) {
     3568    }),
     3569    b.ajaxPrefilter("script", function(e) {
     3570        e.cache === t && (e.cache = !1),
     3571        e.crossDomain && (e.type = "GET", e.global = !1)
     3572    }),
     3573    b.ajaxTransport("script", function(e) {
    33403574        if (e.crossDomain) {
    33413575            var n,
     
    33433577            return {
    33443578                send: function(t, i) {
    3345                     n = o.createElement("script"), n.async = !0, e.scriptCharset && (n.charset = e.scriptCharset), n.src = e.url, n.onload = n.onreadystatechange = function(e, t) {
     3579                    n = o.createElement("script"),
     3580                    n.async = !0,
     3581                    e.scriptCharset && (n.charset = e.scriptCharset),
     3582                    n.src = e.url,
     3583                    n.onload = n.onreadystatechange = function(e, t) {
    33463584                        (t || !n.readyState || /loaded|complete/.test(n.readyState)) && (n.onload = n.onreadystatechange = null, n.parentNode && n.parentNode.removeChild(n), n = null, t || i(200, "success"))
    3347                     }, r.insertBefore(n, r.firstChild)
     3585                    },
     3586                    r.insertBefore(n, r.firstChild)
    33483587                },
    33493588                abort: function() {
     
    33613600            return this[e] = !0, e
    33623601        }
    3363     }), b.ajaxPrefilter("json jsonp", function(n, r, i) {
     3602    }),
     3603    b.ajaxPrefilter("json jsonp", function(n, r, i) {
    33643604        var o,
    33653605            a,
     
    33713611            s = arguments
    33723612        }, i.always(function() {
    3373             e[o] = a, n[o] && (n.jsonpCallback = r.jsonpCallback, On.push(o)), s && b.isFunction(a) && a(s[0]), s = a = t
     3613            e[o] = a,
     3614            n[o] && (n.jsonpCallback = r.jsonpCallback, On.push(o)),
     3615            s && b.isFunction(a) && a(s[0]),
     3616            s = a = t
    33743617        }), "script") : t
    33753618    });
     
    33943637    b.ajaxSettings.xhr = e.ActiveXObject ? function() {
    33953638        return !this.isLocal && In() || zn()
    3396     } : In, Rn = b.ajaxSettings.xhr(), b.support.cors = !!Rn && "withCredentials" in Rn, Rn = b.support.ajax = !!Rn, Rn && b.ajaxTransport(function(n) {
     3639    } : In,
     3640    Rn = b.ajaxSettings.xhr(),
     3641    b.support.cors = !!Rn && "withCredentials" in Rn,
     3642    Rn = b.support.ajax = !!Rn,
     3643    Rn && b.ajaxTransport(function(n) {
    33973644        if (!n.crossDomain || b.support.cors) {
    33983645            var r;
     
    34053652                        for (s in n.xhrFields)
    34063653                            u[s] = n.xhrFields[s];
    3407                     n.mimeType && u.overrideMimeType && u.overrideMimeType(n.mimeType), n.crossDomain || i["X-Requested-With"] || (i["X-Requested-With"] = "XMLHttpRequest");
     3654                    n.mimeType && u.overrideMimeType && u.overrideMimeType(n.mimeType),
     3655                    n.crossDomain || i["X-Requested-With"] || (i["X-Requested-With"] = "XMLHttpRequest");
    34083656                    try {
    34093657                        for (s in i)
    34103658                            u.setRequestHeader(s, i[s])
    34113659                    } catch (l) {}
    3412                     u.send(n.hasContent && n.data || null), r = function(e, i) {
     3660                    u.send(n.hasContent && n.data || null),
     3661                    r = function(e, i) {
    34133662                        var s,
    34143663                            l,
     
    34203669                                    4 !== u.readyState && u.abort();
    34213670                                else {
    3422                                     p = {}, s = u.status, l = u.getAllResponseHeaders(), "string" == typeof u.responseText && (p.text = u.responseText);
     3671                                    p = {},
     3672                                    s = u.status,
     3673                                    l = u.getAllResponseHeaders(),
     3674                                    "string" == typeof u.responseText && (p.text = u.responseText);
    34233675                                    try {
    34243676                                        c = u.statusText
     
    34323684                        }
    34333685                        p && o(s, c, p, l)
    3434                     }, n.async ? 4 === u.readyState ? setTimeout(r) : (a = ++Wn, $n && (Pn || (Pn = {}, b(e).unload($n)), Pn[a] = r), u.onreadystatechange = r) : r()
     3686                    },
     3687                    n.async ? 4 === u.readyState ? setTimeout(r) : (a = ++Wn, $n && (Pn || (Pn = {}, b(e).unload($n)), Pn[a] = r), u.onreadystatechange = r) : r()
    34353688                },
    34363689                abort: function() {
     
    34593712                    if (n = +o[2], r = o[3] || (b.cssNumber[e] ? "" : "px"), "px" !== r && s) {
    34603713                        s = b.css(i.elem, e, !0) || n || 1;
    3461                         do u = u || ".5", s /= u, b.style(i.elem, e, s + r);
     3714                        do u = u || ".5",
     3715                        s /= u,
     3716                        b.style(i.elem, e, s + r);
    34623717                        while (u !== (u = i.cur() / a) && 1 !== u && --l)
    34633718                    }
    3464                     i.unit = r, i.start = s, i.end = o[1] ? s + (o[1] + 1) * n : n
     3719                    i.unit = r,
     3720                    i.start = s,
     3721                    i.end = o[1] ? s + (o[1] + 1) * n : n
    34653722                }
    34663723                return i
     
    35463803        for (i in e)
    35473804            if (r = b.camelCase(i), o = t[r], n = e[i], b.isArray(n) && (o = n[1], n = e[i] = n[0]), i !== r && (e[r] = n, delete e[i]), a = b.cssHooks[r], a && "expand" in a) {
    3548                 n = a.expand(n), delete e[r];
     3805                n = a.expand(n),
     3806                delete e[r];
    35493807                for (i in n)
    35503808                    i in e || (e[i] = n[i], t[i] = o)
     
    35593817                i = e.length;
    35603818            for (; i > r; r++)
    3561                 n = e[r], Qn[n] = Qn[n] || [], Qn[n].unshift(t)
     3819                n = e[r],
     3820                Qn[n] = Qn[n] || [],
     3821                Qn[n].unshift(t)
    35623822        },
    35633823        prefilter: function(e, t) {
     
    35843844        }), c.unqueued++, f.always(function() {
    35853845            f.always(function() {
    3586                 c.unqueued--, b.queue(e, "fx").length || c.empty.fire()
     3846                c.unqueued--,
     3847                b.queue(e, "fx").length || c.empty.fire()
    35873848            })
    3588         })), 1 === e.nodeType && ("height" in t || "width" in t) && (n.overflow = [d.overflow, d.overflowX, d.overflowY], "inline" === b.css(e, "display") && "none" === b.css(e, "float") && (b.support.inlineBlockNeedsLayout && "inline" !== un(e.nodeName) ? d.zoom = 1 : d.display = "inline-block")), n.overflow && (d.overflow = "hidden", b.support.shrinkWrapBlocks || f.always(function() {
    3589             d.overflow = n.overflow[0], d.overflowX = n.overflow[1], d.overflowY = n.overflow[2]
     3849        })),
     3850        1 === e.nodeType && ("height" in t || "width" in t) && (n.overflow = [d.overflow, d.overflowX, d.overflowY], "inline" === b.css(e, "display") && "none" === b.css(e, "float") && (b.support.inlineBlockNeedsLayout && "inline" !== un(e.nodeName) ? d.zoom = 1 : d.display = "inline-block")),
     3851        n.overflow && (d.overflow = "hidden", b.support.shrinkWrapBlocks || f.always(function() {
     3852            d.overflow = n.overflow[0],
     3853            d.overflowX = n.overflow[1],
     3854            d.overflowY = n.overflow[2]
    35903855        }));
    35913856        for (i in t)
     
    35963861            }
    35973862        if (o = g.length) {
    3598             s = b._data(e, "fxshow") || b._data(e, "fxshow", {}), "hidden" in s && (m = s.hidden), u && (s.hidden = !m), m ? b(e).show() : f.done(function() {
     3863            s = b._data(e, "fxshow") || b._data(e, "fxshow", {}),
     3864            "hidden" in s && (m = s.hidden),
     3865            u && (s.hidden = !m),
     3866            m ? b(e).show() : f.done(function() {
    35993867                b(e).hide()
    3600             }), f.done(function() {
     3868            }),
     3869            f.done(function() {
    36013870                var t;
    36023871                b._removeData(e, "fxshow");
     
    36053874            });
    36063875            for (i = 0; o > i; i++)
    3607                 r = g[i], l = f.createTween(r, m ? s[r] : 0), h[r] = s[r] || b.style(e, r), r in s || (s[r] = l.start, m && (l.end = l.start, l.start = "width" === r || "height" === r ? 1 : 0))
     3876                r = g[i],
     3877                l = f.createTween(r, m ? s[r] : 0),
     3878                h[r] = s[r] || b.style(e, r),
     3879                r in s || (s[r] = l.start, m && (l.end = l.start, l.start = "width" === r || "height" === r ? 1 : 0))
    36083880        }
    36093881    }
     
    36113883        return new rr.prototype.init(e, t, n, r, i)
    36123884    }
    3613     b.Tween = rr, rr.prototype = {
     3885    b.Tween = rr,
     3886    rr.prototype = {
    36143887        constructor: rr,
    36153888        init: function(e, t, n, r, i, o) {
    3616             this.elem = e, this.prop = n, this.easing = i || "swing", this.options = t, this.start = this.now = this.cur(), this.end = r, this.unit = o || (b.cssNumber[n] ? "" : "px")
     3889            this.elem = e,
     3890            this.prop = n,
     3891            this.easing = i || "swing",
     3892            this.options = t,
     3893            this.start = this.now = this.cur(),
     3894            this.end = r,
     3895            this.unit = o || (b.cssNumber[n] ? "" : "px")
    36173896        },
    36183897        cur: function() {
     
    36253904            return this.pos = t = this.options.duration ? b.easing[this.easing](e, this.options.duration * e, 0, 1, this.options.duration) : e, this.now = (this.end - this.start) * t + this.start, this.options.step && this.options.step.call(this.elem, this.now, this), n && n.set ? n.set(this) : rr.propHooks._default.set(this), this
    36263905        }
    3627     }, rr.prototype.init.prototype = rr.prototype, rr.propHooks = {
     3906    },
     3907    rr.prototype.init.prototype = rr.prototype,
     3908    rr.propHooks = {
    36283909        _default: {
    36293910            get: function(e) {
     
    36353916            }
    36363917        }
    3637     }, rr.propHooks.scrollTop = rr.propHooks.scrollLeft = {
     3918    },
     3919    rr.propHooks.scrollTop = rr.propHooks.scrollLeft = {
    36383920        set: function(e) {
    36393921            e.elem.nodeType && e.elem.parentNode && (e.elem[e.prop] = e.now)
    36403922        }
    3641     }, b.each(["toggle", "show", "hide"], function(e, t) {
     3923    },
     3924    b.each(["toggle", "show", "hide"], function(e, t) {
    36423925        var n = b.fn[t];
    36433926        b.fn[t] = function(e, r, i) {
    36443927            return null == e || "boolean" == typeof e ? n.apply(this, arguments) : this.animate(ir(t, !0), e, r, i)
    36453928        }
    3646     }), b.fn.extend({
     3929    }),
     3930    b.fn.extend({
    36473931        fadeTo: function(e, t, n, r) {
    36483932            return this.filter(nn).css("opacity", 0).show().end().animate({
     
    36573941                    a.finish = function() {
    36583942                        t.stop(!0)
    3659                     }, (i || b._data(this, "finish")) && t.stop(!0)
     3943                    },
     3944                    (i || b._data(this, "finish")) && t.stop(!0)
    36603945                };
    36613946            return a.finish = a, i || o.queue === !1 ? this.each(a) : this.queue(o.queue, a)
     
    36643949            var i = function(e) {
    36653950                var t = e.stop;
    3666                 delete e.stop, t(r)
     3951                delete e.stop,
     3952                t(r)
    36673953            };
    36683954            return "string" != typeof e && (r = n, n = e, e = t), n && e !== !1 && this.queue(e || "fx", []), this.each(function() {
     
    37043990            i = 0;
    37053991        for (t = t ? 1 : 0; 4 > i; i += 2 - t)
    3706             n = Zt[i], r["margin" + n] = r["padding" + n] = e;
     3992            n = Zt[i],
     3993            r["margin" + n] = r["padding" + n] = e;
    37073994        return t && (r.opacity = r.width = e), r
    37083995    }
     
    37244011            return this.animate(t, e, n, r)
    37254012        }
    3726     }), b.speed = function(e, t, n) {
     4013    }),
     4014    b.speed = function(e, t, n) {
    37274015        var r = e && "object" == typeof e ? b.extend({}, e) : {
    37284016            complete: n || !n && t || b.isFunction(e) && e,
     
    37314019        };
    37324020        return r.duration = b.fx.off ? 0 : "number" == typeof r.duration ? r.duration : r.duration in b.fx.speeds ? b.fx.speeds[r.duration] : b.fx.speeds._default, (null == r.queue || r.queue === !0) && (r.queue = "fx"), r.old = r.complete, r.complete = function() {
    3733             b.isFunction(r.old) && r.old.call(this), r.queue && b.dequeue(this, r.queue)
     4021            b.isFunction(r.old) && r.old.call(this),
     4022            r.queue && b.dequeue(this, r.queue)
    37344023        }, r
    3735     }, b.easing = {
     4024    },
     4025    b.easing = {
    37364026        linear: function(e) {
    37374027            return e
     
    37404030            return .5 - Math.cos(e * Math.PI) / 2
    37414031        }
    3742     }, b.timers = [], b.fx = rr.prototype.init, b.fx.tick = function() {
     4032    },
     4033    b.timers = [],
     4034    b.fx = rr.prototype.init,
     4035    b.fx.tick = function() {
    37434036        var e,
    37444037            n = b.timers,
    37454038            r = 0;
    37464039        for (Xn = b.now(); n.length > r; r++)
    3747             e = n[r], e() || n[r] !== e || n.splice(r--, 1);
    3748         n.length || b.fx.stop(), Xn = t
    3749     }, b.fx.timer = function(e) {
     4040            e = n[r],
     4041            e() || n[r] !== e || n.splice(r--, 1);
     4042        n.length || b.fx.stop(),
     4043        Xn = t
     4044    },
     4045    b.fx.timer = function(e) {
    37504046        e() && b.timers.push(e) && b.fx.start()
    3751     }, b.fx.interval = 13, b.fx.start = function() {
     4047    },
     4048    b.fx.interval = 13,
     4049    b.fx.start = function() {
    37524050        Un || (Un = setInterval(b.fx.tick, b.fx.interval))
    3753     }, b.fx.stop = function() {
    3754         clearInterval(Un), Un = null
    3755     }, b.fx.speeds = {
     4051    },
     4052    b.fx.stop = function() {
     4053        clearInterval(Un),
     4054        Un = null
     4055    },
     4056    b.fx.speeds = {
    37564057        slow: 600,
    37574058        fast: 200,
    37584059        _default: 400
    3759     }, b.fx.step = {}, b.expr && b.expr.filters && (b.expr.filters.animated = function(e) {
     4060    },
     4061    b.fx.step = {},
     4062    b.expr && b.expr.filters && (b.expr.filters.animated = function(e) {
    37604063        return b.grep(b.timers, function(t) {
    37614064            return e === t.elem
    37624065        }).length
    3763     }), b.fn.offset = function(e) {
     4066    }),
     4067    b.fn.offset = function(e) {
    37644068        if (arguments.length)
    37654069            return e === t ? this : this.each(function(t) {
     
    37794083                left: o.left + (r.pageXOffset || n.scrollLeft) - (n.clientLeft || 0)
    37804084            }) : o
    3781     }, b.offset = {
     4085    },
     4086    b.offset = {
    37824087        setOffset: function(e, t, n) {
    37834088            var r = b.css(e, "position");
     
    37924097                p,
    37934098                f;
    3794             u ? (c = i.position(), p = c.top, f = c.left) : (p = parseFloat(a) || 0, f = parseFloat(s) || 0), b.isFunction(t) && (t = t.call(e, n, o)), null != t.top && (l.top = t.top - o.top + p), null != t.left && (l.left = t.left - o.left + f), "using" in t ? t.using.call(e, l) : i.css(l)
    3795         }
    3796     }, b.fn.extend({
     4099            u ? (c = i.position(), p = c.top, f = c.left) : (p = parseFloat(a) || 0, f = parseFloat(s) || 0),
     4100            b.isFunction(t) && (t = t.call(e, n, o)),
     4101            null != t.top && (l.top = t.top - o.top + p),
     4102            null != t.left && (l.left = t.left - o.left + f),
     4103            "using" in t ? t.using.call(e, l) : i.css(l)
     4104        }
     4105    },
     4106    b.fn.extend({
    37974107        position: function() {
    37984108            if (this[0]) {
     
    38184128            })
    38194129        }
    3820     }), b.each({
     4130    }),
     4131    b.each({
    38214132        scrollLeft: "pageXOffset",
    38224133        scrollTop: "pageYOffset"
     
    38514162            }
    38524163        })
    3853     }), e.jQuery = e.$ = b, "function" == typeof define && define.amd && define.amd.jQuery && define("jquery", [], function() {
     4164    }),
     4165    e.jQuery = e.$ = b,
     4166    "function" == typeof define && define.amd && define.amd.jQuery && define("jquery", [], function() {
    38544167        return b
    38554168    })
  • trunk/Source/JavaScriptCore/ChangeLog

    r259767 r259781  
     12020-04-08  Devin Rousso  <drousso@apple.com>
     2
     3        Web Inspector: Debugger: treat comma sub-expressions as separate statements
     4        https://bugs.webkit.org/show_bug.cgi?id=209998
     5
     6        Reviewed by Joseph Pecoraro.
     7
     8        Minifiers sometimes use `,` instead of `;` as a way of compressing multiple statements into
     9        a single statement (e.g. inside an `if` conditional). This makes stepping through minified
     10        code much less useful, as our current stepping logic is based on expressions (not including
     11        step in or step out). In most cases, we do actually want to treat each sub-expression in a
     12        comma expression as a statement so as to emulate the behaviour as if there were `;` instead.
     13
     14        * bytecompiler/NodesCodegen.cpp:
     15        (JSC::CommaNode::emitBytecode):
     16
     17        * parser/Parser.cpp:
     18        (JSC::Parser<LexerType>::parseVariableDeclarationList):
     19        (Parser<LexerType>::parseExpression):
     20        Shift the location of subsequent sub-expressions to be after the comma. Add breakpoint pause
     21        locations for each subsequent sub-expression.
     22
    1232020-04-08  Ross Kirsling  <ross.kirsling@sony.com>
    224
  • trunk/Source/JavaScriptCore/bytecompiler/NodesCodegen.cpp

    r259676 r259781  
    30433043{
    30443044    CommaNode* node = this;
    3045     for (; node && node->next(); node = node->next())
     3045    for (; node->next(); node = node->next()) {
    30463046        generator.emitNode(generator.ignoredResult(), node->m_expr);
     3047
     3048        // Don't emit a debug hook for the first expression, as that should've already happened in
     3049        // the containing statement.
     3050        generator.emitDebugHook(node->next()->m_expr);
     3051    }
    30473052    return generator.emitNodeInTailPosition(dst, node->m_expr);
    30483053}
  • trunk/Source/JavaScriptCore/parser/Parser.cpp

    r259216 r259781  
    810810    ASSERT(declarationType == DeclarationType::LetDeclaration || declarationType == DeclarationType::VarDeclaration || declarationType == DeclarationType::ConstDeclaration);
    811811    TreeExpression head = 0;
     812    JSTokenLocation headLocation;
    812813    TreeExpression tail = 0;
    813814    const Identifier* lastIdent;
     
    819820        JSTokenLocation location(tokenLocation());
    820821        next();
     822        if (head) {
     823            // Move the location of subsequent declarations after the comma.
     824            location = tokenLocation();
     825        }
    821826        TreeExpression node = 0;
    822827        declarations++;
     
    889894
    890895        if (node) {
    891             if (!head)
     896            if (!head) {
    892897                head = node;
    893             else if (!tail) {
    894                 head = context.createCommaExpr(location, head);
    895                 tail = context.appendToCommaExpr(location, head, head, node);
    896             } else
     898                headLocation = location;
     899            } else {
     900                if (!tail)
     901                    head = tail = context.createCommaExpr(headLocation, head);
    897902                tail = context.appendToCommaExpr(location, head, tail, node);
     903                recordPauseLocation(context.breakpointLocation(tail));
     904            }
    898905        }
    899906    } while (match(COMMA));
     
    36983705{
    36993706    failIfStackOverflow();
    3700     JSTokenLocation location(tokenLocation());
     3707    JSTokenLocation headLocation(tokenLocation());
    37013708    TreeExpression node = parseAssignmentExpression(context);
    37023709    failIfFalse(node, "Cannot parse expression");
     
    37073714    m_parserState.nonTrivialExpressionCount++;
    37083715    m_parserState.nonLHSCount++;
     3716    JSTokenLocation tailLocation(tokenLocation());
    37093717    TreeExpression right = parseAssignmentExpression(context);
    37103718    failIfFalse(right, "Cannot parse expression in a comma expression");
    37113719    context.setEndOffset(right, m_lastTokenEndPosition.offset);
    3712     typename TreeBuilder::Comma head = context.createCommaExpr(location, node);
    3713     typename TreeBuilder::Comma tail = context.appendToCommaExpr(location, head, head, right);
     3720    typename TreeBuilder::Comma head = context.createCommaExpr(headLocation, node);
     3721    typename TreeBuilder::Comma tail = context.appendToCommaExpr(tailLocation, head, head, right);
     3722    recordPauseLocation(context.breakpointLocation(tail));
    37143723    while (match(COMMA)) {
    37153724        next(TreeBuilder::DontBuildStrings);
     3725        tailLocation = tokenLocation();
    37163726        right = parseAssignmentExpression(context);
    37173727        failIfFalse(right, "Cannot parse expression in a comma expression");
    37183728        context.setEndOffset(right, m_lastTokenEndPosition.offset);
    3719         tail = context.appendToCommaExpr(location, head, tail, right);
     3729        tail = context.appendToCommaExpr(tailLocation, head, tail, right);
     3730        recordPauseLocation(context.breakpointLocation(tail));
    37203731    }
    37213732    context.setEndOffset(head, m_lastTokenEndPosition.offset);
  • trunk/Source/WebInspectorUI/ChangeLog

    r259748 r259781  
     12020-04-08  Devin Rousso  <drousso@apple.com>
     2
     3        Web Inspector: Debugger: treat comma sub-expressions as separate statements
     4        https://bugs.webkit.org/show_bug.cgi?id=209998
     5
     6        Reviewed by Joseph Pecoraro.
     7
     8        Minifiers sometimes use `,` instead of `;` as a way of compressing multiple statements into
     9        a single statement (e.g. inside an `if` conditional). This makes stepping through minified
     10        code much less useful, as our current stepping logic is based on expressions (not including
     11        step in or step out). In most cases, we do actually want to treat each sub-expression in a
     12        comma expression as a statement so as to emulate the behaviour as if there were `;` instead.
     13
     14        * UserInterface/Workers/Formatter/JSFormatter.js:
     15        (JSFormatter.prototype._isLikelyToHaveNewline):
     16        (JSFormatter.prototype._handleTokenAtNode):
     17        Put each sub-expression in a comma expression on it's own line.
     18
    1192020-04-08  Devin Rousso  <drousso@apple.com>
    220
  • trunk/Source/WebInspectorUI/UserInterface/Workers/Formatter/JSFormatter.js

    r250544 r259781  
    202202    _isLikelyToHaveNewline(node)
    203203    {
    204         let nodeType = node.type;
    205         return nodeType === "IfStatement"
    206             || nodeType === "ForStatement"
    207             || nodeType === "ForOfStatement"
    208             || nodeType === "ForInStatement"
    209             || nodeType === "WhileStatement"
    210             || nodeType === "DoWhileStatement"
    211             || nodeType === "SwitchStatement"
    212             || nodeType === "TryStatement"
    213             || nodeType === "FunctionDeclaration"
    214             || nodeType === "ClassDeclaration"
    215             || nodeType === "BlockStatement"
    216             || nodeType === "WithStatement";
     204        switch (node.type) {
     205        case "BlockStatement":
     206        case "ClassDeclaration":
     207        case "DoWhileStatement":
     208        case "ForInStatement":
     209        case "ForOfStatement":
     210        case "ForStatement":
     211        case "FunctionDeclaration":
     212        case "IfStatement":
     213        case "SwitchStatement":
     214        case "TryStatement":
     215        case "WhileStatement":
     216        case "WithStatement":
     217            return true;
     218
     219        case "ExpressionStatement":
     220            return node.expression.type === "SequenceExpression";
     221        }
     222
     223        return false;
    217224    }
    218225
     
    286293        }
    287294
    288         if (nodeType === "CallExpression" || nodeType === "ArrayExpression" || nodeType === "ArrayPattern" || nodeType === "ObjectPattern" || nodeType === "SequenceExpression") {
     295        if (nodeType === "CallExpression" || nodeType === "ArrayExpression" || nodeType === "ArrayPattern" || nodeType === "ObjectPattern") {
    289296            if (tokenValue === ",") {
    290297                builder.appendToken(tokenValue, tokenOffset);
     
    293300            }
    294301            builder.appendToken(tokenValue, tokenOffset);
     302            return;
     303        }
     304
     305        if (nodeType === "SequenceExpression") {
     306            builder.appendToken(tokenValue, tokenOffset);
     307            if (tokenValue === ",") {
     308                if (node.parent.type === "ExpressionStatement")
     309                    this._appendNewline(node);
     310                else
     311                    builder.appendSpace();
     312            }
    295313            return;
    296314        }
Note: See TracChangeset for help on using the changeset viewer.