zengh
2022-05-16 63ad2c3598400370dd7da5534659fd7e768a0a4a
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703
1704
1705
1706
1707
1708
1709
1710
1711
1712
1713
1714
1715
1716
1717
1718
1719
1720
1721
1722
1723
1724
1725
1726
1727
1728
1729
1730
1731
1732
1733
1734
1735
1736
1737
1738
1739
1740
1741
1742
1743
1744
1745
1746
1747
1748
1749
1750
1751
1752
1753
1754
1755
1756
1757
1758
1759
1760
1761
1762
1763
1764
1765
1766
1767
1768
1769
1770
1771
1772
1773
1774
1775
1776
1777
1778
1779
1780
1781
1782
1783
1784
1785
1786
1787
1788
1789
1790
1791
1792
1793
1794
1795
1796
1797
1798
1799
1800
1801
1802
1803
1804
1805
1806
1807
1808
1809
1810
1811
1812
1813
1814
1815
1816
1817
1818
1819
1820
1821
1822
1823
1824
1825
1826
1827
1828
1829
1830
1831
1832
1833
1834
1835
1836
1837
1838
1839
1840
1841
1842
1843
1844
1845
1846
1847
1848
1849
1850
1851
1852
1853
1854
1855
1856
1857
1858
1859
1860
1861
1862
1863
1864
1865
1866
1867
1868
1869
1870
1871
1872
1873
1874
1875
1876
1877
1878
1879
1880
1881
1882
1883
1884
1885
1886
1887
1888
1889
1890
1891
1892
1893
1894
1895
1896
1897
1898
1899
1900
1901
1902
1903
1904
1905
1906
1907
1908
1909
1910
1911
1912
1913
1914
1915
1916
1917
1918
1919
1920
1921
1922
1923
1924
1925
1926
1927
1928
1929
1930
1931
1932
1933
1934
1935
1936
1937
1938
1939
1940
1941
1942
1943
1944
1945
1946
1947
1948
1949
1950
1951
1952
1953
1954
1955
1956
1957
1958
1959
1960
1961
1962
1963
1964
1965
1966
1967
1968
1969
1970
1971
1972
1973
1974
1975
1976
1977
1978
1979
1980
1981
1982
1983
1984
1985
1986
1987
1988
1989
1990
1991
1992
1993
1994
1995
1996
1997
1998
1999
2000
2001
2002
2003
2004
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
2027
2028
2029
2030
2031
2032
2033
2034
2035
2036
2037
2038
2039
2040
2041
2042
2043
2044
2045
2046
2047
2048
2049
2050
2051
2052
2053
2054
2055
2056
2057
2058
2059
2060
2061
2062
2063
2064
2065
2066
2067
2068
2069
2070
2071
2072
2073
2074
2075
2076
2077
2078
2079
2080
2081
2082
2083
2084
2085
2086
2087
2088
2089
2090
2091
2092
2093
2094
2095
2096
2097
2098
2099
2100
2101
2102
2103
2104
2105
2106
2107
2108
2109
2110
2111
2112
2113
2114
2115
2116
2117
2118
2119
2120
2121
2122
2123
2124
2125
2126
2127
2128
2129
2130
2131
2132
2133
2134
2135
2136
2137
2138
2139
2140
2141
2142
2143
2144
2145
2146
2147
2148
2149
2150
2151
2152
2153
2154
2155
2156
2157
2158
2159
2160
2161
2162
2163
2164
2165
2166
2167
2168
2169
2170
2171
2172
2173
2174
2175
2176
2177
2178
2179
2180
2181
2182
2183
2184
2185
2186
2187
2188
2189
2190
2191
2192
2193
2194
2195
2196
2197
2198
2199
2200
2201
2202
2203
2204
2205
2206
2207
2208
2209
2210
2211
2212
2213
2214
2215
2216
2217
2218
2219
2220
2221
2222
2223
2224
2225
2226
2227
2228
2229
2230
2231
2232
2233
2234
2235
2236
2237
2238
2239
2240
2241
2242
2243
2244
2245
2246
2247
2248
2249
2250
2251
2252
2253
2254
2255
2256
2257
2258
2259
2260
2261
2262
2263
2264
2265
2266
2267
2268
2269
2270
2271
2272
2273
2274
2275
2276
2277
2278
2279
2280
2281
2282
2283
2284
2285
2286
2287
2288
2289
2290
2291
2292
2293
2294
2295
2296
2297
2298
2299
2300
2301
2302
2303
2304
2305
2306
2307
2308
2309
2310
2311
2312
2313
2314
2315
2316
2317
2318
2319
2320
2321
2322
2323
2324
2325
2326
2327
2328
2329
2330
2331
2332
2333
2334
2335
2336
2337
2338
2339
2340
2341
2342
2343
2344
2345
2346
2347
2348
2349
2350
2351
2352
2353
2354
2355
2356
2357
2358
2359
2360
2361
2362
2363
2364
2365
2366
2367
2368
2369
2370
2371
2372
2373
2374
2375
2376
2377
2378
2379
2380
2381
2382
2383
2384
2385
2386
2387
2388
2389
2390
2391
2392
2393
2394
2395
2396
2397
2398
2399
2400
2401
2402
2403
2404
2405
2406
2407
2408
2409
2410
2411
2412
2413
2414
2415
2416
2417
2418
2419
2420
2421
2422
2423
2424
2425
2426
2427
2428
2429
2430
2431
2432
2433
2434
2435
2436
2437
2438
2439
2440
2441
2442
2443
2444
2445
2446
2447
2448
2449
2450
2451
2452
2453
2454
2455
2456
2457
2458
2459
2460
2461
2462
2463
2464
2465
2466
2467
2468
2469
2470
2471
2472
2473
2474
2475
2476
2477
2478
2479
2480
2481
2482
2483
2484
2485
2486
2487
2488
2489
2490
2491
2492
2493
2494
2495
2496
2497
2498
2499
2500
2501
2502
2503
2504
2505
2506
2507
2508
2509
2510
2511
2512
2513
2514
2515
2516
2517
2518
2519
2520
2521
2522
2523
2524
2525
2526
2527
2528
2529
2530
2531
2532
2533
2534
2535
2536
2537
2538
2539
2540
2541
2542
2543
2544
2545
2546
2547
2548
2549
2550
2551
2552
2553
2554
2555
2556
2557
2558
2559
2560
2561
2562
2563
2564
2565
2566
2567
2568
2569
2570
2571
2572
2573
2574
2575
2576
2577
2578
2579
2580
2581
2582
2583
2584
2585
2586
2587
2588
2589
2590
2591
2592
2593
2594
2595
2596
2597
2598
2599
2600
2601
2602
2603
2604
2605
2606
2607
2608
2609
2610
2611
2612
2613
2614
2615
2616
2617
2618
2619
2620
2621
2622
2623
2624
2625
2626
2627
2628
2629
2630
2631
2632
2633
2634
2635
2636
2637
2638
2639
2640
2641
2642
2643
2644
2645
2646
2647
2648
2649
2650
2651
2652
2653
2654
2655
2656
2657
2658
2659
2660
2661
2662
2663
2664
2665
2666
2667
2668
2669
2670
2671
2672
2673
2674
2675
2676
2677
2678
2679
2680
2681
2682
2683
2684
2685
2686
2687
2688
2689
2690
2691
2692
2693
2694
2695
2696
2697
2698
2699
2700
2701
2702
2703
2704
2705
2706
2707
2708
2709
2710
2711
2712
2713
2714
2715
2716
2717
2718
2719
2720
2721
2722
2723
2724
2725
2726
2727
2728
2729
2730
2731
2732
2733
2734
2735
2736
2737
2738
2739
2740
2741
2742
2743
2744
2745
2746
2747
2748
2749
2750
2751
2752
2753
2754
2755
2756
2757
2758
2759
2760
2761
2762
2763
2764
2765
2766
2767
2768
2769
2770
2771
2772
2773
2774
2775
2776
2777
2778
2779
2780
2781
2782
2783
2784
2785
2786
2787
2788
2789
2790
2791
2792
2793
2794
2795
2796
2797
2798
2799
2800
2801
2802
2803
2804
2805
2806
2807
2808
2809
2810
2811
2812
2813
2814
2815
2816
2817
2818
2819
2820
2821
2822
2823
2824
2825
2826
2827
2828
2829
2830
2831
2832
2833
2834
2835
2836
2837
2838
2839
2840
2841
2842
2843
2844
2845
2846
2847
2848
2849
2850
2851
2852
2853
2854
2855
2856
2857
2858
2859
2860
2861
2862
2863
2864
2865
2866
2867
2868
2869
2870
2871
2872
2873
2874
2875
2876
2877
2878
2879
2880
2881
2882
2883
2884
2885
2886
2887
2888
2889
2890
2891
2892
2893
2894
2895
2896
2897
2898
2899
2900
2901
2902
2903
2904
2905
2906
2907
2908
2909
2910
2911
2912
2913
2914
2915
2916
2917
2918
2919
2920
2921
2922
2923
2924
2925
2926
2927
2928
2929
2930
2931
2932
2933
2934
2935
2936
2937
2938
2939
2940
2941
2942
2943
2944
2945
2946
2947
2948
2949
2950
2951
2952
2953
2954
2955
2956
2957
2958
2959
2960
2961
2962
2963
2964
2965
2966
2967
2968
2969
2970
2971
2972
2973
2974
2975
2976
2977
2978
2979
2980
2981
2982
2983
2984
2985
2986
2987
2988
2989
2990
2991
2992
2993
2994
2995
2996
2997
2998
2999
3000
3001
3002
3003
3004
3005
3006
3007
3008
3009
3010
3011
3012
3013
3014
3015
3016
3017
3018
3019
3020
3021
3022
3023
3024
3025
3026
3027
3028
3029
3030
3031
3032
3033
3034
3035
3036
3037
3038
3039
3040
3041
3042
3043
3044
3045
3046
3047
3048
3049
3050
3051
3052
3053
3054
3055
3056
3057
3058
3059
3060
3061
3062
3063
3064
3065
3066
3067
3068
3069
3070
3071
3072
3073
3074
3075
3076
3077
3078
3079
3080
3081
3082
3083
3084
3085
3086
3087
3088
3089
3090
3091
3092
3093
3094
3095
3096
3097
3098
3099
3100
3101
3102
3103
3104
3105
3106
3107
3108
3109
3110
3111
3112
3113
3114
3115
3116
3117
3118
3119
3120
3121
3122
3123
3124
3125
3126
3127
3128
3129
3130
3131
3132
3133
3134
3135
3136
3137
3138
3139
3140
3141
3142
3143
3144
3145
3146
3147
3148
3149
3150
3151
3152
3153
3154
3155
3156
3157
3158
3159
3160
3161
3162
3163
3164
3165
3166
3167
3168
3169
3170
3171
3172
3173
3174
3175
3176
3177
3178
3179
3180
3181
3182
3183
3184
3185
3186
3187
3188
3189
3190
3191
3192
3193
3194
3195
3196
3197
3198
3199
3200
3201
3202
3203
3204
3205
3206
3207
3208
3209
3210
3211
3212
3213
3214
3215
3216
3217
3218
3219
3220
3221
3222
3223
3224
3225
3226
3227
3228
3229
3230
3231
3232
3233
3234
3235
3236
3237
3238
3239
3240
3241
3242
3243
3244
3245
3246
3247
3248
3249
3250
3251
3252
3253
3254
3255
3256
3257
3258
3259
3260
3261
3262
3263
3264
3265
3266
3267
3268
3269
3270
3271
3272
3273
3274
3275
3276
3277
3278
3279
3280
3281
3282
3283
3284
3285
3286
3287
3288
3289
3290
3291
3292
3293
3294
3295
3296
3297
3298
3299
3300
3301
3302
3303
3304
3305
3306
3307
3308
3309
3310
3311
3312
3313
3314
3315
3316
3317
3318
3319
3320
3321
3322
3323
3324
3325
3326
3327
3328
3329
3330
3331
3332
3333
3334
3335
3336
3337
3338
3339
3340
3341
3342
3343
3344
3345
3346
3347
3348
3349
3350
3351
3352
3353
3354
3355
3356
3357
3358
3359
3360
3361
3362
3363
3364
3365
3366
3367
3368
3369
3370
3371
3372
3373
3374
3375
3376
3377
3378
3379
3380
3381
3382
3383
3384
3385
3386
3387
3388
3389
3390
3391
3392
3393
3394
3395
3396
3397
3398
3399
3400
3401
3402
3403
3404
3405
3406
3407
3408
3409
3410
3411
3412
3413
3414
3415
3416
3417
3418
3419
3420
3421
3422
3423
3424
3425
3426
3427
3428
3429
3430
3431
3432
3433
3434
3435
3436
3437
3438
3439
3440
3441
3442
3443
3444
3445
3446
3447
3448
3449
3450
3451
3452
3453
3454
3455
3456
3457
3458
3459
3460
3461
3462
3463
3464
3465
3466
3467
3468
3469
3470
3471
3472
3473
3474
3475
3476
3477
3478
3479
3480
3481
3482
3483
3484
3485
3486
3487
3488
3489
3490
3491
3492
3493
3494
3495
3496
3497
3498
3499
3500
3501
3502
3503
3504
3505
3506
3507
3508
3509
3510
3511
3512
3513
3514
3515
3516
3517
3518
3519
3520
3521
3522
3523
3524
3525
3526
3527
3528
3529
3530
3531
3532
3533
3534
3535
3536
3537
3538
3539
3540
3541
3542
3543
3544
3545
3546
3547
3548
3549
3550
3551
3552
3553
3554
3555
3556
3557
3558
3559
3560
3561
3562
3563
3564
3565
3566
3567
3568
3569
3570
3571
3572
3573
3574
3575
3576
3577
3578
3579
3580
3581
3582
3583
3584
3585
3586
3587
3588
3589
3590
3591
3592
3593
3594
3595
3596
3597
3598
3599
3600
3601
3602
3603
3604
3605
3606
3607
3608
3609
3610
3611
3612
3613
3614
3615
3616
3617
3618
3619
3620
3621
3622
3623
3624
3625
3626
3627
3628
3629
3630
3631
3632
3633
3634
3635
3636
3637
3638
3639
3640
3641
3642
3643
3644
3645
3646
3647
3648
3649
3650
3651
3652
3653
3654
3655
3656
3657
3658
3659
3660
3661
3662
3663
3664
3665
3666
3667
3668
3669
3670
3671
3672
3673
3674
3675
3676
3677
3678
3679
3680
3681
3682
3683
3684
3685
3686
3687
3688
3689
3690
3691
3692
3693
3694
3695
3696
3697
3698
3699
3700
3701
3702
3703
3704
3705
3706
3707
3708
3709
3710
3711
3712
3713
3714
3715
3716
3717
3718
3719
3720
3721
3722
3723
3724
3725
3726
3727
3728
3729
3730
3731
3732
3733
3734
3735
3736
3737
3738
3739
3740
3741
3742
3743
3744
3745
3746
3747
3748
3749
3750
3751
3752
3753
3754
3755
3756
3757
3758
3759
3760
3761
3762
3763
3764
3765
3766
3767
3768
3769
3770
3771
3772
3773
3774
3775
3776
3777
3778
3779
3780
3781
3782
3783
3784
3785
3786
3787
3788
3789
3790
3791
3792
3793
3794
3795
3796
3797
3798
3799
3800
3801
3802
3803
3804
3805
3806
3807
3808
3809
3810
3811
3812
3813
3814
3815
3816
3817
3818
3819
3820
3821
3822
3823
3824
3825
3826
3827
3828
3829
3830
3831
3832
3833
3834
3835
3836
3837
3838
3839
3840
3841
3842
3843
3844
3845
3846
3847
3848
3849
3850
3851
3852
3853
3854
3855
3856
3857
3858
3859
3860
3861
3862
3863
3864
3865
3866
3867
3868
3869
3870
3871
3872
3873
3874
3875
3876
3877
3878
3879
3880
3881
3882
3883
3884
3885
3886
3887
3888
3889
3890
3891
3892
3893
3894
3895
3896
3897
3898
3899
3900
3901
3902
3903
3904
3905
3906
3907
3908
3909
3910
3911
3912
3913
3914
3915
3916
3917
3918
3919
3920
3921
3922
3923
3924
3925
3926
3927
3928
3929
3930
3931
3932
3933
3934
3935
3936
3937
3938
3939
3940
3941
3942
3943
3944
3945
3946
3947
3948
3949
3950
3951
3952
3953
3954
3955
3956
3957
3958
3959
3960
3961
3962
3963
3964
3965
3966
3967
3968
3969
3970
3971
3972
3973
3974
3975
3976
3977
3978
3979
3980
3981
3982
3983
3984
3985
3986
3987
3988
3989
3990
3991
3992
3993
3994
3995
3996
3997
3998
3999
4000
4001
4002
4003
4004
4005
4006
4007
4008
4009
4010
4011
4012
4013
4014
4015
4016
4017
4018
4019
4020
4021
4022
4023
4024
4025
4026
4027
4028
4029
4030
4031
4032
4033
4034
4035
4036
4037
4038
4039
4040
4041
4042
4043
4044
4045
4046
4047
4048
4049
4050
4051
4052
4053
4054
4055
4056
4057
4058
4059
4060
4061
4062
4063
4064
4065
4066
4067
4068
4069
4070
4071
4072
4073
4074
4075
4076
4077
4078
4079
4080
4081
4082
4083
4084
4085
4086
4087
4088
4089
4090
4091
4092
4093
4094
4095
4096
4097
4098
4099
4100
4101
4102
4103
4104
4105
4106
4107
4108
4109
4110
4111
4112
4113
4114
4115
4116
4117
4118
4119
4120
4121
4122
4123
4124
4125
4126
4127
4128
4129
4130
4131
4132
4133
4134
4135
4136
4137
4138
4139
4140
4141
4142
4143
4144
4145
4146
4147
4148
4149
4150
4151
4152
4153
4154
4155
4156
4157
4158
4159
4160
4161
4162
4163
4164
4165
4166
4167
4168
4169
4170
4171
4172
4173
4174
4175
4176
4177
4178
4179
4180
4181
4182
4183
4184
4185
4186
4187
4188
4189
4190
4191
4192
4193
4194
4195
4196
4197
4198
4199
4200
4201
4202
4203
4204
4205
4206
4207
4208
4209
4210
4211
4212
4213
4214
4215
4216
4217
4218
4219
4220
4221
4222
4223
4224
4225
4226
4227
4228
4229
4230
4231
4232
4233
4234
4235
4236
4237
4238
4239
4240
4241
4242
4243
4244
4245
4246
4247
4248
4249
4250
4251
4252
4253
4254
4255
4256
4257
4258
4259
4260
4261
4262
4263
4264
4265
4266
4267
4268
4269
4270
4271
4272
4273
4274
4275
4276
4277
4278
4279
4280
4281
4282
4283
4284
4285
4286
4287
4288
4289
4290
4291
4292
4293
4294
4295
4296
4297
4298
4299
4300
4301
4302
4303
4304
4305
4306
4307
4308
4309
4310
4311
4312
4313
4314
4315
4316
4317
4318
4319
4320
4321
4322
4323
4324
4325
4326
4327
4328
4329
4330
4331
4332
4333
4334
4335
4336
4337
4338
4339
4340
4341
4342
4343
4344
4345
4346
4347
4348
4349
4350
4351
4352
4353
4354
4355
4356
4357
4358
4359
4360
4361
4362
4363
4364
4365
4366
4367
4368
4369
4370
4371
4372
4373
4374
4375
4376
4377
4378
4379
4380
4381
4382
4383
4384
4385
4386
4387
4388
4389
4390
4391
4392
4393
4394
4395
4396
4397
4398
4399
4400
4401
4402
4403
4404
4405
4406
4407
4408
4409
4410
4411
4412
4413
4414
4415
4416
4417
4418
4419
4420
4421
4422
4423
4424
4425
4426
4427
4428
4429
4430
4431
4432
4433
4434
4435
4436
4437
4438
4439
4440
4441
4442
4443
4444
4445
4446
4447
4448
4449
4450
4451
4452
4453
4454
4455
4456
4457
4458
4459
4460
4461
4462
4463
4464
4465
4466
4467
4468
4469
4470
4471
4472
4473
4474
4475
4476
4477
4478
4479
4480
4481
4482
4483
4484
4485
4486
4487
4488
4489
4490
4491
4492
4493
4494
4495
4496
4497
4498
4499
4500
4501
4502
4503
4504
4505
4506
4507
4508
4509
4510
4511
4512
4513
4514
4515
4516
4517
4518
4519
4520
4521
4522
4523
4524
4525
4526
4527
4528
4529
4530
4531
4532
4533
4534
4535
4536
4537
4538
4539
4540
4541
4542
4543
4544
4545
4546
4547
4548
4549
4550
4551
4552
4553
4554
4555
4556
4557
4558
4559
4560
4561
4562
4563
4564
4565
4566
4567
4568
4569
4570
4571
4572
4573
4574
4575
4576
4577
4578
4579
4580
4581
4582
4583
4584
4585
4586
4587
4588
4589
4590
4591
4592
4593
4594
4595
4596
4597
4598
4599
4600
4601
4602
4603
4604
4605
4606
4607
4608
4609
4610
4611
4612
4613
4614
4615
4616
4617
4618
4619
4620
4621
4622
4623
4624
4625
4626
4627
4628
4629
4630
4631
4632
4633
4634
4635
4636
4637
4638
4639
4640
4641
4642
4643
4644
4645
4646
4647
4648
4649
4650
4651
4652
4653
4654
4655
4656
4657
4658
4659
4660
4661
4662
4663
4664
4665
4666
4667
4668
4669
4670
4671
4672
4673
4674
4675
4676
4677
4678
4679
4680
4681
4682
4683
4684
4685
4686
4687
4688
4689
4690
4691
4692
4693
4694
4695
4696
4697
4698
4699
4700
4701
4702
4703
4704
4705
4706
4707
4708
4709
4710
4711
4712
4713
4714
4715
4716
4717
4718
4719
4720
4721
4722
4723
4724
4725
4726
4727
4728
4729
4730
4731
4732
4733
4734
4735
4736
4737
4738
4739
4740
4741
4742
4743
4744
4745
4746
4747
4748
4749
4750
4751
4752
4753
4754
4755
4756
4757
4758
4759
4760
4761
4762
4763
4764
4765
4766
4767
4768
4769
4770
4771
4772
4773
4774
4775
4776
4777
4778
4779
4780
4781
4782
4783
4784
4785
4786
4787
4788
4789
4790
4791
4792
4793
4794
4795
4796
4797
4798
4799
4800
4801
4802
4803
4804
4805
4806
4807
4808
4809
4810
4811
4812
4813
4814
4815
4816
4817
4818
4819
4820
4821
4822
4823
4824
4825
4826
4827
4828
4829
4830
4831
4832
4833
4834
4835
4836
4837
4838
4839
4840
4841
4842
4843
4844
4845
4846
4847
4848
4849
4850
4851
4852
4853
4854
4855
4856
4857
4858
4859
4860
4861
4862
4863
4864
4865
4866
4867
4868
4869
4870
4871
4872
4873
4874
4875
4876
4877
4878
4879
4880
4881
4882
4883
4884
4885
4886
4887
4888
4889
4890
4891
4892
4893
4894
4895
4896
4897
4898
4899
4900
4901
4902
4903
4904
4905
4906
4907
4908
4909
4910
4911
4912
4913
4914
4915
4916
4917
4918
4919
4920
4921
4922
4923
4924
4925
4926
4927
4928
4929
4930
4931
4932
4933
4934
4935
4936
4937
4938
4939
4940
4941
4942
4943
4944
4945
4946
4947
4948
4949
4950
4951
4952
4953
4954
4955
4956
4957
4958
4959
4960
4961
4962
4963
4964
4965
4966
4967
4968
4969
4970
4971
4972
4973
4974
4975
4976
4977
4978
4979
4980
4981
4982
4983
4984
4985
4986
4987
4988
4989
4990
4991
4992
4993
4994
4995
4996
4997
4998
4999
5000
5001
5002
5003
5004
5005
5006
5007
5008
5009
5010
5011
5012
5013
5014
5015
5016
5017
5018
5019
5020
5021
5022
5023
5024
5025
5026
5027
5028
5029
5030
5031
5032
5033
5034
5035
5036
5037
5038
5039
5040
5041
5042
5043
5044
5045
5046
5047
5048
5049
5050
5051
5052
5053
5054
5055
5056
5057
5058
5059
5060
5061
5062
5063
5064
5065
5066
5067
5068
5069
5070
5071
5072
5073
5074
5075
5076
5077
5078
5079
5080
5081
5082
5083
5084
5085
5086
5087
5088
5089
5090
5091
5092
5093
5094
5095
5096
5097
5098
5099
5100
5101
5102
5103
5104
5105
5106
5107
5108
5109
5110
5111
5112
5113
5114
5115
5116
5117
5118
5119
5120
5121
5122
5123
5124
5125
5126
5127
5128
5129
5130
5131
5132
5133
5134
5135
5136
5137
5138
5139
5140
5141
5142
5143
5144
5145
5146
5147
5148
5149
5150
5151
5152
5153
5154
5155
5156
5157
5158
5159
5160
5161
5162
5163
5164
5165
5166
5167
5168
5169
5170
5171
5172
5173
5174
5175
5176
5177
5178
5179
5180
5181
5182
5183
5184
5185
5186
5187
5188
5189
5190
5191
5192
5193
5194
5195
5196
5197
5198
5199
5200
5201
5202
5203
5204
5205
5206
5207
5208
5209
5210
5211
5212
5213
5214
5215
5216
5217
5218
5219
5220
5221
5222
5223
5224
5225
5226
5227
5228
5229
5230
5231
5232
5233
5234
5235
5236
5237
5238
5239
5240
5241
5242
5243
5244
5245
5246
5247
5248
5249
5250
5251
5252
5253
5254
5255
5256
5257
5258
5259
5260
5261
5262
5263
5264
5265
5266
5267
5268
5269
5270
5271
5272
5273
5274
5275
5276
5277
5278
5279
5280
5281
5282
5283
5284
5285
5286
5287
5288
5289
5290
5291
5292
5293
5294
5295
5296
5297
5298
5299
5300
5301
5302
5303
5304
5305
5306
5307
5308
5309
5310
5311
5312
5313
5314
5315
5316
5317
5318
5319
5320
5321
5322
5323
5324
5325
5326
5327
5328
5329
5330
5331
5332
5333
5334
5335
5336
5337
5338
5339
5340
5341
5342
5343
5344
5345
5346
5347
5348
5349
5350
5351
5352
5353
5354
5355
5356
5357
5358
5359
5360
5361
5362
5363
5364
5365
5366
5367
5368
5369
5370
5371
5372
5373
5374
5375
5376
5377
5378
5379
5380
5381
5382
5383
5384
5385
5386
5387
5388
5389
5390
5391
5392
5393
5394
5395
5396
5397
5398
5399
5400
5401
5402
5403
5404
5405
5406
5407
5408
5409
5410
5411
5412
5413
5414
5415
5416
5417
5418
5419
5420
5421
5422
5423
5424
5425
5426
5427
5428
5429
5430
5431
5432
5433
5434
5435
5436
5437
5438
5439
5440
5441
5442
5443
5444
5445
5446
5447
5448
5449
5450
5451
5452
5453
5454
5455
5456
5457
5458
5459
5460
5461
5462
5463
5464
5465
5466
5467
5468
5469
5470
5471
5472
5473
5474
5475
5476
5477
5478
5479
5480
5481
5482
5483
5484
5485
5486
5487
5488
5489
5490
5491
5492
5493
5494
5495
5496
5497
5498
5499
5500
5501
5502
5503
5504
5505
5506
5507
5508
5509
5510
5511
5512
5513
5514
5515
5516
5517
5518
5519
5520
5521
5522
5523
5524
5525
5526
5527
5528
5529
5530
5531
5532
5533
5534
5535
5536
5537
5538
5539
5540
5541
5542
5543
5544
5545
5546
5547
5548
5549
5550
5551
5552
5553
5554
5555
5556
5557
5558
5559
5560
5561
5562
5563
5564
5565
5566
5567
5568
5569
5570
5571
5572
5573
5574
5575
5576
5577
5578
5579
5580
5581
5582
5583
5584
5585
5586
5587
5588
5589
5590
5591
5592
5593
5594
5595
5596
5597
5598
5599
5600
5601
5602
5603
5604
5605
5606
5607
5608
5609
5610
5611
5612
5613
5614
5615
5616
5617
5618
5619
5620
5621
5622
5623
5624
5625
5626
5627
5628
5629
5630
5631
5632
5633
5634
5635
5636
5637
5638
5639
5640
5641
5642
5643
5644
5645
5646
5647
5648
5649
5650
5651
5652
5653
5654
5655
5656
5657
5658
5659
5660
5661
5662
5663
5664
5665
5666
5667
5668
5669
5670
5671
5672
5673
5674
5675
5676
5677
5678
5679
5680
5681
5682
5683
5684
5685
5686
5687
5688
5689
5690
5691
5692
5693
5694
5695
5696
5697
5698
5699
5700
5701
5702
5703
5704
5705
5706
5707
5708
5709
5710
5711
5712
5713
5714
5715
5716
5717
5718
5719
5720
5721
5722
5723
5724
5725
5726
5727
5728
5729
5730
5731
5732
5733
5734
5735
5736
5737
5738
5739
5740
5741
5742
5743
5744
5745
5746
5747
5748
5749
5750
5751
5752
5753
5754
5755
5756
5757
5758
5759
5760
5761
5762
5763
5764
5765
5766
5767
5768
5769
5770
5771
5772
5773
5774
5775
5776
5777
5778
5779
5780
5781
5782
5783
5784
5785
5786
5787
5788
5789
5790
5791
5792
5793
5794
5795
5796
5797
5798
5799
5800
5801
5802
5803
5804
5805
5806
5807
5808
5809
5810
5811
5812
5813
5814
5815
5816
5817
5818
5819
5820
5821
5822
5823
5824
5825
5826
5827
5828
5829
5830
5831
5832
5833
5834
5835
5836
5837
5838
5839
5840
5841
5842
5843
5844
5845
5846
5847
5848
5849
5850
5851
5852
5853
5854
5855
5856
5857
5858
5859
5860
5861
5862
5863
5864
5865
5866
5867
5868
5869
5870
5871
5872
5873
5874
5875
5876
5877
5878
5879
5880
5881
5882
5883
5884
5885
5886
5887
5888
5889
5890
5891
5892
5893
5894
5895
5896
5897
5898
5899
5900
5901
5902
5903
5904
5905
5906
5907
5908
5909
5910
5911
5912
5913
5914
5915
5916
5917
5918
5919
5920
5921
5922
5923
5924
5925
5926
5927
5928
5929
5930
5931
5932
5933
5934
5935
5936
5937
5938
5939
5940
5941
5942
5943
5944
5945
5946
5947
5948
5949
5950
5951
5952
5953
5954
5955
5956
5957
5958
5959
5960
5961
5962
5963
5964
5965
5966
5967
5968
5969
5970
5971
5972
5973
5974
5975
5976
5977
5978
5979
5980
5981
5982
5983
5984
5985
5986
5987
5988
5989
5990
5991
5992
5993
5994
5995
5996
5997
5998
5999
6000
6001
6002
6003
6004
6005
6006
6007
6008
6009
6010
6011
6012
6013
6014
6015
6016
6017
6018
6019
6020
6021
6022
6023
6024
6025
6026
6027
6028
6029
6030
6031
6032
6033
6034
6035
6036
6037
6038
6039
6040
6041
6042
6043
6044
6045
6046
6047
6048
6049
6050
6051
6052
6053
6054
6055
6056
6057
6058
6059
6060
6061
6062
6063
6064
6065
6066
6067
6068
6069
6070
6071
6072
6073
6074
6075
6076
6077
6078
6079
6080
6081
6082
6083
6084
6085
6086
6087
6088
6089
6090
6091
6092
6093
6094
6095
6096
6097
6098
6099
6100
6101
6102
6103
6104
6105
6106
6107
6108
6109
6110
6111
6112
6113
6114
6115
6116
6117
6118
6119
6120
6121
6122
6123
6124
6125
6126
6127
6128
6129
6130
6131
6132
6133
6134
6135
6136
6137
6138
6139
6140
6141
6142
6143
6144
6145
6146
6147
6148
6149
6150
6151
6152
6153
6154
6155
6156
6157
6158
6159
6160
6161
6162
6163
6164
6165
6166
6167
6168
6169
6170
6171
6172
6173
6174
6175
6176
6177
6178
6179
6180
6181
6182
6183
6184
6185
6186
6187
6188
6189
6190
6191
6192
6193
6194
6195
6196
6197
6198
6199
6200
6201
6202
6203
6204
6205
6206
6207
6208
6209
6210
6211
6212
6213
6214
6215
6216
6217
6218
6219
6220
6221
6222
6223
6224
6225
6226
6227
6228
6229
6230
6231
6232
6233
6234
6235
6236
6237
6238
6239
6240
6241
6242
6243
6244
6245
6246
6247
6248
6249
6250
6251
6252
6253
6254
6255
6256
6257
6258
6259
6260
6261
6262
6263
6264
6265
6266
6267
6268
6269
6270
6271
6272
6273
6274
6275
6276
6277
6278
6279
6280
6281
6282
6283
6284
6285
6286
6287
6288
6289
6290
6291
6292
6293
6294
6295
6296
6297
6298
6299
6300
6301
6302
6303
6304
6305
6306
6307
6308
6309
6310
6311
6312
6313
6314
6315
6316
6317
6318
6319
6320
6321
6322
6323
6324
6325
6326
6327
6328
6329
6330
6331
6332
6333
6334
6335
6336
6337
6338
6339
6340
6341
6342
6343
6344
6345
6346
6347
6348
6349
6350
6351
6352
6353
6354
6355
6356
6357
6358
6359
6360
6361
6362
6363
6364
6365
6366
6367
6368
6369
6370
6371
6372
6373
6374
6375
6376
6377
6378
6379
6380
6381
6382
6383
6384
6385
6386
6387
6388
6389
6390
6391
6392
6393
6394
6395
6396
6397
6398
6399
6400
6401
6402
6403
6404
6405
6406
6407
6408
6409
6410
6411
6412
6413
6414
6415
6416
6417
6418
6419
6420
6421
6422
6423
6424
6425
6426
6427
6428
6429
6430
6431
6432
6433
6434
6435
6436
6437
6438
6439
6440
6441
6442
6443
6444
6445
6446
6447
6448
6449
6450
6451
6452
6453
6454
6455
6456
6457
6458
6459
6460
6461
6462
6463
6464
6465
6466
6467
6468
6469
6470
6471
6472
6473
6474
6475
6476
6477
6478
6479
6480
6481
6482
6483
6484
6485
6486
6487
6488
6489
6490
6491
6492
6493
6494
6495
6496
6497
6498
6499
6500
6501
6502
6503
6504
6505
6506
6507
6508
6509
6510
6511
6512
6513
6514
6515
6516
6517
6518
6519
6520
6521
6522
6523
6524
6525
6526
6527
6528
6529
6530
6531
6532
6533
6534
6535
6536
6537
6538
6539
6540
6541
6542
6543
6544
6545
6546
6547
6548
6549
6550
6551
6552
6553
6554
6555
6556
6557
6558
6559
6560
6561
6562
6563
6564
6565
6566
6567
6568
6569
6570
6571
6572
6573
6574
6575
6576
6577
6578
6579
6580
6581
6582
6583
6584
6585
6586
6587
6588
6589
6590
6591
6592
6593
6594
6595
6596
6597
6598
6599
6600
6601
6602
6603
6604
6605
6606
6607
6608
6609
6610
6611
6612
6613
6614
6615
6616
6617
6618
6619
6620
6621
6622
6623
6624
6625
6626
6627
6628
6629
6630
6631
6632
6633
6634
6635
6636
6637
6638
6639
6640
6641
6642
6643
6644
6645
6646
6647
6648
6649
6650
6651
6652
6653
6654
6655
6656
6657
6658
6659
6660
6661
6662
6663
6664
6665
6666
6667
6668
6669
6670
6671
6672
6673
6674
6675
6676
6677
6678
6679
6680
6681
6682
6683
6684
6685
6686
6687
6688
6689
6690
6691
6692
6693
6694
6695
6696
6697
6698
6699
6700
6701
6702
6703
6704
6705
6706
6707
6708
6709
6710
6711
6712
6713
6714
6715
6716
6717
6718
6719
6720
6721
6722
6723
6724
6725
6726
6727
6728
6729
6730
6731
6732
6733
6734
6735
6736
6737
6738
6739
6740
6741
6742
6743
6744
6745
6746
6747
6748
6749
6750
6751
6752
6753
6754
6755
6756
6757
6758
6759
6760
6761
6762
6763
6764
6765
6766
6767
6768
6769
6770
6771
6772
6773
6774
6775
6776
6777
6778
6779
6780
6781
6782
6783
6784
6785
6786
6787
6788
6789
6790
6791
6792
6793
6794
6795
6796
6797
6798
6799
6800
6801
6802
6803
6804
6805
6806
6807
6808
6809
6810
6811
6812
6813
6814
6815
6816
6817
6818
6819
6820
6821
6822
6823
6824
6825
6826
6827
6828
6829
6830
6831
6832
6833
6834
6835
6836
6837
6838
6839
6840
6841
6842
6843
6844
6845
6846
6847
6848
6849
6850
6851
6852
6853
6854
6855
6856
6857
6858
6859
6860
6861
6862
6863
6864
6865
6866
6867
6868
6869
6870
6871
6872
6873
6874
6875
6876
6877
6878
6879
6880
6881
6882
6883
6884
6885
6886
6887
6888
6889
6890
6891
6892
6893
6894
6895
6896
6897
6898
6899
6900
6901
6902
6903
6904
6905
6906
6907
6908
6909
6910
6911
6912
6913
6914
6915
6916
6917
6918
6919
6920
6921
6922
6923
6924
6925
6926
6927
6928
6929
6930
6931
6932
6933
6934
6935
6936
6937
6938
6939
6940
6941
6942
6943
6944
6945
6946
6947
6948
6949
6950
6951
6952
6953
6954
6955
6956
6957
6958
6959
6960
6961
6962
6963
6964
6965
6966
6967
6968
6969
6970
6971
6972
6973
6974
6975
6976
6977
6978
6979
6980
6981
6982
6983
6984
6985
6986
6987
6988
6989
6990
6991
6992
6993
6994
6995
6996
6997
6998
6999
7000
7001
7002
7003
7004
7005
7006
7007
7008
7009
7010
7011
7012
7013
7014
7015
7016
7017
7018
7019
7020
7021
7022
7023
7024
7025
7026
7027
7028
7029
7030
7031
7032
7033
7034
7035
7036
7037
7038
7039
7040
7041
7042
7043
7044
7045
7046
7047
7048
7049
7050
7051
7052
7053
7054
7055
7056
7057
7058
7059
7060
7061
7062
7063
7064
7065
7066
7067
7068
7069
7070
7071
7072
7073
7074
7075
7076
7077
7078
7079
7080
7081
7082
7083
7084
7085
7086
7087
7088
7089
7090
7091
7092
7093
7094
7095
7096
7097
7098
7099
7100
7101
7102
7103
7104
7105
7106
7107
7108
7109
7110
7111
7112
7113
7114
7115
7116
7117
7118
7119
7120
7121
7122
7123
7124
7125
7126
7127
7128
7129
7130
7131
7132
7133
7134
7135
7136
7137
7138
7139
7140
7141
7142
7143
7144
7145
7146
7147
7148
7149
7150
7151
7152
7153
7154
7155
7156
7157
7158
7159
7160
7161
7162
7163
7164
7165
7166
7167
7168
7169
7170
7171
7172
7173
7174
7175
7176
7177
7178
7179
7180
7181
7182
7183
7184
7185
7186
7187
7188
7189
7190
7191
7192
7193
7194
7195
7196
7197
7198
7199
7200
7201
7202
7203
7204
7205
7206
7207
7208
7209
7210
7211
7212
7213
7214
7215
7216
7217
7218
7219
7220
7221
7222
7223
7224
7225
7226
7227
7228
7229
7230
7231
7232
7233
7234
7235
7236
7237
7238
7239
7240
7241
7242
7243
7244
7245
7246
7247
7248
7249
7250
7251
7252
7253
7254
7255
7256
7257
7258
7259
7260
7261
7262
7263
7264
7265
7266
7267
7268
7269
7270
7271
7272
7273
7274
7275
7276
7277
7278
7279
7280
7281
7282
7283
7284
7285
7286
7287
7288
7289
7290
7291
7292
7293
7294
7295
7296
7297
7298
7299
7300
7301
7302
7303
7304
7305
7306
7307
7308
7309
7310
7311
7312
7313
7314
7315
7316
7317
7318
7319
7320
7321
7322
7323
7324
7325
7326
7327
7328
7329
7330
7331
7332
7333
7334
7335
7336
7337
7338
7339
7340
7341
7342
7343
7344
7345
7346
7347
7348
7349
7350
7351
7352
7353
7354
7355
7356
7357
7358
7359
7360
7361
7362
7363
7364
7365
7366
7367
7368
7369
7370
7371
7372
7373
7374
7375
7376
7377
7378
7379
7380
7381
7382
7383
7384
7385
7386
7387
7388
7389
7390
7391
7392
7393
7394
7395
7396
7397
7398
7399
7400
7401
7402
7403
7404
7405
7406
7407
7408
7409
7410
7411
7412
7413
7414
7415
7416
7417
7418
7419
7420
7421
7422
7423
7424
7425
7426
7427
7428
7429
7430
7431
7432
7433
7434
7435
7436
7437
7438
7439
7440
7441
7442
7443
7444
7445
7446
7447
7448
7449
7450
7451
7452
7453
7454
7455
7456
7457
7458
7459
7460
7461
7462
7463
7464
7465
7466
7467
7468
7469
7470
7471
7472
7473
7474
7475
7476
7477
7478
7479
7480
7481
7482
7483
7484
7485
7486
7487
7488
7489
7490
7491
7492
7493
7494
7495
7496
7497
7498
7499
7500
7501
7502
7503
7504
7505
7506
7507
7508
7509
7510
7511
7512
7513
7514
7515
7516
7517
7518
7519
7520
7521
7522
7523
7524
7525
7526
7527
7528
7529
7530
7531
7532
7533
7534
7535
7536
7537
7538
7539
7540
7541
7542
7543
7544
7545
7546
7547
7548
7549
7550
7551
7552
7553
7554
7555
7556
7557
7558
7559
7560
7561
7562
7563
7564
7565
7566
7567
7568
7569
7570
7571
7572
7573
7574
7575
7576
7577
7578
7579
7580
7581
7582
7583
7584
7585
7586
7587
7588
7589
7590
7591
7592
7593
7594
7595
7596
7597
7598
7599
7600
7601
7602
7603
7604
7605
7606
7607
7608
7609
7610
7611
7612
7613
7614
7615
7616
7617
7618
7619
7620
7621
7622
7623
7624
7625
7626
7627
7628
7629
7630
7631
7632
7633
7634
7635
7636
7637
7638
7639
7640
7641
7642
7643
7644
7645
7646
7647
7648
7649
7650
7651
7652
7653
7654
7655
7656
7657
7658
7659
7660
7661
7662
7663
7664
7665
7666
7667
7668
7669
7670
7671
7672
7673
7674
7675
7676
7677
7678
7679
7680
7681
7682
7683
7684
7685
7686
7687
7688
7689
7690
7691
7692
7693
7694
7695
7696
7697
7698
7699
7700
7701
7702
7703
7704
7705
7706
7707
7708
7709
7710
7711
7712
7713
7714
7715
7716
7717
7718
7719
7720
7721
7722
7723
7724
7725
7726
7727
7728
7729
7730
7731
7732
7733
7734
7735
7736
7737
7738
7739
7740
7741
7742
7743
7744
7745
7746
7747
7748
7749
7750
7751
7752
7753
7754
7755
7756
7757
7758
7759
7760
7761
7762
7763
7764
7765
7766
7767
7768
7769
7770
7771
7772
7773
7774
7775
7776
7777
7778
7779
7780
7781
7782
7783
7784
7785
7786
7787
7788
7789
7790
7791
7792
7793
7794
7795
7796
7797
7798
7799
7800
7801
7802
7803
7804
7805
7806
7807
7808
7809
7810
7811
7812
7813
7814
7815
7816
7817
7818
7819
7820
7821
7822
7823
7824
7825
7826
7827
7828
7829
7830
7831
7832
7833
7834
7835
7836
7837
7838
7839
7840
7841
7842
7843
7844
7845
7846
7847
7848
7849
7850
7851
7852
7853
7854
7855
7856
7857
7858
7859
7860
7861
7862
7863
7864
7865
7866
7867
7868
7869
7870
7871
7872
7873
7874
7875
7876
7877
7878
7879
7880
7881
7882
7883
7884
7885
7886
7887
7888
7889
7890
7891
7892
7893
7894
7895
7896
7897
7898
7899
7900
7901
7902
7903
7904
7905
7906
7907
7908
7909
7910
7911
7912
7913
7914
7915
7916
7917
7918
7919
7920
7921
7922
7923
7924
7925
7926
7927
7928
7929
7930
7931
7932
7933
7934
7935
7936
7937
7938
7939
7940
7941
7942
7943
7944
7945
7946
7947
7948
7949
7950
7951
7952
7953
7954
7955
7956
7957
7958
7959
7960
7961
7962
7963
7964
7965
7966
7967
7968
7969
7970
7971
7972
7973
7974
7975
7976
7977
7978
7979
7980
7981
7982
7983
7984
7985
7986
7987
7988
7989
7990
7991
7992
7993
7994
7995
7996
7997
7998
7999
8000
8001
8002
8003
8004
8005
8006
8007
8008
8009
8010
8011
8012
8013
8014
8015
8016
8017
8018
8019
8020
8021
8022
8023
8024
8025
8026
8027
8028
8029
8030
8031
8032
8033
8034
8035
8036
8037
8038
8039
8040
8041
8042
8043
8044
8045
8046
8047
8048
8049
8050
8051
8052
8053
8054
8055
8056
8057
8058
8059
8060
8061
8062
8063
8064
8065
8066
8067
8068
8069
8070
8071
8072
8073
8074
8075
8076
8077
8078
8079
8080
8081
8082
8083
8084
8085
8086
8087
8088
8089
8090
8091
8092
8093
8094
8095
8096
8097
8098
8099
8100
8101
8102
8103
8104
8105
8106
8107
8108
8109
8110
8111
8112
8113
8114
8115
8116
8117
8118
8119
8120
8121
8122
8123
8124
8125
8126
8127
8128
8129
8130
8131
8132
8133
8134
8135
8136
8137
8138
8139
8140
8141
8142
8143
8144
8145
8146
8147
8148
8149
8150
8151
8152
8153
8154
8155
8156
8157
8158
8159
8160
8161
8162
8163
8164
8165
8166
8167
8168
8169
8170
8171
8172
8173
8174
8175
8176
8177
8178
8179
8180
8181
8182
8183
8184
8185
8186
8187
8188
8189
8190
8191
8192
8193
8194
8195
8196
8197
8198
8199
8200
8201
8202
8203
8204
8205
8206
8207
8208
8209
8210
8211
8212
8213
8214
8215
8216
8217
8218
8219
8220
8221
8222
8223
8224
8225
8226
8227
8228
8229
8230
8231
8232
8233
8234
8235
8236
8237
8238
8239
8240
8241
8242
8243
8244
8245
8246
8247
8248
8249
8250
8251
8252
8253
8254
8255
8256
8257
8258
8259
8260
8261
8262
8263
8264
8265
8266
8267
8268
8269
8270
8271
8272
8273
8274
8275
8276
8277
8278
8279
8280
8281
8282
8283
8284
8285
8286
8287
8288
8289
8290
8291
8292
8293
8294
8295
8296
8297
8298
8299
8300
8301
8302
8303
8304
8305
8306
8307
8308
8309
8310
8311
8312
8313
8314
8315
8316
8317
8318
8319
8320
8321
8322
8323
8324
8325
8326
8327
8328
8329
8330
8331
8332
8333
8334
8335
8336
8337
8338
8339
8340
8341
8342
8343
8344
8345
8346
8347
8348
8349
8350
8351
8352
8353
8354
8355
8356
8357
8358
8359
8360
8361
8362
8363
8364
8365
8366
8367
8368
8369
8370
8371
8372
8373
8374
8375
8376
8377
8378
8379
8380
8381
8382
8383
8384
8385
8386
8387
8388
8389
8390
8391
8392
8393
8394
8395
8396
8397
8398
8399
8400
8401
8402
8403
8404
8405
8406
8407
8408
8409
8410
8411
8412
8413
8414
8415
8416
8417
8418
8419
8420
8421
8422
8423
8424
8425
8426
8427
8428
8429
8430
8431
8432
8433
8434
8435
8436
8437
8438
8439
8440
8441
8442
8443
8444
8445
8446
8447
8448
8449
8450
8451
8452
8453
8454
8455
8456
8457
8458
8459
8460
8461
8462
8463
8464
8465
8466
8467
8468
8469
8470
8471
8472
8473
8474
8475
8476
8477
8478
8479
8480
8481
8482
8483
8484
8485
8486
8487
8488
8489
8490
8491
8492
8493
8494
8495
8496
8497
8498
8499
8500
8501
8502
8503
8504
8505
8506
8507
8508
8509
8510
8511
8512
8513
8514
8515
8516
8517
8518
8519
8520
8521
8522
8523
8524
8525
8526
8527
8528
8529
8530
8531
8532
8533
8534
8535
8536
8537
8538
8539
8540
8541
8542
8543
8544
8545
8546
8547
8548
8549
8550
8551
8552
8553
8554
8555
8556
8557
8558
8559
8560
8561
8562
8563
8564
8565
8566
8567
8568
8569
8570
8571
8572
8573
8574
8575
8576
8577
8578
8579
8580
8581
8582
8583
8584
8585
8586
8587
8588
8589
8590
8591
8592
8593
8594
8595
8596
8597
8598
8599
8600
8601
8602
8603
8604
8605
8606
8607
8608
8609
8610
8611
8612
8613
8614
8615
8616
8617
8618
8619
8620
8621
8622
8623
8624
8625
8626
8627
8628
8629
8630
8631
8632
8633
8634
8635
8636
8637
8638
8639
8640
8641
8642
8643
8644
8645
8646
8647
8648
8649
8650
8651
8652
8653
8654
8655
8656
8657
8658
8659
8660
8661
8662
8663
8664
8665
8666
8667
8668
8669
8670
8671
8672
8673
8674
8675
8676
8677
8678
8679
8680
8681
8682
8683
8684
8685
8686
8687
8688
8689
8690
8691
8692
8693
8694
8695
8696
8697
8698
8699
8700
8701
8702
8703
8704
8705
8706
8707
8708
8709
8710
8711
8712
8713
8714
8715
8716
8717
8718
8719
8720
8721
8722
8723
8724
8725
8726
8727
8728
8729
8730
8731
8732
8733
8734
8735
8736
8737
8738
8739
8740
8741
8742
8743
8744
8745
8746
8747
8748
8749
8750
8751
8752
8753
8754
8755
8756
8757
8758
8759
8760
8761
8762
8763
8764
8765
8766
8767
8768
8769
8770
8771
8772
8773
8774
8775
8776
8777
8778
8779
8780
8781
8782
8783
8784
8785
8786
8787
8788
8789
8790
8791
8792
8793
8794
8795
8796
8797
8798
8799
8800
8801
8802
8803
8804
8805
8806
8807
8808
8809
8810
8811
8812
8813
8814
8815
8816
8817
8818
8819
8820
8821
8822
8823
8824
8825
8826
8827
8828
8829
8830
8831
8832
8833
8834
8835
8836
8837
8838
8839
8840
8841
8842
8843
8844
8845
8846
8847
8848
8849
8850
8851
8852
8853
8854
8855
8856
8857
8858
8859
8860
8861
8862
8863
8864
8865
8866
8867
8868
8869
8870
8871
8872
8873
8874
8875
8876
8877
8878
8879
8880
8881
8882
8883
8884
8885
8886
8887
8888
8889
8890
8891
8892
8893
8894
8895
8896
8897
8898
8899
8900
8901
8902
8903
8904
8905
8906
8907
8908
8909
8910
8911
8912
8913
8914
8915
8916
8917
8918
8919
8920
8921
8922
8923
8924
8925
8926
8927
8928
8929
8930
8931
8932
8933
8934
8935
8936
8937
8938
8939
8940
8941
8942
8943
8944
8945
8946
8947
8948
8949
8950
8951
8952
8953
8954
8955
8956
8957
8958
8959
8960
8961
8962
8963
8964
8965
8966
8967
8968
8969
8970
8971
8972
8973
8974
8975
8976
8977
8978
8979
8980
8981
8982
8983
8984
8985
8986
8987
8988
8989
8990
8991
8992
8993
8994
8995
8996
8997
8998
8999
9000
9001
9002
9003
9004
9005
9006
9007
9008
9009
9010
9011
9012
9013
9014
9015
9016
9017
9018
9019
9020
9021
9022
9023
9024
9025
9026
9027
9028
9029
9030
9031
9032
9033
9034
9035
9036
9037
9038
9039
9040
9041
9042
9043
9044
9045
9046
9047
9048
9049
9050
9051
9052
9053
9054
9055
9056
9057
9058
9059
9060
9061
9062
9063
9064
9065
9066
9067
9068
9069
9070
9071
9072
9073
9074
9075
9076
9077
9078
9079
9080
9081
9082
9083
9084
9085
9086
9087
9088
9089
9090
9091
9092
9093
9094
9095
9096
9097
9098
9099
9100
9101
9102
9103
9104
9105
9106
9107
9108
9109
9110
9111
9112
9113
9114
9115
9116
9117
9118
9119
9120
9121
9122
9123
9124
9125
9126
9127
9128
9129
9130
9131
9132
9133
9134
9135
9136
9137
9138
9139
9140
9141
9142
9143
9144
9145
9146
9147
9148
9149
9150
9151
9152
9153
9154
9155
9156
9157
9158
9159
9160
9161
9162
9163
9164
9165
9166
9167
9168
9169
9170
9171
9172
9173
9174
9175
9176
9177
9178
9179
9180
9181
9182
9183
9184
9185
9186
9187
9188
9189
9190
9191
9192
9193
9194
9195
9196
9197
9198
9199
9200
9201
9202
9203
9204
9205
9206
9207
9208
9209
9210
9211
9212
9213
9214
9215
9216
9217
9218
9219
9220
9221
9222
9223
9224
9225
9226
9227
9228
9229
9230
9231
9232
9233
9234
9235
9236
9237
9238
9239
9240
9241
9242
9243
9244
9245
9246
9247
9248
9249
9250
9251
9252
9253
9254
9255
9256
9257
9258
9259
9260
9261
9262
9263
9264
9265
9266
9267
9268
9269
9270
9271
9272
9273
9274
9275
9276
9277
9278
9279
9280
9281
9282
9283
9284
9285
9286
9287
9288
9289
9290
9291
9292
9293
9294
9295
9296
9297
9298
9299
9300
9301
9302
9303
9304
9305
9306
9307
9308
9309
9310
9311
9312
9313
9314
9315
9316
9317
9318
9319
9320
9321
9322
9323
9324
9325
9326
9327
9328
9329
9330
9331
9332
9333
9334
9335
9336
9337
9338
9339
9340
9341
9342
9343
9344
9345
9346
9347
9348
9349
9350
9351
9352
9353
9354
9355
9356
9357
9358
9359
9360
9361
9362
9363
9364
9365
9366
9367
9368
9369
9370
9371
9372
9373
9374
9375
9376
9377
9378
9379
9380
9381
9382
9383
9384
9385
9386
9387
9388
9389
9390
9391
9392
9393
9394
9395
9396
9397
9398
9399
9400
9401
9402
9403
9404
9405
9406
9407
9408
9409
9410
9411
9412
9413
9414
9415
9416
9417
9418
9419
9420
9421
9422
9423
9424
9425
9426
9427
9428
9429
9430
9431
9432
9433
9434
9435
9436
9437
9438
9439
9440
9441
9442
9443
9444
9445
9446
9447
9448
9449
9450
9451
9452
9453
9454
9455
9456
9457
9458
9459
9460
9461
9462
9463
9464
9465
9466
9467
9468
9469
9470
9471
9472
9473
9474
9475
9476
9477
9478
9479
9480
9481
9482
9483
9484
9485
9486
9487
9488
9489
9490
9491
9492
9493
9494
9495
9496
9497
9498
9499
9500
9501
9502
9503
9504
9505
9506
9507
9508
9509
9510
9511
9512
9513
9514
9515
9516
9517
9518
9519
9520
9521
9522
9523
9524
9525
9526
9527
9528
9529
9530
9531
9532
9533
9534
9535
9536
9537
9538
9539
9540
9541
9542
9543
9544
9545
9546
9547
9548
9549
9550
9551
9552
9553
9554
9555
9556
9557
9558
9559
9560
9561
9562
9563
9564
9565
9566
9567
9568
9569
9570
9571
9572
9573
9574
9575
9576
9577
9578
9579
9580
9581
9582
9583
9584
9585
9586
9587
9588
9589
9590
9591
9592
9593
9594
9595
9596
9597
9598
9599
9600
9601
9602
9603
9604
9605
9606
9607
9608
9609
9610
9611
9612
9613
9614
9615
9616
9617
9618
9619
9620
9621
9622
9623
9624
9625
9626
9627
9628
9629
9630
9631
9632
9633
9634
9635
9636
9637
9638
9639
9640
9641
9642
9643
9644
9645
9646
9647
9648
9649
9650
9651
9652
9653
9654
9655
9656
9657
9658
9659
9660
9661
9662
9663
9664
9665
9666
9667
9668
9669
9670
9671
9672
9673
9674
9675
9676
9677
9678
9679
9680
9681
9682
9683
9684
9685
9686
9687
9688
9689
9690
9691
9692
9693
9694
9695
9696
9697
9698
9699
9700
9701
9702
9703
9704
9705
9706
9707
9708
9709
9710
9711
9712
9713
9714
9715
9716
9717
9718
9719
9720
9721
9722
9723
9724
9725
9726
9727
9728
9729
9730
9731
9732
9733
9734
9735
9736
9737
9738
9739
9740
9741
9742
9743
9744
9745
9746
9747
9748
9749
9750
9751
9752
9753
9754
9755
9756
9757
9758
9759
9760
9761
9762
9763
9764
9765
9766
9767
9768
9769
9770
9771
9772
9773
9774
9775
9776
9777
9778
9779
9780
9781
9782
9783
9784
9785
9786
9787
9788
9789
9790
9791
9792
9793
9794
9795
9796
9797
9798
9799
9800
9801
9802
9803
9804
9805
9806
9807
9808
9809
9810
9811
9812
9813
9814
9815
9816
9817
9818
9819
9820
9821
9822
9823
9824
9825
9826
9827
9828
9829
9830
9831
9832
9833
9834
9835
9836
9837
9838
9839
9840
9841
9842
9843
9844
9845
9846
9847
9848
9849
9850
9851
9852
9853
9854
9855
9856
9857
9858
9859
9860
9861
9862
9863
9864
9865
9866
9867
9868
9869
9870
9871
9872
9873
9874
9875
9876
9877
9878
9879
9880
9881
9882
9883
9884
9885
9886
9887
9888
9889
9890
9891
9892
9893
9894
9895
9896
9897
9898
9899
9900
9901
9902
9903
9904
9905
9906
9907
9908
9909
9910
9911
9912
9913
9914
9915
9916
9917
9918
9919
9920
9921
9922
9923
9924
9925
9926
9927
9928
9929
9930
9931
9932
9933
9934
9935
9936
9937
9938
9939
9940
9941
9942
9943
9944
9945
9946
9947
9948
9949
9950
9951
9952
9953
9954
9955
9956
9957
9958
9959
9960
9961
9962
9963
9964
9965
9966
9967
9968
9969
9970
9971
9972
9973
9974
9975
9976
9977
9978
9979
9980
9981
9982
9983
9984
9985
9986
9987
9988
9989
9990
9991
9992
9993
9994
9995
9996
9997
9998
9999
10000
10001
10002
10003
10004
10005
10006
10007
10008
10009
10010
10011
10012
10013
10014
10015
10016
10017
10018
10019
10020
10021
10022
10023
10024
10025
10026
10027
10028
10029
10030
10031
10032
10033
10034
10035
10036
10037
10038
10039
10040
10041
10042
10043
10044
10045
10046
10047
10048
10049
10050
10051
10052
10053
10054
10055
10056
10057
10058
10059
10060
10061
10062
10063
10064
10065
10066
10067
10068
10069
10070
10071
10072
10073
10074
10075
10076
10077
10078
10079
10080
10081
10082
10083
10084
10085
10086
10087
10088
10089
10090
10091
10092
10093
10094
10095
10096
10097
10098
10099
10100
10101
10102
10103
10104
10105
10106
10107
10108
10109
10110
10111
10112
10113
10114
10115
10116
10117
10118
10119
10120
10121
10122
10123
10124
10125
10126
10127
10128
10129
10130
10131
10132
10133
10134
10135
10136
10137
10138
10139
10140
10141
10142
10143
10144
10145
10146
10147
10148
10149
10150
10151
10152
10153
10154
10155
10156
10157
10158
10159
10160
10161
10162
10163
10164
10165
10166
10167
10168
10169
10170
10171
10172
10173
10174
10175
10176
10177
10178
10179
10180
10181
10182
10183
10184
10185
10186
10187
10188
10189
10190
10191
10192
10193
10194
10195
10196
10197
10198
10199
10200
10201
10202
10203
10204
10205
10206
10207
10208
10209
10210
10211
10212
10213
10214
10215
10216
10217
10218
10219
10220
10221
10222
10223
10224
10225
10226
10227
10228
10229
10230
10231
10232
10233
10234
10235
10236
10237
10238
10239
10240
10241
10242
10243
10244
10245
10246
10247
10248
10249
10250
10251
10252
10253
10254
10255
10256
10257
10258
10259
10260
10261
10262
10263
10264
10265
10266
10267
10268
10269
10270
10271
10272
10273
10274
10275
10276
10277
10278
10279
10280
10281
10282
10283
10284
10285
10286
10287
10288
10289
10290
10291
10292
10293
10294
10295
10296
10297
10298
10299
10300
10301
10302
10303
10304
10305
10306
10307
10308
10309
10310
10311
10312
10313
10314
10315
10316
10317
10318
10319
10320
10321
10322
10323
10324
10325
10326
10327
10328
10329
10330
10331
10332
10333
10334
10335
10336
10337
10338
10339
10340
10341
10342
10343
10344
10345
10346
10347
10348
10349
10350
10351
10352
10353
10354
10355
10356
10357
10358
10359
10360
10361
10362
10363
10364
10365
10366
10367
10368
10369
10370
10371
10372
10373
10374
10375
10376
10377
10378
10379
10380
10381
10382
10383
10384
10385
10386
10387
10388
10389
10390
10391
10392
10393
10394
10395
10396
10397
10398
10399
10400
10401
10402
10403
10404
10405
10406
10407
10408
10409
10410
10411
10412
10413
10414
10415
10416
10417
10418
10419
10420
10421
10422
10423
10424
10425
10426
10427
10428
10429
10430
10431
10432
10433
10434
10435
10436
10437
10438
10439
10440
10441
10442
10443
10444
10445
10446
10447
10448
10449
10450
10451
10452
10453
10454
10455
10456
10457
10458
10459
10460
10461
10462
10463
10464
10465
10466
10467
10468
10469
10470
10471
10472
10473
10474
10475
10476
10477
10478
10479
10480
10481
10482
10483
10484
10485
10486
10487
10488
10489
10490
10491
10492
10493
10494
10495
10496
10497
10498
10499
10500
10501
10502
10503
10504
10505
10506
10507
10508
10509
10510
10511
10512
10513
10514
10515
10516
10517
10518
10519
10520
10521
10522
10523
10524
10525
10526
10527
10528
10529
10530
10531
10532
10533
10534
10535
10536
10537
10538
10539
10540
10541
10542
10543
10544
10545
10546
10547
10548
10549
10550
10551
10552
10553
10554
10555
10556
10557
10558
10559
10560
10561
10562
10563
10564
10565
10566
10567
10568
10569
10570
10571
10572
10573
10574
10575
10576
10577
10578
10579
10580
10581
10582
10583
10584
10585
10586
10587
10588
10589
10590
10591
10592
10593
10594
10595
10596
10597
10598
10599
10600
10601
10602
10603
10604
10605
10606
10607
10608
10609
10610
10611
10612
10613
10614
10615
10616
!
function (t, e) {
    if ("object" == typeof exports && "object" == typeof module) module.exports = e();
    else if ("function" == typeof define && define.amd) define([], e);
    else {
        var n = e();
        for (var i in n)("object" == typeof exports ? exports : t)[i] = n[i]
    }
}(this, function () {
    return function (t) {
        function e(i) {
            if (n[i]) return n[i].exports;
            var r = n[i] = {
                exports: {},
                id: i,
                loaded: !1
            };
            return t[i].call(r.exports, r, r.exports, e),
            r.loaded = !0,
            r.exports
        }
        var n = {};
        return e.m = t,
        e.c = n,
        e.p = "",
        e(0)
    }([function (t, e, n) {
        "use strict";
 
        function i(t) {
            return t && t.__esModule ? t : {
            default:
                t
            }
        }
        function r(t, e) {
            if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function")
        }
        Object.defineProperty(e, "__esModule", {
            value: !0
        }),
        e.JSPlugin = void 0;
        var o = function () {
            function t(t, e) {
                for (var n = 0; n < e.length; n++) {
                    var i = e[n];
                    i.enumerable = i.enumerable || !1,
                    i.configurable = !0,
                    "value" in i && (i.writable = !0),
                    Object.defineProperty(t, i.key, i)
                }
            }
            return function (e, n, i) {
                return n && t(e.prototype, n),
                i && t(e, i),
                e
            }
        }(),
            a = n(5),
            s = n(15),
            u = n(16),
            l = n(10),
            f = n(9),
            c = n(1),
            h = i(c),
            d = function () {
                function t() {
                    document.addEventListener("visibilitychange", function () {
                        if (document.hidden) for (var t = 0; t < 16; t++) p[z][t] && p[z][t].bLoad && p[z][t].oPlayCtrl.PlayM4_IsVisible(!1);
                        else for (var e = 0; e < 16; e++) p[z][e] && p[z][e].bLoad && p[z][e].oPlayCtrl.PlayM4_IsVisible(!0)
                    }, !1)
                }
                function e(t, e) {
                    t && e && (p[M].iWidth = t, p[M].iHeight = e);
                    var n = p[M].iWidth % p[M].iCurrentSplit,
                        i = p[M].iHeight % p[M].iCurrentSplit,
                        r = (p[M].iWidth - n - 2 * p[M].iCurrentSplit) / p[M].iCurrentSplit,
                        o = (p[M].iHeight - i - 2 * p[M].iCurrentSplit) / p[M].iCurrentSplit,
                        a = (p[M].iWidth - n) / p[M].iCurrentSplit,
                        s = (p[M].iHeight - i) / p[M].iCurrentSplit,
                        u = p[M].iCurrentSplit;
                    D = (0, h.
                    default)("#" + p[M].szId);
                    for (var l = '<div class="parent-wnd" style="overflow:hidden;width:100%; height:100%; position: relative;">', f = 0; f < p[I]; f++) {
                            t = r + (f % u === u - 1 ? n : 0),
                            e = o + (f + u >= Math.pow(u, 2) ? i : 0);
                            var c = a + (f % u === u - 1 ? n : 0),
                                d = s + (f + u >= Math.pow(u, 2) ? i : 0);
                            l += '<div style="float:left; background-color: ' + p[M].oStyle.background + "; position: relative; width: " + c + "px; height: " + d + 'px;"><canvas id="canvas' + f + '" class="play-window" style="border:1px solid ' + p[M].oStyle.border + ';" wid="' + f + '" width="' + t + '" height="' + e + '"></canvas><canvas id="canvas_draw' + f + '"  class="draw-window" style="position:absolute; top:0; left:0;" wid="' + f + '" width=' + c + " height=" + d + "></canvas></div>"
                            //l += '<div style="float:left; background-color: ' + p[M].oStyle.background + '; position: relative; width:"100%"; height:""><canvas id="canvas--' + f + '" class="play-window" style="border:1px solid ' + p[M].oStyle.border + ';" wid="-' + f + '" width="100%" height="100%"></canvas><canvas id="canvas_draw-' + f + '"  class="draw-window" style="position:absolute; top:0; left:0;" wid="' + f + '" width="100%" height="100%"></canvas></div>'
                        
                        }
                    l += "</div>",
                    D.html(l),
                    D.find(".parent-wnd").eq(0).children().eq(0).find(".play-window").eq(0).css("border", "1px solid " + p[M].oStyle.borderSelect)
                }
                function n() {
                    p.EventCallback = function () {
                        return {
                            loadEventHandler: function () {
                                window.loadEventHandler && window.loadEventHandler()
                            },
                            zoomEventResponse: function () {},
                            windowEventSelect: function (t) {
                                p[H] !== t && (p[H] = t, (p[z][t].bEZoom || p[z][t].b3DZoom) && ((0, h.
                            default)(".draw-window").unbind(), p[A].setDrawStatus(!1), p[A] = null, p[A] = new f.ESCanvas("canvas_draw" + t), p[A].setShapeType("Rect"), p[A].setDrawStyle("#ff0000", "", 0), p[z][t].bEZoom ? p[A].setDrawStatus(!0, function (e) {
                                    e.startPos && e.endPos && (e.startPos[0] > e.endPos[0] ? p[z][t].oPlayCtrl.PlayM4_SetDisplayRegion(null, !1) : p[z][t].oPlayCtrl.PlayM4_SetDisplayRegion({
                                        left: e.startPos[0],
                                        top: e.startPos[1],
                                        right: e.endPos[0],
                                        bottom: e.endPos[1]
                                    }, !0))
                                }) : p[z][t].b3DZoom && p[A].setDrawStatus(!0, function (t) {
                                    p[j](t)
                                })), window.GetSelectWndInfo && window.GetSelectWndInfo(t))
                            },
                            pluginErrorHandler: function (t, e, n) {
                                window.PluginEventHandler && window.PluginEventHandler(t, e, n)
                            },
                            windowEventOver: function (t) {
                                window.windowEventOver && window.windowEventOver(t)
                            },
                            windowEventOut: function (t) {
                                window.windowEventOut && window.windowEventOut(t)
                            },
                            windowEventUp: function (t) {
                                window.windowEventUp && window.windowEventUp(t)
                            },
                            windowFullCcreenChange: function (t) {
                                window.windowFullCcreenChange && window.windowFullCcreenChange(t)
                            },
                            firstFrameDisplay: function (t) {
                                window.firstFrameDisplay && window.firstFrameDisplay(t)
                            },
                            performanceLack: function () {
                                window.performanceLack && window.performanceLack()
                            },
                            mouseEvent: function (t, e, n) {
                                var i = '<?xml version="1.0"?><MouseEvent><WndIndex>0</WndIndex><EventType>' + t + "</EventType><Position><x>" + e + "</x><y>" + n + "</y><delta>0</delta></Position></MouseEvent>";
                                window.onMouseEvent && window.onMouseEvent(i)
                            }
                        }
                    }()
                }
                function i() {
                    n(),
                    D.find(".parent-wnd").eq(0).children().each(function (t) {
                        var e = this,
                            n = !1;
                            (0, h.
                        default)(e).unbind().bind("mousedown", function () {
                                D.find(".parent-wnd").eq(0).find(".play-window").css("border", "1px solid " + p[M].oStyle.border),
                                D.find(".parent-wnd").eq(0).children().eq(t).find(".play-window").eq(0).css("border", "1px solid " + p[M].oStyle.borderSelect),
                                p.EventCallback.windowEventSelect(parseInt(D.find(".parent-wnd").eq(0).children().eq(t).find(".play-window").eq(0).attr("wid"), 10))
                            }),
                        (0, h.
                        default)(e).bind("mouseover", function (e) {
                                p.EventCallback.windowEventOver(t),
                                e.stopPropagation()
                            }),
                        (0, h.
                        default)(e).bind("mouseout", function (e) {
                                p.EventCallback.windowEventOut(t),
                                e.stopPropagation()
                            }),
                        (0, h.
                        default)(e).bind("mousedown", function (t) {
                                n = !0;
                                var e = t.offsetX / p[A].m_iCanvasWidth,
                                    i = t.offsetY / p[A].m_iCanvasHeight;
                                2 === t.button ? p.EventCallback.mouseEvent(4, e, i) : 0 === t.button && p.EventCallback.mouseEvent(1, e, i),
                                t.stopPropagation()
                            }),
                        (0, h.
                        default)(e).bind("mousemove", function (t) {
                                var e = t.offsetX / p[A].m_iCanvasWidth,
                                    i = t.offsetY / p[A].m_iCanvasHeight;
                                n ? p.EventCallback.mouseEvent(7, e, i) : p.EventCallback.mouseEvent(6, e, i),
                                t.stopPropagation()
                            }),
                        (0, h.
                        default)(e).bind("mousewheel", function (t) {
                                var e = t.offsetX / p[A].m_iCanvasWidth,
                                    n = t.offsetY / p[A].m_iCanvasHeight;
                                p.EventCallback.mouseEvent(8, e, n),
                                t.stopPropagation()
                            }),
                        (0, h.
                        default)(e).bind("mouseup", function (e) {
                                n = !1,
                                p.EventCallback.windowEventUp(t);
                                var i = e.offsetX / p[A].m_iCanvasWidth,
                                    r = e.offsetY / p[A].m_iCanvasHeight;
                                2 === e.button ? p.EventCallback.mouseEvent(5, i, r) : 0 === e.button && p.EventCallback.mouseEvent(3, i, r)
                            }),
                        (0, h.
                        default)(e).bind("dblclick", function (t) {
                                if (p[z][p[H]].bPlay) {
                                    var n = document.fullscreen || document.webkitIsFullScreen || document.mozFullScreen || !1,
                                        i = (0, h.
                                    default)(e).get(0);
                                    if (n) {
                                            if (D.find(".parent-wnd").eq(0).width() === (0, h.
                                        default)(window).width()) return;
                                            document.exitFullscreen ? document.exitFullscreen() : document.webkitCancelFullScreen ? document.webkitCancelFullScreen() : document.mozCancelFullScreen && document.mozCancelFullScreen()
                                        } else i.requestFullScreen ? i.requestFullScreen() : i.webkitRequestFullScreen ? i.webkitRequestFullScreen() : i.mozRequestFullScreen && i.mozRequestFullScreen(),
                                    p[B] = (0, h.
                                    default)(e);
                                    var r = t.offsetX / p[A].m_iCanvasWidth,
                                        o = t.offsetX / p[A].m_iCanvasHeight;
                                    p.EventCallback.mouseEvent(2, r, o),
                                    t.stopPropagation()
                                }
                            })
                    }),
                    "undefined" != typeof document.fullScreen ? document.addEventListener("fullscreenchange", function () {
                        var t = document.fullscreen || !1;
                        p.EventCallback.windowFullCcreenChange(t)
                    }) : "undefined" != typeof document.webkitIsFullScreen ? document.addEventListener("webkitfullscreenchange", function () {
                        var t = document.webkitIsFullScreen || !1;
                        p.EventCallback.windowFullCcreenChange(t)
                    }) : "undefined" != typeof document.mozFullScreen && document.addEventListener("mozfullscreenchange", function () {
                        var t = document.mozFullScreen || !1;
                        p.EventCallback.windowFullCcreenChange(t)
                    })
                }
                function c() {
                    for (var t = D.find(".parent-wnd").eq(0).children().length, e = p[M].iWidth % p[M].iCurrentSplit, n = p[M].iHeight % p[M].iCurrentSplit, i = (p[M].iWidth - e - 2 * p[M].iCurrentSplit) / p[M].iCurrentSplit, r = (p[M].iHeight - n - 2 * p[M].iCurrentSplit) / p[M].iCurrentSplit, o = (p[M].iWidth - e) / p[M].iCurrentSplit, a = (p[M].iHeight - n) / p[M].iCurrentSplit, s = p[M].iCurrentSplit, u = 0; u < t; u++) {
                        var l = i + (u % s === s - 1 ? e : 0),
                            f = r + (u + s >= Math.pow(s, 2) ? n : 0),
                            c = o + (u % s === s - 1 ? e : 0),
                            h = a + (u + s >= Math.pow(s, 2) ? n : 0);
                        D.find(".parent-wnd").eq(0).children().eq(u).width(c),
                        D.find(".parent-wnd").eq(0).children().eq(u).height(h),
                        D.find(".parent-wnd").eq(0).children().eq(u).find(".draw-window").attr("width", c),
                        D.find(".parent-wnd").eq(0).children().eq(u).find(".draw-window").attr("height", h),
                        D.find(".parent-wnd").eq(0).children().eq(u).find(".play-window").attr("width", l),
                        D.find(".parent-wnd").eq(0).children().eq(u).find(".play-window").attr("height", f)
                    }
                    D.find(".parent-wnd").eq(p[H]).find(".play-window").css("border", "1px solid " + p[M].oStyle.border),
                    D.find(".parent-wnd").eq(p[H]).children().eq(0).find(".play-window").eq(0).css("border", "1px solid " + p[M].oStyle.borderSelect)
                }
                function d(t, e, n, i, r, o, a) {
                    if ((0, h.
                default)("#" + p[z][n].windowID).length) {
                        var s = !1;
                        i && r && (s = !0),
                        p[z][n].bLoad = !0,
                        T.openStream(t, e, function (t) {
                            if (t.bHead && !p[z][n].bPlay) p[z][n].bPlay = !0,
                            p[z][n].aHead = new Uint8Array(t.buf),
                            p[z][n].oPlayCtrl.PlayM4_OpenStream(t.buf, S, 2097152),
                            "" !== p[z][n].szSecretKey && (p[z][n].oPlayCtrl.PlayM4_SetSecretKey(1, p[z][n].szSecretKey, 128), p[z][n].szSecretKey = ""),
                            4 === p[z][n].aHead[8] ? p[z][n].oPlayCtrl.PlayM4_SetStreamOpenMode(0) : p[z][n].oPlayCtrl.PlayM4_SetStreamOpenMode(1),
                            p[z][n].oPlayCtrl.PlayM4_SetInputBufSize(b),
                            p[z][n].oPlayCtrl.PlayM4_Play(p[z][n].windowID);
                            else {
                                var e = new Uint8Array(t.buf),
                                    i = p[z][n].oPlayCtrl.PlayM4_GetInputBufSize(),
                                    r = p[z][n].oPlayCtrl.PlayM4_GetYUVBufSize();
                                2 !== r || p[z][n].bFirstFrame || (p[z][n].bFirstFrame = !0, p.EventCallback.firstFrameDisplay(n));
                                var o = p[z][n].oPlayCtrl.PlayM4_GetDecodeFrameType();
                                i > .5 * b && i < .8 * b && 1 === p[z][n].iRate ? o !== g && (p[z][n].oPlayCtrl.PlayM4_SetDecodeFrameType(g), p.EventCallback.performanceLack()) : i >= .8 * b && (e = new Uint8Array([1, 2, 3, 4])),
                                r > 10 && r < 15 ? o !== g && (p[z][n].oPlayCtrl.PlayM4_SetDecodeFrameType(g), p.EventCallback.performanceLack()) : r > 15 && (e = new Uint8Array([1, 2, 3, 4])),
                                r < 10 && i < .5 * b && o !== v && p[z][n].oPlayCtrl.PlayM4_SetDecodeFrameType(v),
                                t.statusString ? p.EventCallback.pluginErrorHandler(n, w, t) : t.type && "exception" === t.type ? p.EventCallback.pluginErrorHandler(n, _, t) : p[z][n].oPlayCtrl.PlayM4_InputData(e, e.length),
                                e = null
                            }
                            p[z][n].szStorageUUID && k.inputData(p[z][n].szStorageUUID, t.buf),
                            t = null
                        }, function () {
                            p[z][n].bPlay && (p.EventCallback.pluginErrorHandler(n, P), p[z][n].bPlay = !1, p[z][n].bFrameForward = !1, p[z][n].iRate = 1, p[z][n].oPlayCtrl && (p[z][n].oPlayCtrl.PlayM4_Stop(), p[z][n].oPlayCtrl.PlayM4_CloseStream()))
                        }).then(function (t) {
                            p[z][n].szStreamUUID = t,
                            T.startPlay(t, i, r).then(function () {
                                s ? (p[z][n].szPlayType = "playback", p[z][n].iRate = 1, p[z][n].oPlayCtrl.PlayM4_PlayRate(p[z][n].iRate)) : p[z][n].szPlayType = "realplay",
                                o()
                            }, function (t) {
                                a(t)
                            })
                        }, function (t) {
                            a(t)
                        })
                    }
                }
                if ("undefined" != typeof Symbol) {
                    var p = null,
                        y = -1,
                        m = 0,
                        v = 0,
                        g = 1,
                        S = 40,
                        b = 4194304,
                        w = 1001,
                        _ = 1002,
                        P = 1003,
                        C = 2001,
                        x = 2002,
                        T = new s.StreamClient,
                        k = null,
                        D = null,
                        M = Symbol("OPTIONS"),
                        R = Symbol("CURRENTPLAYRATE"),
                        E = Symbol("CURRENTSOUNDWND"),
                        I = Symbol("MAXWNDNUM"),
                        z = Symbol("MAXWNDNUM"),
                        A = Symbol("DRAWCANVAS"),
                        F = Symbol("SHAPEID"),
                        O = Symbol("WINDOWFULL"),
                        B = Symbol("SINGLEWINDOW"),
                        L = Symbol("FILETMP"),
                        q = Symbol("STATUSTMP"),
                        N = Symbol("UPGRADESTATUSURL"),
                        H = Symbol("CURWNDINDEX"),
                        j = Symbol("CALLBACKFUNCTION"),
                        W = function () {
                            function n(o) {
                                r(this, n),
                                p = this;
                                var a = {
                                    szId: "playWnd",
                                    iType: 1,
                                    iWidth: 400,
                                    iHeight: 300,
                                    iMaxSplit: 4,
                                    iCurrentSplit: 2,
                                    szBasePath: "./"
                                };
                                this[M] = Object.assign(a, o);
                                var s = {
                                    border: "#343434",
                                    borderSelect: "#FFCC00",
                                    background: "#4C4B4B"
                                };
                                s = Object.assign(s, o.oStyle),
                                this[M].oStyle = s,
                                this[M].iCurrentSplit > this[M].iMaxSplit && (this[M].iCurrentSplit = this[M].iMaxSplit),
                                this[R] = 1,
                                this[E] = -1,
                                this[I] = this[M].iMaxSplit * this[M].iMaxSplit,
                                this[F] = "",
                                this[O] = !1,
                                this[B] = null,
                                this[L] = null,
                                this[q] = "",
                                this[N] = "",
                                this[H] = -1,
                                this[j] = null,
                                k = new l.StorageManager(this[M].szBasePath + "/transform"),
                                D = (0, h.
                            default)("#" + p[M].szId),
                                this[z] = [];
                                for (var u = 0; u < this[I]; u++) this[z][u] = {},
                                this[z][u].bSelect = !1,
                                this[z][u].bPlay = !1,
                                this[z][u].bRecord = !1,
                                this[z][u].oPlayCtrl = null,
                                this[z][u].szPlayType = "",
                                this[z][u].szStorageUUID = "",
                                this[z][u].szStreamUUID = "",
                                this[z][u].aHead = [],
                                this[z][u].bLoad = !1,
                                this[z][u].windowID = "canvas" + u,
                                this[z][u].drawID = "canvas_draw" + u,
                                this[z][u].iRate = 1,
                                this[z][u].bEZoom = !1,
                                this[z][u].b3DZoom = !1,
                                this[z][u].szSecretKey = "",
                                this[z][u].bFrameForward = !1,
                                this[z][u].iDecodeType = v,
                                this[z][u].bFirstFrame = !1;
                                t(),
                                e(),
                                this[A] = new f.ESCanvas("canvas_draw0"),
                                0 === this[M].iType && (0, h.
                            default)("#" + p[M].szId).hide(),
                                i(),
                                p.EventCallback.windowEventSelect(0)
                            }
                            return o(n, [{
                                key: "JS_ArrangeWindow",
                                value: function (t) {
                                    if (t < p[M].iMaxSplit ? p[M].iCurrentSplit = t : p[M].iCurrentSplit = p[M].iMaxSplit, a.oTool.isFirefox()) for (var e = 0; e < p[M].iMaxSplit * p[M].iMaxSplit; e++) p[z][e].oPlayCtrl && p[z][e].oPlayCtrl.PlayM4_ClearCanvas();
                                    c(),
                                    p.EventCallback.windowEventSelect(0)
                                }
                            },
                            {
                                key: "JS_SetSecretKey",
                                value: function (t, e) {
                                  console.log("开始设置秘钥",t,e,this[z][t])
                                    return t < 0 ? -1 : "" === e || "undefined" == typeof e ? -1 : (this[z][t].szSecretKey = e, 0)
                                }
                            },
                            {
                                key: "JS_Play",
                                value: function (t, e, n, i, r) {
                                    var o = new Promise(function (o, a) {
                                        return n < 0 || n > p[I] - 1 ? void a() : p[z][n].bFrameForward ? void a() : (p[z][n].bPlay && p.JS_Stop(n), void setTimeout(function () {
                                            p[z][n].bFirstFrame = !1,
                                            p[z][n].iDecodeType = v,
                                            p[z][n].oPlayCtrl ? d(t, e, n, i, r, o, a) : p[z][n].oPlayCtrl = new u.JSPlayCtrl(p[M].szBasePath + "/playctrl/", function (s) {
                                                "loaded" !== s.cmd || p[z][n].bLoad ? "OnebyOne" === s.cmd ? s.status ? T.resume(p[z][n].szStreamUUID) : T.pause(p[z][n].szStreamUUID) : "GetFrameData" === s.cmd && p.EventCallback.pluginErrorHandler(n, C) : d(t, e, n, i, r, o, a)
                                            }, n)
                                        }, 200))
                                    });
                                    return o
                                }
                            },
                            {
                                key: "JS_Seek",
                                value: function (t, e, n) {
                                    var i = new Promise(function (i, r) {
                                        return t < 0 || t > p[I] - 1 ? void r() : p[z][t].bPlay ? void T.seek(p[z][t].szStreamUUID, e, n).then(function () {
                                            i()
                                        }, function (t) {
                                            r(t)
                                        }) : void r()
                                    });
                                    return i
                                }
                            },
                            {
                                key: "JS_GetSdkVersion",
                                value: function () {
                                    return p[z][0].oPlayCtrl.PlayM4_GetSdkVersion()
                                }
                            },
                            {
                                key: "JS_DestroyWorker",
                                value: function () {
                                    p[z].forEach(function (t) {
                                        t.bPlay && t.oPlayCtrl.PlayM4_CloseStream(),
                                        t.oPlayCtrl && (t.oPlayCtrl.PlayM4_Destroy(), t.oPlayCtrl = null, t.bLoad = !1)
                                    })
                                }
                            },
                            {
                                key: "JS_Stop",
                                value: function (t) {
                                    var e = new Promise(function (e, n) {
                                        return t < 0 || t > p[I] - 1 ? void n() : (p[z][t].szStorageUUID && p.JS_StopSave(t), p[z][t].bEZoom && p.JS_DisableZoom(t), p[E] === t && (p[E] = -1), void T.stop(p[z][t].szStreamUUID).then(function () {
                                            p[z][t].bPlay = !1,
                                            p[z][t].bFrameForward = !1,
                                            p[z][t].iRate = 1,
                                            p[z][t].oPlayCtrl && (p[z][t].oPlayCtrl.PlayM4_Stop(), p[z][t].oPlayCtrl.PlayM4_CloseStream()),
                                            setTimeout(function () {
                                                e()
                                            }, 500)
                                        }, function () {
                                            setTimeout(function () {
                                                n()
                                            }, 500)
                                        }))
                                    });
                                    return e
                                }
                            },
                            {
                                key: "JS_Pause",
                                value: function (t) {
                                    var e = new Promise(function (e, n) {
                                        return t < 0 || t > p[I] - 1 ? void n() : p[z][t].bPlay ? p[z][t].bFrameForward ? void n() : void T.pause(p[z][t].szStreamUUID).then(function () {
                                            p[z][t].oPlayCtrl.PlayM4_Pause(!0),
                                            e()
                                        }, function (t) {
                                            n(t)
                                        }) : void n()
                                    });
                                    return e
                                }
                            },
                            {
                                key: "JS_Resume",
                                value: function (t) {
                                    var e = new Promise(function (e, n) {
                                        return t < 0 || t > p[I] - 1 ? void n() : p[z][t].bPlay ? void T.resume(p[z][t].szStreamUUID).then(function () {
                                            1 !== p[R] && (p[z][t].iRate = p[R], T.setPlayRate(p[z][t].szStreamUUID, p[z][t].iRate), p[z][t].oPlayCtrl.PlayM4_PlayRate(p[z][t].iRate), p[R] > 1 ? p[z][t].oPlayCtrl.PlayM4_SetDecodeFrameType(g) : p[z][t].oPlayCtrl.PlayM4_SetDecodeFrameType(v)),
                                            p[z][t].bFrameForward ? (p[z][t].oPlayCtrl.PlayM4_Play(p[z][t].windowID), p[z][t].bFrameForward = !1) : p[z][t].oPlayCtrl.PlayM4_Pause(!1),
                                            e()
                                        }, function (t) {
                                            n(t)
                                        }) : void n()
                                    });
                                    return e
                                }
                            },
                            {
                                key: "JS_Slow",
                                value: function (t) {
                                    var e = new Promise(function (e, n) {
                                        return t < 0 || t > p[I] - 1 ? void n() : p[z][t].bPlay ? "playback" !== p[z][t].szPlayType ? void n() : p[z][t].iRate === -8 ? void n() : p[z][t].bFrameForward ? void n() : (p[z][t].iRate < 0 && p[z][t].iRate > -8 && (p[z][t].iRate *= 2), 1 === p[z][t].iRate && (p[z][t].iRate *= -2), p[z][t].iRate > 1 && (p[z][t].iRate /= 2), void T.setPlayRate(p[z][t].szStreamUUID, p[z][t].iRate).then(function () {
                                            p[z][t].iRate < 2 ? p[z][t].oPlayCtrl.PlayM4_SetDecodeFrameType(v) : (p[z][t].oPlayCtrl.PlayM4_SetDecodeFrameType(g), p[z][t].oPlayCtrl.PlayM4_SetIFrameDecInterval(0)),
                                            p[z][t].oPlayCtrl.PlayM4_PlayRate(p[z][t].iRate),
                                            e()
                                        }, function (t) {
                                            n(t)
                                        })) : void n()
                                    });
                                    return e
                                }
                            },
                            {
                                key: "JS_Fast",
                                value: function (t) {
                                    var e = new Promise(function (e, n) {
                                        return t < 0 || t > p[I] - 1 ? void n() : p[z][t].bPlay ? "playback" !== p[z][t].szPlayType ? void n() : p[z][t].bFrameForward ? void n() : 8 === p[z][t].iRate ? void n() : (p[z][t].iRate === -2 ? p[z][t].iRate = 1 : p[z][t].iRate < -2 ? p[z][t].iRate /= 2 : p[z][t].iRate > 0 && p[z][t].iRate < 8 && (p[z][t].iRate *= 2), void T.setPlayRate(p[z][t].szStreamUUID, p[z][t].iRate).then(function () {
                                            p[z][t].iRate < 2 ? p[z][t].oPlayCtrl.PlayM4_SetDecodeFrameType(v) : (p[z][t].oPlayCtrl.PlayM4_SetDecodeFrameType(g), 8 === p[z][t].iRate ? p[z][t].oPlayCtrl.PlayM4_SetIFrameDecInterval(2) : p[z][t].oPlayCtrl.PlayM4_SetIFrameDecInterval(0)),
                                            p[z][t].oPlayCtrl.PlayM4_PlayRate(p[z][t].iRate),
                                            e()
                                        }, function (t) {
                                            n(t)
                                        })) : void n()
                                    });
                                    return e
                                }
                            },
                            {
                                key: "JS_Transmission",
                                value: function (t, e) {
                                    var n = new Promise(function (n, i) {
                                        return t < 0 || t > p[I] - 1 ? void i() : p[z][t].szStreamUUID ? void T.transmission(p[z][t].szStreamUUID, e).then(function (t) {
                                            n(t)
                                        }, function (t) {
                                            i(t)
                                        }) : void i()
                                    });
                                    return n
                                }
                            },
                            {
                                key: "JS_FrameForward",
                                value: function (t) {
                                    var e = new Promise(function (e, n) {
                                        return t < 0 || t > p[I] - 1 ? void n() : p[z][t].bPlay ? (1 !== p[z][t].iRate ? (p[z][t].iRate = 1, p[R] = p[z][t].iRate, T.setPlayRate(p[z][t].szStreamUUID, p[z][t].iRate).then(function () {
                                            p[z][t].oPlayCtrl.PlayM4_PlayRate(p[z][t].iRate),
                                            p[z][t].oPlayCtrl.PlayM4_SetDecodeFrameType(v),
                                            p[z][t].oPlayCtrl.PlayM4_OneByOne(),
                                            p[z][t].bFrameForward = !0
                                        }, function (t) {
                                            n(t)
                                        })) : (p[z][t].oPlayCtrl.PlayM4_PlayRate(p[z][t].iRate), p[z][t].oPlayCtrl.PlayM4_SetDecodeFrameType(v), p[z][t].oPlayCtrl.PlayM4_OneByOne(), p[z][t].bFrameForward = !0), void e()) : void n()
                                    });
                                    return e
                                }
                            },
                            {
                                key: "JS_GetOSDTime",
                                value: function (t) {
                                    var e = new Promise(function (e, n) {
                                        if (t < 0 || t > p[I] - 1) return void n(y);
                                        if (!p[z][t].bPlay) return void n(y);
                                        var i = p[z][t].oPlayCtrl.PlayM4_GetOSDTime(function (t) {
                                            var n = Date.parse(t.replace(/-/g, " ")) / 1e3;
                                            e(n)
                                        });
                                        return 0 !== i ? void n(y) : void 0
                                    });
                                    return e
                                }
                            },
                            {
                                key: "JS_OpenSound",
                                value: function (t) {
                                    return t < 0 || t > p[I] - 1 ? y : p[z][t].bPlay ? p[E] === t ? y : (p[E] !== -1 && p[z][p[E]].oPlayCtrl.PlayM4_StopSound(), 0 !== p[z][t].oPlayCtrl.PlayM4_PlaySound(t) ? y : (p[E] = t, m)) : y
                                }
                            },
                            {
                                key: "JS_GetVolume",
                                value: function (t, e) {
                                    p[z][t].oPlayCtrl.PlayM4_GetVolume(function (t) {
                                        e(t)
                                    })
                                }
                            },
                            {
                                key: "JS_SetVolume",
                                value: function (t, e) {
                                    return 0 !== p[z][t].oPlayCtrl.PlayM4_SetVolume(e) ? y : m
                                }
                            },
                            {
                                key: "JS_CloseSound",
                                value: function () {
                                    var t = p[E];
                                    return t < 0 || t > p[I] - 1 ? y : p[z][t].bPlay ? 0 !== p[z][t].oPlayCtrl.PlayM4_StopSound() ? y : (p[E] = -1, m) : y
                                }
                            },
                            {
                                key: "JS_EnableZoom",
                                value: function (t) {
                                    return t < 0 || t > p[I] - 1 ? y : p[z][t].bPlay ? ((0, h.
                                default)(".draw-window").unbind(), this[A] = new f.ESCanvas("canvas_draw" + t), this[A].setShapeType("Rect"), this[A].setDrawStyle("#ff0000", "", 0), this[A].setDrawStatus(!0, function (e) {
                                        e.startPos && e.endPos && (e.startPos[0] > e.endPos[0] ? p[z][t].oPlayCtrl.PlayM4_SetDisplayRegion(null, !1) : p[z][t].oPlayCtrl.PlayM4_SetDisplayRegion({
                                            left: e.startPos[0],
                                            top: e.startPos[1],
                                            right: e.endPos[0],
                                            bottom: e.endPos[1]
                                        }, !0))
                                    }), p[z][t].bEZoom = !0, m) : y
                                }
                            },
                            {
                                key: "JS_DisableZoom",
                                value: function (t) {
                                    return t < 0 || t > p[I] - 1 ? y : p[z][t].bPlay ? (this[A].setDrawStatus(!1), 0 !== this[z][t].oPlayCtrl.PlayM4_SetDisplayRegion(null, !1) ? y : (this[z][t].bEZoom = !1, m)) : y
                                }
                            },
                            {
                                key: "JS_Enable3DZoom",
                                value: function (t, e) {
                                    return t < 0 || t > p[I] - 1 ? y : p[z][t].bPlay ? ((0, h.
                                default)(".draw-window").unbind(), this[j] = e, this[A] = new f.ESCanvas("canvas_draw" + t), this[A].setShapeType("Rect"), this[A].setDrawStyle("#ff0000", "", 0), this[A].setDrawStatus(!0, function (t) {
                                        e(t)
                                    }), p[z][t].b3DZoom = !0, m) : y
                                }
                            },
                            {
                                key: "JS_Disable3DZoom",
                                value: function (t) {
                                    return t < 0 || t > p[I] - 1 ? y : p[z][t].bPlay ? (this[A].setDrawStatus(!1), this[z][t].b3DZoom = !1, m) : y
                                }
                            },
                            {
                                key: "JS_CapturePicture",
                                value: function (t, e, n) {
                                    var i = new Promise(function (i, r) {
                                        return t < 0 || t > p[I] - 1 ? void r() : p[z][t].bPlay ? (n || (n = "JPEG"), void("BMP" === n ? p[z][t].oPlayCtrl.PlayM4_GetBMP(function (t) {
                                            6 === t ? r(x) : (a.oTool.downloadFile(t, e + ".BMP"), i())
                                        }) : "JPEG" === n && p[z][t].oPlayCtrl.PlayM4_GetJPEG(function (t) {
                                            6 === t ? r(x) : (a.oTool.downloadFile(t, e + ".jpeg"), i())
                                        }))) : void r()
                                    });
                                    return i
                                }
                            },
                            {
                                key: "JS_StopRealPlayAll",
                                value: function () {
                                    T.stopAll(),
                                    p[z].forEach(function (t, e) {
                                        t.bPlay && (t.szStorageUUID && p.JS_StopSave(e), t.bEZoom && p.JS_DisableZoom(e), t.oPlayCtrl.PlayM4_Stop(), t.oPlayCtrl.PlayM4_CloseStream()),
                                        t.bPlay = !1
                                    }),
                                    p[E] = -1
                                }
                            },
                            {
                                key: "JS_StartSave",
                                value: function (t, e) {
                                    var n = new Promise(function (n, i) {
                                        if (t < 0 || t > p[I] - 1) return void i();
                                        if (!p[z][t].bPlay) return void i();
                                        e.indexOf(".mp4") < 0 && (e += ".mp4");
                                        var r = p[z][t].aHead,
                                            o = 0;
                                        "playback" === p[z][t].szPlayType && (o = 1),
                                        k.startRecord(e, r, 2, o, {
                                                cbEventHandler: function (e) {
                                                    p.EventCallback.pluginErrorHandler(t, e)
                                                }
                                            }).then(function (e) {
                                                p[z][t].szStorageUUID = e,
                                                n()
                                            }, function () {
                                                i()
                                            })
                                    });
                                    return n
                                }
                            },
                            {
                                key: "JS_StopSave",
                                value: function (t) {
                                    var e = new Promise(function (e, n) {
                                        return p[z][t].szStorageUUID ? void k.stopRecord(p[z][t].szStorageUUID).then(function () {
                                            p[z][t].szStorageUUID = "",
                                            e()
                                        }, function (t) {
                                            n(t)
                                        }) : void n()
                                    });
                                    return e
                                }
                            },
                            {
                                key: "JS_GetLocalConfig",
                                value: function () {
                                    return ""
                                }
                            },
                            {
                                key: "JS_SetLocalConfig",
                                value: function () {
                                    return 0
                                }
                            },
                            {
                                key: "JS_SetGridInfo",
                                value: function (t) {
                                    if (null === t || "undefined" == typeof t) return -1;
                                    var e = "#ff0000";
                                    return t.drawColor && (e = t.drawColor),
                                    this[A].setDrawStyle(e),
                                    this[A].setShapesInfoByType("Grid", [{
                                        szGridMap: t.gridMap,
                                        iGridColNum: t.gridColNum,
                                        iGridRowNum: t.gridRowNum
                                    }]),
                                    0
                                }
                            },
                            {
                                key: "JS_GetGridInfo",
                                value: function () {
                                    if (!this[A]) return {};
                                    var t = this[A].getShapesInfoByType("Grid")[0];
                                    return t ? {
                                        gridColNum: t.iGridColNum,
                                        gridRowNum: t.iGridRowNum,
                                        gridMap: t.szGridMap
                                    } : {
                                        iGridRowNum: 18,
                                        iGridColNum: 22,
                                        szGridMap: ""
                                    }
                                }
                            },
                            {
                                key: "JS_SetDrawShapeInfo",
                                value: function (t, e) {
                                    return "undefined" == typeof t || "" === t ? -1 : (this[A].setShapeType(t), this[A].setDrawStyle(e.szDrawColor || "", e.szFillColor || "", e.iTranslucent || 0), e.iMaxShapeSupport && e.iMaxShapeSupport > 0 && this[A].setMaxShapeSupport(e.iMaxShapeSupport), void(e.iMaxPointSupport && e.iMaxPointSupport > 0 && this[A].setCurrentShapeInfo({
                                        szId: "",
                                        szTips: "",
                                        iMinClosed: 3,
                                        iMaxPointNum: e.iMaxPointSupport,
                                        iPolygonType: 1,
                                        szDrawColor: e.szDrawColor || "",
                                        szFillColor: e.szFillColor || "",
                                        iTranslucent: e.iTranslucent || 0
                                    })))
                                }
                            },
                            {
                                key: "JS_SetPolygonInfo",
                                value: function (t) {
                                    if ("undefined" == typeof t || !t.length) return -1;
                                    var e = [];
                                    if (t.length > 0) for (var n = 0, i = t.length; n < i; n++) {
                                        var r = t[n].aPoint;
                                        r.length > 0 && e.push(t[n])
                                    }
                                    return e.length > 0 ? (this[A].setShapesInfoByType("Polygon", e), 0) : -1
                                }
                            },
                            {
                                key: "JS_GetPolygonInfo",
                                value: function () {
                                    for (var t = [], e = this[A].getShapesInfoByType("Polygon"), n = 0, i = e.length; n < i; n++) {
                                        var r = e[n],
                                            o = {
                                                aPoint: r.aPoint,
                                                bClosed: r.bClosed,
                                                szTips: r.szTips
                                            };
                                        t.push(o)
                                    }
                                    return t
                                }
                            },
                            {
                                key: "JS_SetLineInfo",
                                value: function (t) {
                                    if ("undefined" == typeof t || !t.length) return -1;
                                    var e = [];
                                    if (t.length > 0) for (var n = 0, i = t.length; n < i; n++) {
                                        var r = t[n].aPoint;
                                        r.length > 0 && e.push(t[n])
                                    }
                                    return e.length > 0 ? (this[A].setShapesInfoByType("Line", e), 0) : -1
                                }
                            },
                            {
                                key: "JS_GetLineInfo",
                                value: function () {
                                    for (var t = [], e = this[A].getShapesInfoByType("Line"), n = 0, i = e.length; n < i; n++) {
                                        var r = e[n],
                                            o = {
                                                iLineType: r.iLineType,
                                                aPoint: r.aPoint,
                                                szTips: r.szTips
                                            };
                                        t.push(o)
                                    }
                                    return t
                                }
                            },
                            {
                                key: "JS_SetRectInfo",
                                value: function (t) {
                                    if ("undefined" == typeof t || !t.length) return -1;
                                    var e = [];
                                    if (t.length > 0) for (var n = 0, i = t.length; n < i; n++) {
                                        var r = t[n].aPoint;
                                        r.length > 0 && e.push(t[n])
                                    }
                                    return e.length > 0 ? (this[A].setShapesInfoByType("Rect", e), 0) : -1
                                }
                            },
                            {
                                key: "JS_GetRectInfo",
                                value: function () {
                                    for (var t = [], e = this[A].getShapesInfoByType("Rect"), n = 0, i = e.length; n < i; n++) {
                                        var r = e[n],
                                            o = {
                                                aPoint: r.aPoint,
                                                szTips: r.szTips
                                            };
                                        t.push(o)
                                    }
                                    return t
                                }
                            },
                            {
                                key: "JS_SetRegionInfo",
                                value: function (t) {
                                    var e = this;
                                    this[A].clearAllShape();
                                    var n = a.oTool.parseXmlFromStr(t);
                                    if (this[A].setDrawStyle("#ff0000", "#343434", .3), (0, h.
                                default)(n).find("DetectionRegionInfo").length > 0)!
                                    function () {
                                        e[A].setShapeType("Rect");
                                        var t = parseInt((0, h.
                                    default)(n).find("MaxRegionNum").eq(0).text(), 10);
                                        e[A].setMaxShapeSupport(t),
                                        e[A].m_szDisplayMode = (0, h.
                                    default)(n).find("DisplayMode").eq(0).text(),
                                        e[A].m_szVideoFormat = (0, h.
                                    default)(n).find("videoFormat").eq(0).text(),
                                        e[A].m_iHorizontalResolution = parseInt((0, h.
                                    default)(n).find("HorizontalResolution").eq(0).text(), 10),
                                        e[A].m_iVerticalResolution = parseInt((0, h.
                                    default)(n).find("VerticalResolution").eq(0).text(), 10);
                                        var i = [];
                                        (0, h.
                                    default)(n).find("DetectionRegion").each(function () {
                                            for (var t = [], e = 0, n = (0, h.
                                        default)(this).find("positionX").length; e < n; e++) {
                                                var r = Math.round((0, h.
                                            default)(this).find("positionX").eq(e).text()) * p[A].m_iCanvasWidth / p[A].m_iHorizontalResolution,
                                                    o = (p[A].m_iVerticalResolution - Math.round((0, h.
                                                default)(this).find("positionY").eq(e).text())) * p[A].m_iCanvasHeight / p[A].m_iVerticalResolution;
                                                t.push([r, o])
                                            }
                                            t.length > 0 && (0 !== t[0][0] || 0 !== t[1][0] || 0 !== t[2][0] || 0 !== t[3][0]) && i.push({
                                                aPoint: t,
                                                iEditType: "transparent" === p[A].m_szDisplayMode ? 1 : 0,
                                                szDrawColor: "#ff0000",
                                                szFillColor: "#343434",
                                                iTranslucent: .3
                                            })
                                        }),
                                        e[A].setShapesInfoByType("Rect", i)
                                    }();
                                    else if ((0, h.
                                default)(n).find("MoveDetection").length > 0) {
                                        this[A].setShapeType("Grid");
                                        var i = parseInt((0, h.
                                    default)(n).find("columnGranularity").eq(0).text(), 10),
                                            r = parseInt((0, h.
                                        default)(n).find("rowGranularity").eq(0).text(), 10),
                                            o = (0, h.
                                        default)(n).find("gridMap").eq(0).text();
                                        this[A].setShapesInfoByType("Grid", [{
                                                szGridMap: o,
                                                iGridColNum: i,
                                                iGridRowNum: r
                                            }])
                                    }
                                    return 0
                                }
                            },
                            {
                                key: "JS_GetRegionInfo",
                                value: function () {
                                    if (!this[A]) return "";
                                    var t = this[A].getShapeType(),
                                        e = '<?xml version="1.0" encoding="utf-8"?>';
                                    if ("Rect" === t) {
                                            e += "<DetectionRegionInfo>",
                                            e += "<videoFormat>" + this[A].m_szVideoFormat + "</videoFormat><RegionType>roi</RegionType>",
                                            e += "<ROI><HorizontalResolution>" + this[A].m_iHorizontalResolution + "</HorizontalResolution><VerticalResolution>" + this[A].m_iVerticalResolution + "</VerticalResolution></ROI>",
                                            e += "<DisplayMode>" + this[A].m_szDisplayMode + "</DisplayMode><MaxRegionNum>" + this[A].getMaxShapeSupport() + "</MaxRegionNum>",
                                            e += "<DetectionRegionList>";
                                            for (var n = this[A].getShapesInfoByType("Rect"), i = 0, r = n.length; i < r; i++) {
                                                var o = n[i].aPoint;
                                                e += "<DetectionRegion><RegionCoordinatesList>",
                                                e += "<RegionCoordinates><positionX>" + Math.round(o[3][0] * this[A].m_iHorizontalResolution / this[A].m_iCanvasWidth) + "</positionX><positionY>" + (this[A].m_iVerticalResolution - Math.round(o[3][1] * this[A].m_iVerticalResolution / this[A].m_iCanvasHeight)) + "</positionY></RegionCoordinates>",
                                                e += "<RegionCoordinates><positionX>" + Math.round(o[2][0] * this[A].m_iHorizontalResolution / this[A].m_iCanvasWidth) + "</positionX><positionY>" + (this[A].m_iVerticalResolution - Math.round(o[2][1] * this[A].m_iVerticalResolution / this[A].m_iCanvasHeight)) + "</positionY></RegionCoordinates>",
                                                e += "<RegionCoordinates><positionX>" + Math.round(o[1][0] * this[A].m_iHorizontalResolution / this[A].m_iCanvasWidth) + "</positionX><positionY>" + (this[A].m_iVerticalResolution - Math.round(o[1][1] * this[A].m_iVerticalResolution / this[A].m_iCanvasHeight)) + "</positionY></RegionCoordinates>",
                                                e += "<RegionCoordinates><positionX>" + Math.round(o[0][0] * this[A].m_iHorizontalResolution / this[A].m_iCanvasWidth) + "</positionX><positionY>" + (this[A].m_iVerticalResolution - Math.round(o[0][1] * this[A].m_iVerticalResolution / this[A].m_iCanvasHeight)) + "</positionY></RegionCoordinates>",
                                                e += "</RegionCoordinatesList></DetectionRegion>"
                                            }
                                            e += "</DetectionRegionList>",
                                            e += "</DetectionRegionInfo>"
                                        } else if ("Grid" === t) {
                                            var a = this[A].getShapesInfoByType("Grid")[0];
                                            a || (a = {
                                                iGridRowNum: 18,
                                                iGridColNum: 22,
                                                szGridMap: ""
                                            }),
                                            e += "<MoveDetection><videoFormat>PAL</videoFormat><RegionType>grid</RegionType>",
                                            e += "<Grid><rowGranularity>" + a.iGridRowNum + "</rowGranularity><columnGranularity>" + a.iGridColNum + "</columnGranularity></Grid>",
                                            e += "<DisplayMode>transparent</DisplayMode>",
                                            e += "<gridMap>" + a.szGridMap + "</gridMap></MoveDetection>"
                                        }
                                    return e
                                }
                            },
                            {
                                key: "JS_SetDrawStatus",
                                value: function (t) {
                                    return this[A] ? (this[A].setDrawStatus(t), 0) : -1
                                }
                            },
                            {
                                key: "JS_ClearRegion",
                                value: function () {
                                    return this[A] ? (this[A].clearAllShape(), 0) : -1
                                }
                            },
                            {
                                key: "JS_GetTextOverlay",
                                value: function () {
                                    if (!this[A]) return "";
                                    var t = '<?xml version="1.0" encoding="utf-8"?>';
                                    t += "<OSD>",
                                    t += "<videoResolutionWidth>" + this[A].m_iHorizontalResolution + "</videoResolutionWidth>",
                                    t += "<videoResolutionHeight>" + this[A].m_iVerticalResolution + "</videoResolutionHeight>";
                                    for (var e = "", n = "", i = "", r = this[A].getShapesInfoByType("RectOSD"), o = 0, a = r.length; o < a; o++) {
                                        var s = r[o],
                                            u = Math.round(s.iPositionX * this[A].m_iHorizontalResolution / this[A].m_iCanvasWidth),
                                            l = Math.round(s.iPositionY * this[A].m_iVerticalResolution / this[A].m_iCanvasHeight);
                                        "overlay-date" === s.szOSDType ? (e += "<DateTimeOverlay><Type>" + s.szDateStyle + "</Type>", e += "<clockType>" + s.szClockType + "</clockType>", e += "<displayWeek>" + s.szDisplayWeek + "</displayWeek>", e += "<enabled>" + s.szEnabled + "</enabled>", e += "<positionX>" + u + "</positionX><positionY>" + l + "</positionY></DateTimeOverlay>") : "overlay-ch" === s.szOSDType ? (n += "<channelNameOverlay><enabled>" + s.szEnabled + "</enabled>", n += "<ChannelName>" + s.szText + "</ChannelName>", n += "<positionX>" + u + "</positionX><positionY>" + l + "</positionY></channelNameOverlay>") : "overlay-text" === s.szOSDType && (i += "<TextOverlay><id>" + s.szId + "</id><enabled>" + s.szEnabled + "</enabled>", i += "<displayText>" + s.szText + "</displayText>", i += "<positionX>" + u + "</positionX><positionY>" + l + "</positionY></TextOverlay>")
                                    }
                                    return t += e,
                                    t += n,
                                    t += "<TextOverlayList>",
                                    t += i,
                                    t += "</TextOverlayList>",
                                    t += "</OSD>"
                                }
                            },
                            {
                                key: "JS_SetTextOverlay",
                                value: function (t) {
                                    this[A].setMaxShapeSupport(20);
                                    var e = a.oTool.parseXmlFromStr(t);
                                    if (this[A].clearShapeByType("RectOSD"), (0, h.
                                default)(e).find("OSD").length > 0) {
                                        if (this[A].setDrawStyle("#ff0000", "#343434", .7), this[A].m_iHorizontalResolution = parseInt((0, h.
                                    default)(e).find("videoResolutionWidth").eq(0).text(), 10), this[A].m_iVerticalResolution = parseInt((0, h.
                                    default)(e).find("videoResolutionHeight").eq(0).text(), 10), (0, h.
                                    default)(e).find("channelNameOverlay").length > 0) {
                                            var n = (0, h.
                                        default)(e).find("channelNameOverlay").eq(0),
                                                i = (0, h.
                                            default)(n).find("ChannelName").eq(0).text(),
                                                r = (0, h.
                                            default)(n).find("enabled").eq(0).text(),
                                                o = Math.round((0, h.
                                            default)(n).find("positionX").eq(0).text()) * this[A].m_iCanvasWidth / this[A].m_iHorizontalResolution,
                                                s = Math.round((0, h.
                                            default)(n).find("positionY").eq(0).text()) * this[A].m_iCanvasHeight / this[A].m_iVerticalResolution;
                                            this[A].addOSDShape(i, r, o, s, {
                                                    szOSDType: "overlay-ch"
                                                })
                                        }
                                        if ((0, h.
                                    default)(e).find("DateTimeOverlay").length > 0) {
                                            var u = (0, h.
                                        default)(e).find("DateTimeOverlay").eq(0),
                                                l = (0, h.
                                            default)(u).find("enabled").eq(0).text(),
                                                f = (0, h.
                                            default)(u).find("Type").eq(0).text() || (0, h.
                                            default)(u).find("type").eq(0).text(),
                                                c = (0, h.
                                            default)(u).find("displayWeek").eq(0).text(),
                                                d = (0, h.
                                            default)(u).find("clockType").eq(0).text(),
                                                y = "",
                                                m = "",
                                                v = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"],
                                                g = new Date;
                                            switch ("true" === c && (m = v[g.getDay()]), d = "24hour" === d ? "" : "AM/PM", f) {
                                                case "0":
                                                    y = "YYYY-MM-DD " + m + " hh:mm:ss " + d;
                                                    break;
                                                case "1":
                                                    y = "MM-DD-YYYY " + m + " hh:mm:ss " + d;
                                                    break;
                                                case "2":
                                                    y = "CHR-YYYY-MM-DD " + m + " hh:mm:ss " + d;
                                                    break;
                                                case "3":
                                                    y = "CHR-MM-DD-YYYY " + m + " hh:mm:ss " + d;
                                                    break;
                                                case "4":
                                                    y = "DD-MM-YYYY " + m + " hh:mm:ss " + d;
                                                    break;
                                                case "5":
                                                    y = "CHR-DD-MM-YYYY " + m + " hh:mm:ss " + d
                                                }
                                            var S = Math.round((0, h.
                                            default)(u).find("positionX").eq(0).text()) * this[A].m_iCanvasWidth / this[A].m_iHorizontalResolution,
                                                b = Math.round((0, h.
                                            default)(u).find("positionY").eq(0).text()) * this[A].m_iCanvasHeight / this[A].m_iVerticalResolution;
                                            this[A].addOSDShape(y, l, S, b, {
                                                    szOSDType: "overlay-date",
                                                    szDateStyle: f,
                                                    szDisplayWeek: c,
                                                    szClockType: d
                                                })
                                        }(0, h.
                                    default)(e).find("TextOverlayList").length > 0 && (0, h.
                                    default)(e).find("TextOverlayList").eq(0).find("TextOverlay").each(function () {
                                            var t = (0, h.
                                        default)(this).find("displayText").eq(0).text(),
                                                e = (0, h.
                                            default)(this).find("enabled").eq(0).text(),
                                                n = (0, h.
                                            default)(this).find("id").eq(0).text(),
                                                i = Math.round((0, h.
                                            default)(this).find("positionX").eq(0).text()) * p[A].m_iCanvasWidth / p[A].m_iHorizontalResolution,
                                                r = Math.round((0, h.
                                            default)(this).find("positionY").eq(0).text()) * p[A].m_iCanvasHeight / p[A].m_iVerticalResolution;
                                            p[A].addOSDShape(t, e, i, r, {
                                                    szOSDType: "overlay-text",
                                                    szId: n
                                                })
                                        })
                                    }
                                    return 0
                                }
                            },
                            {
                                key: "JS_ClearSnapInfo",
                                value: function (t) {
                                    return this[A] ? (0 === t ? this[A].clearShapeByType("Rect") : 1 === t ? this[A].clearShapeByType("Polygon") : 2 === t ? this[A].clearShapeByType("Line") : 3 === t ? (this[A].clearShapeByType("Rect"), this[A].clearShapeByType("Polygon")) : 5 === t ? this[A].clearShapeByType("Point") : this[A].clearAllShape(), 0) : -1
                                }
                            },
                            {
                                key: "JS_ClearTargetPolygon",
                                value: function (t) {
                                    var e = a.oTool.parseXmlFromStr(t),
                                        n = this[A].getAllShapesInfo(),
                                        i = n.length;
                                    if (i > 0) for (var r = 0; r < i; r++) {
                                            var o = (0, h.
                                        default)(e).find("id").eq(0).text();
                                            if ("Polygon" === n[r].szType && n[r].szId === o) {
                                                this[A].deleteShape(r);
                                                break
                                            }
                                        }
                                }
                            },
                            {
                                key: "JS_SetSnapPolygonInfo",
                                value: function (t) {
                                    this[A].setShapeType("Polygon"),
                                    this[A].setMaxShapeSupport(20),
                                    this[A].setDrawStyle("#FFFF00", "#FFFF00", .1);
                                    var e = a.oTool.parseXmlFromStr(t),
                                        n = this[A].getAllShapesInfo(),
                                        i = n.length;
                                    if (i > 0) for (var r = 0; r < i; r++) {
                                            var o = (0, h.
                                        default)(e).find("id").eq(0).text();
                                            if ("Polygon" === n[r].szType && n[r].szId === o) {
                                                this[A].deleteShape(r);
                                                break
                                            }
                                        }
                                    var s = [];
                                    return (0, h.
                                    default)(e).find("SnapPolygonList").length > 0 && (0, h.
                                    default)(e).find("SnapPolygonList").eq(0).find("SnapPolygon").each(function () {
                                            var t = (0, h.
                                        default)(this).find("id").eq(0).text(),
                                                e = parseInt((0, h.
                                            default)(this).find("polygonType").eq(0).text() || "1", 10),
                                                n = (0, h.
                                            default)(this).find("Tips").eq(0).text() || (0, h.
                                            default)(this).find("tips").eq(0).text(),
                                                i = parseInt((0, h.
                                            default)(this).find("MinClosed").eq(0).text(), 10),
                                                r = parseInt((0, h.
                                            default)(this).find("PointNumMax").eq(0).text(), 10),
                                                o = parseInt((0, h.
                                            default)(this).find("EditType").eq(0).text(), 10) || 0,
                                                a = "true" === (0, h.
                                            default)(this).find("isClosed").eq(0).text(),
                                                u = "rgb(" + (0, h.
                                            default)(this).find("r").eq(0).text() + "," + (0, h.
                                            default)(this).find("g").eq(0).text() + "," + (0, h.
                                            default)(this).find("b").eq(0).text() + ")",
                                                l = u,
                                                f = .1,
                                                c = [];
                                                (0, h.
                                            default)(this).find("pointList").eq(0).find("point").each(function (t) {
                                                    c[t] = [],
                                                    c[t][0] = Math.round((0, h.
                                                default)(this).find("x").eq(0).text() * p[A].m_iCanvasWidth),
                                                    c[t][1] = Math.round((0, h.
                                                default)(this).find("y").eq(0).text() * p[A].m_iCanvasHeight)
                                                }),
                                            c.length > 0 ? (s.push({
                                                    szId: t,
                                                    iPolygonType: e,
                                                    iMinClosed: i,
                                                    iMaxPointNum: r,
                                                    iEditType: o,
                                                    aPoint: c,
                                                    bClosed: a,
                                                    szTips: n,
                                                    szDrawColor: u,
                                                    szFillColor: l,
                                                    iTranslucent: f
                                                }), p[A].setDrawStatus(!1)) : (p[A].setCurrentShapeInfo({
                                                    szId: t,
                                                    szTips: n,
                                                    iMinClosed: i,
                                                    iMaxPointNum: r,
                                                    iPolygonType: e,
                                                    szDrawColor: u,
                                                    szFillColor: l,
                                                    iTranslucent: f
                                                }), p[A].setDrawStatus(!0))
                                        }),
                                    s.length > 0 && this[A].setShapesInfoByType("Polygon", s),
                                    0
                                }
                            },
                            {
                                key: "JS_GetSnapPolygonInfo",
                                value: function () {
                                    for (var t = "<?xml version='1.0' encoding='utf-8'?><SnapPolygonList>", e = this[A].getShapesInfoByType("Polygon"), n = 0, i = e.length; n < i; n++) {
                                        var r = e[n];
                                        t += "<SnapPolygon>",
                                        t += "<id>" + r.szId + "</id>",
                                        t += "<polygonType>" + r.iPolygonType + "</polygonType>",
                                        t += "<color>";
                                        var o = r.szDrawColor.substring(4, r.szDrawColor.length - 1).split(",");
                                        t += "<r>" + o[0] + "</r>",
                                        t += "<g>" + o[1] + "</g>",
                                        t += "<b>" + o[2] + "</b>",
                                        t += "</color>",
                                        t += "<tips>" + r.szTips + "</tips>",
                                        t += "<isClosed>" + r.bClosed + "</isClosed>";
                                        var a = r.aPoint;
                                        t += "<pointList>";
                                        for (var s = 0, u = a.length; s < u; s++) t += "<point><x>" + (a[s][0] / this[A].m_iCanvasWidth).toFixed(6) + "</x><y>" + (a[s][1] / this[A].m_iCanvasHeight).toFixed(6) + "</y></point>";
                                        t += "</pointList>",
                                        t += "</SnapPolygon>"
                                    }
                                    return t += "</SnapPolygonList>"
                                }
                            },
                            {
                                key: "JS_SetSnapDrawMode",
                                value: function (t, e) {
                                    return this[A] ? (this[A].setDrawMutiShapeOneTime(!1), 0 === t && 3 === e && p[A].setDrawStatus(!1), 0) : -1
                                }
                            },
                            {
                                key: "JS_SetSnapLineInfo",
                                value: function (t) {
                                    this[A].setShapeType("Line"),
                                    this[A].setMaxShapeSupport(20),
                                    this[A].setDrawStyle("#FFFF00", "#FFFF00", .1);
                                    var e = a.oTool.parseXmlFromStr(t),
                                        n = this[A].getAllShapesInfo(),
                                        i = n.length;
                                    if (i > 0) for (var r = 0; r < i; r++) {
                                            var o = (0, h.
                                        default)(e).find("id").eq(0).text();
                                            if ("Line" === n[r].szType && n[r].szId === o) {
                                                this[A].deleteShape(r);
                                                break
                                            }
                                        }
                                    var s = [];
                                    return (0, h.
                                    default)(e).find("SnapLineList").length > 0 && (0, h.
                                    default)(e).find("SnapLineList").eq(0).find("SnapLine").each(function () {
                                            var t = (0, h.
                                        default)(this).find("id").eq(0).text(),
                                                e = parseInt((0, h.
                                            default)(this).find("LineTypeEx").eq(0).text(), 10),
                                                n = parseInt((0, h.
                                            default)(this).find("CustomType").text() || (0, h.
                                            default)(this).find("LineType").text(), 10),
                                                i = parseInt((0, h.
                                            default)(this).find("ArrowType").text() || 0, 10),
                                                r = (0, h.
                                            default)(this).find("Tips").eq(0).text() || (0, h.
                                            default)(this).find("tips").eq(0).text(),
                                                o = "rgb(" + (0, h.
                                            default)(this).find("r").eq(0).text() + "," + (0, h.
                                            default)(this).find("g").eq(0).text() + "," + (0, h.
                                            default)(this).find("b").eq(0).text() + ")",
                                                a = [];
                                            a[0] = [],
                                            a[1] = [],
                                            a[0][0] = Math.round((0, h.
                                            default)(this).find("StartPos").eq(0).find("x").eq(0).text() * p[A].m_iCanvasWidth),
                                            a[0][1] = Math.round((0, h.
                                            default)(this).find("StartPos").eq(0).find("y").eq(0).text() * p[A].m_iCanvasHeight),
                                            a[1][0] = Math.round((0, h.
                                            default)(this).find("EndPos").eq(0).find("x").eq(0).text() * p[A].m_iCanvasWidth),
                                            a[1][1] = Math.round((0, h.
                                            default)(this).find("EndPos").eq(0).find("y").eq(0).text() * p[A].m_iCanvasHeight),
                                            a.length > 0 && (s.push({
                                                    szId: t,
                                                    iLineType: e,
                                                    aPoint: a,
                                                    szTips: r,
                                                    iDirection: n,
                                                    iArrowType: i,
                                                    szDrawColor: o
                                                }), p[A].setDrawStatus(!1))
                                        }),
                                    s.length > 0 && this[A].setShapesInfoByType("Line", s),
                                    0
                                }
                            },
                            {
                                key: "JS_GetSnapLineInfo",
                                value: function () {
                                    for (var t = "<?xml version='1.0' encoding='utf-8'?><SnapLineList>", e = this[A].getShapesInfoByType("Line"), n = 0, i = e.length; n < i; n++) {
                                        t += "<SnapLine>",
                                        t += "<id>" + e[n].szId + "</id>",
                                        t += "<LineTypeEx>" + e[n].iLineType + "</LineTypeEx>",
                                        t += "<CustomType>0</CustomType><MoveChange>0</MoveChange><ArrowType>" + e[n].iArrowType + "</ArrowType>",
                                        t += "<tips>" + e[n].szTips + "</tips>";
                                        var r = e[n].aPoint;
                                        t += "<StartPos><x>" + (r[0][0] / p[A].m_iCanvasWidth).toFixed(6) + "</x><y>" + (r[0][1] / p[A].m_iCanvasHeight).toFixed(6) + "</y></StartPos>",
                                        t += "<EndPos><x>" + (r[1][0] / p[A].m_iCanvasWidth).toFixed(6) + "</x><y>" + (r[1][1] / p[A].m_iCanvasHeight).toFixed(6) + "</y></EndPos>",
                                        t += "<LineSelected>false</LineSelected>",
                                        e[n].aCrossArrowPoint.length > 0 && (t += "<PDCArrow><Sp_x>" + (e[n].aCrossArrowPoint[0][0] / p[A].m_iCanvasWidth).toFixed(6) + "</Sp_x>", t += "<Sp_y>" + (e[n].aCrossArrowPoint[0][1] / p[A].m_iCanvasWidth).toFixed(6) + "</Sp_y>", t += "<Ep_x>" + (e[n].aCrossArrowPoint[1][0] / p[A].m_iCanvasWidth).toFixed(6) + "</Ep_x>", t += "<Ep_y>" + (e[n].aCrossArrowPoint[1][1] / p[A].m_iCanvasWidth).toFixed(6) + "</Ep_y></PDCArrow>"),
                                        t += "<PDCShowMark>false</PDCShowMark>";
                                        var o = e[n].szDrawColor.split(",")[0].split("(")[1],
                                            a = e[n].szDrawColor.split(",")[1],
                                            s = e[n].szDrawColor.split(",")[2].split(")")[0];
                                        t += "<color><r>" + (o || "255") + "</r><g>" + (a || "255") + "</g><b>" + (s || "0") + "</b></color>",
                                        t += "</SnapLine>"
                                    }
                                    return t += "</SnapLineList>"
                                }
                            },
                            {
                                key: "JS_GetSnapPointInfo",
                                value: function () {
                                    return ""
                                }
                            },
                            {
                                key: "JS_SelectShapeById",
                                value: function (t, e) {
                                    return t ? (this[A].selectShapeById(t, e), 0) : -1
                                }
                            },
                            {
                                key: "JS_DeleteChoosedShape",
                                value: function () {
                                    var t = this[A].getAllShapesInfo(),
                                        e = t.length;
                                    if (e > 0) {
                                            for (var n = 0; n < e; n++) if (t[n].bChoosed) return this[A].deleteShape(n),
                                            t[n].szId;
                                            return ""
                                        }
                                    return ""
                                }
                            },
                            {
                                key: "JS_SetSnapPointInfo",
                                value: function (t) {
                                    var e = this,
                                        n = a.oTool.parseXmlFromStr(t);
                                    if ("1" === (0, h.
                                    default)(n).find("mode").eq(0).text()) {
                                            var i = (0, h.
                                        default)(n).find("id").eq(0).text(),
                                                r = "rgb(" + (0, h.
                                            default)(n).find("r").eq(0).text() + "," + (0, h.
                                            default)(n).find("g").eq(0).text() + "," + (0, h.
                                            default)(n).find("b").eq(0).text() + ")";
                                            this[A].setShapeType("Point"),
                                            this[A].setDrawStatus(!0),
                                            this[A].setMaxShapeSupport(12),
                                            p[A].setCurrentShapeInfo({
                                                    szId: i,
                                                    szDrawColor: r,
                                                    iTranslucent: 1
                                                })
                                        } else!
                                    function () {
                                            var t = [];
                                            e[A].clearShapeByType("Point"),
                                            e[A].setMaxShapeSupport(12),
                                            e[A].setDrawStatus(!1),
                                            (0, h.
                                        default)(n).find("SnapPointList").length > 0 && (0, h.
                                        default)(n).find("SnapPointList").eq(0).find("SnapPoint").each(function () {
                                                var e = (0, h.
                                            default)(this).find("id").eq(0).text(),
                                                    n = "rgb(" + (0, h.
                                                default)(this).find("r").eq(0).text() + "," + (0, h.
                                                default)(this).find("g").eq(0).text() + "," + (0, h.
                                                default)(this).find("b").eq(0).text() + ")",
                                                    i = [];
                                                i[0] = [],
                                                i[0][0] = Math.round((0, h.
                                                default)(this).find("positionX").eq(0).text() * p[A].m_iCanvasWidth),
                                                i[0][1] = Math.round((0, h.
                                                default)(this).find("positionY").eq(0).text() * p[A].m_iCanvasHeight),
                                                i.length > 0 && t.push({
                                                        szId: e,
                                                        aPoint: i,
                                                        szDrawColor: n,
                                                        iTranslucent: 1
                                                    })
                                            }),
                                            t.length > 0 && e[A].setShapesInfoByType("Point", t)
                                        }();
                                    return 0
                                }
                            },
                            {
                                key: "JS_FullScreenDisplay",
                                value: function (t) {
                                    if (t) {
                                        this[O] = t;
                                        var e = (0, h.
                                    default)("#" + p[M].szId).get(0);
                                        e.requestFullScreen ? e.requestFullScreen() : e.webkitRequestFullScreen ? e.webkitRequestFullScreen() : e.mozRequestFullScreen && e.mozRequestFullScreen()
                                    }
                                }
                            },
                            {
                                key: "JS_FullScreenSingle",
                                value: function (t) {
                                    if (p[z][t].bPlay) {
                                        var e = document.fullscreen || document.webkitIsFullScreen || document.mozFullScreen || !1,
                                            n = D.find(".parent-wnd").eq(0).children().eq(t).get(0);
                                        if (e) {
                                                if (D.find(".parent-wnd").eq(0).width() === (0, h.
                                            default)(window).width()) return;
                                                document.exitFullscreen ? document.exitFullscreen() : document.webkitCancelFullScreen ? document.webkitCancelFullScreen() : document.mozCancelFullScreen && document.mozCancelFullScreen()
                                            } else n.requestFullScreen ? n.requestFullScreen() : n.webkitRequestFullScreen ? n.webkitRequestFullScreen() : n.mozRequestFullScreen && n.mozRequestFullScreen(),
                                        p[B] = D.find(".parent-wnd").eq(0).children().eq(t)
                                    }
                                }
                            },
                            {
                                key: "JS_StartDownload",
                                value: function (t, e, n, i) {
                                    var r = (0, h.
                                default)(a.oTool.parseXmlFromStr(i)).find("playbackURI").eq(0).text(),
                                        o = t + "?playbackURI=" + r,
                                        s = ".mp4";
                                    t.indexOf("picture/Streaming/tracks") > 0 && (o = t, s = ".jpg");
                                    var u = o.indexOf("&name=") + 6,
                                        l = o.indexOf("&size=");
                                    return n = o.substring(u, l),
                                    (0, h.
                                    default)("body").append('<a id="jsplugin_download_a" href="' + o + '" download=' + n + s + '><li id="jsplugin_download_li"></li></a>'),
                                    (0, h.
                                    default)("#jsplugin_download_li").trigger("click"),
                                    (0, h.
                                    default)("#jsplugin_download_a").remove(),
                                    0
                                }
                            },
                            {
                                key: "JS_Resize",
                                value: function (t, e) {
                                    if (this[O] ? (t = (0, h.
                                default)(window).width(), e = (0, h.
                                default)(window).height(), (0, h.
                                default)("#" + this[M].szId).css({
                                        width: t,
                                        height: e
                                    }), this[O] = !1) : (0, h.
                                default)("#" + this[M].szId).css({
                                        width: t,
                                        height: e
                                    }), this[M].iWidth = t, this[M].iHeight = e, a.oTool.isFirefox()) for (var n = 0; n < p[M].iMaxSplit * p[M].iMaxSplit; n++) p[z][n].oPlayCtrl && p[z][n].oPlayCtrl.PlayM4_ClearCanvas();
                                    c(),
                                    p[B] && (t = (0, h.
                                default)(window).width(), e = (0, h.
                                default)(window).height(), p[B].css({
                                        width: t,
                                        height: e
                                    }), p[B].find("canvas").attr("width", t - 2), p[B].find("canvas").attr("height", e - 2), p[B] = null),
                                    this[A].resizeCanvas(),
                                    this[A].canvasRedraw()
                                }
                            },
                            {
                                key: "JS_WndCreate",
                                value: function (t, n, i) {
                                    e(n, i),
                                    this[A].updateCanvas("canvas_draw0"),
                                    this[A].clearAllShape(),
                                    0 === t ? (0, h.
                                default)("#" + this[M].szId).hide() : (0, h.
                                default)("#" + this[M].szId).show(),
                                    p.EventCallback.windowEventSelect(0)
                                }
                            },
                            {
                                key: "JS_ExportDeviceConfig",
                                value: function (t) {
                                    return (0, h.
                                default)("body").append('<a id="jsplugin_download_a" href="' + t + '"><li id="jsplugin_download_li"></li></a>'),
                                    (0, h.
                                default)("#jsplugin_download_li").trigger("click"),
                                    (0, h.
                                default)("#jsplugin_download_a").remove(),
                                    0
                                }
                            },
                            {
                                key: "JS_OpenFileBrowser",
                                value: function (t, e, n, i, r) {
                                    p[L] = null;
                                    var o = window.document.createElement("input");
                                    o.type = "file",
                                    "bmp" === e.toLowerCase() && (o.accept = "image/bmp"),
                                    0 === t && o.setAttribute("webkitdirectory", ""),
                                    o.addEventListener("change", function () {
                                        1 === t ? (p[L] = o.files[0], n[i] = o.files[0].name, r && r.$digest(function () {
                                            n[i] = o.files[0].name
                                        })) : 0 === t && (p[L] = o.files)
                                    });
                                    var a = document.createEvent("MouseEvents");
                                    a.initEvent("click", !0, !0),
                                    o.dispatchEvent(a)
                                }
                            },
                            {
                                key: "JS_UploadFile",
                                value: function (t, e, n, i) {
                                    var r = 0,
                                        o = new XMLHttpRequest;
                                    return o.onreadystatechange = function () {
                                            4 === o.readyState && 200 !== o.status && (r = -1)
                                        },
                                    o.open("put", t, !1),
                                    o.setRequestHeader("Content-Type", i),
                                    o.send(p[L]),
                                    r
                                }
                            },
                            {
                                key: "JS_StartAsynUpload",
                                value: function (t) {
                                    var e = new XMLHttpRequest;
                                    return e.onreadystatechange = function () {
                                        4 === e.readyState && (p[q] = e.responseText)
                                    },
                                    e.open("put", t, !0),
                                    e.send(p[L]),
                                    0
                                }
                            },
                            {
                                key: "JS_StopAsynUpload",
                                value: function () {
                                    p[L] = null,
                                    p[q] = ""
                                }
                            },
                            {
                                key: "JS_GetUploadErrorInfo",
                                value: function () {
                                    return "string" == typeof p[q] && p[q].length > 0 ? p[q] : ""
                                }
                            },
                            {
                                key: "JS_StartUpgradeEx",
                                value: function (t, e) {
                                    var n = new Promise(function (n, i) {
                                        if (!t) return i(),
                                        y;
                                        if (!e) return i(),
                                        y;
                                        p[q] = 0;
                                        var r = new XMLHttpRequest;
                                        r.onreadystatechange = function () {
                                            if (4 === r.readyState) if (200 === r.status) p[q] = 100,
                                            n();
                                            else {
                                                p[q] = 1;
                                                var t = a.oTool.parseXmlFromStr(r.responseText);
                                                "lowPrivilege" === (0, h.
                                            default)(t).find("subStatusCode").text() ? i(403) : i()
                                            }
                                        },
                                        r.open("put", t, !0),
                                        r.send(p[L]),
                                        p[N] = e,
                                        setTimeout(function () {
                                            n()
                                        }, 3e3)
                                    });
                                    return n
                                }
                            },
                            {
                                key: "JS_UpgradeStatus",
                                value: function () {
                                    return 100 === p[q] ? 0 : p[q]
                                }
                            },
                            {
                                key: "JS_UpgradeProgress",
                                value: function () {
                                    var t = 0,
                                        e = new XMLHttpRequest;
                                    return e.onreadystatechange = function () {
                                            4 === e.readyState && 200 === e.status && (t = parseInt((0, h.
                                        default)(a.oTool.parseXmlFromStr(e.responseText)).find("percent").text(), 10))
                                        },
                                    e.open("get", p[N], !1),
                                    e.send(null),
                                    100 === p[q] ? 100 : t
                                }
                            },
                            {
                                key: "JS_StopUpgrade",
                                value: function () {
                                    return p[L] = null,
                                    0
                                }
                            },
                            {
                                key: "JS_ExportDeviceLog",
                                value: function (t, e) {
                                    function n(t) {
                                        a.push(t);
                                        var e = t.slice("");
                                        if (/^[\u4e00-\u9fa5]/.test(t)) for (var n = 0; n < 30 - 2 * e.length; n++) a.push(" ");
                                        else for (var i = 0; i < 30 - e.length; i++) a.push(" ")
                                    }
                                    e = "Log.txt";
                                    var i = [],
                                        r = [];
                                    i = i.concat((0, h.
                                    default)(t).find("searchMatchItem").toArray());
                                    for (var o = 0; o < i.length; o++) r[o] = [],
                                    r[o][0] = (0, h.
                                    default)(i[o]).find("logtime").text().replace("T", " ").replace("Z", ""),
                                    r[o][1] = (0, h.
                                    default)(i[o]).find("majortype").text(),
                                    r[o][2] = (0, h.
                                    default)(i[o]).find("minortype").text(),
                                    r[o][3] = (0, h.
                                    default)(i[o]).find("channelid").text(),
                                    r[o][4] = (0, h.
                                    default)(i[o]).find("userName").text(),
                                    r[o][5] = (0, h.
                                    default)(i[o]).find("remoteaddress").text();
                                    var a = [];
                                    n(" "),
                                    n((0, h.
                                    default)(t).find("laLogTime").text()),
                                    n((0, h.
                                    default)(t).find("laLogMajorType").text()),
                                    n((0, h.
                                    default)(t).find("laLogMinorType").text()),
                                    n((0, h.
                                    default)(t).find("laLogChannel").text()),
                                    n((0, h.
                                    default)(t).find("laLogRemoteUser").text()),
                                    n((0, h.
                                    default)(t).find("laLogRemoteIP").text()),
                                    a.push("\r\n");
                                    for (var s = 0; s < r.length; s++) {
                                            var u = (s + 1).toString();
                                            n(u);
                                            for (var l = 0; l < 6; l++) n(r[s][l]);
                                            a.push("\r\n")
                                        }
                                    a = a.join("");
                                    var f = new Blob([a], {
                                            type: "text/plain"
                                        }),
                                        c = (window.URL || window.webkitURL).createObjectURL(f),
                                        d = window.document.createElement("a");
                                    d.href = c,
                                    d.download = e;
                                    var p = document.createEvent("MouseEvents");
                                    p.initEvent("click", !0, !0),
                                    d.dispatchEvent(p)
                                }
                            },
                            {
                                key: "JS_GetWndContainer",
                                value: function (t) {
                                    return t < 0 || "undefined" == typeof t || null === t ? -1 : D.find(".parent-wnd").eq(0).children().eq(t)[0]
                                }
                            },
                            {
                                key: "JS_GetWndStatus",
                                value: function (t) {
                                    if (t < 0 || "undefined" == typeof t || null === t) return -1;
                                    var e = {
                                        bPlay: this[z][t].bPlay,
                                        bSound: this[E] === t,
                                        bSelect: this[z][t].bSelect,
                                        iRate: this[z][t].iRate
                                    };
                                    return e
                                }
                            },
                            {
                                key: "JS_SelectWnd",
                                value: function (t) {
                                    D.find(".parent-wnd").eq(0).children().eq(t).mousedown()
                                }
                            }]),
                            n
                        }();
                    return W
                }
            }();
        e.JSPlugin = d
    },
 
 
    function (t, e, n) {
        var i, r;
        (function (t) {
            "use strict";
            var n = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ?
            function (t) {
                return typeof t
            } : function (t) {
                return t && "function" == typeof Symbol && t.constructor === Symbol && t !== Symbol.prototype ? "symbol" : typeof t
            };
            /*!
             * jQuery JavaScript Library v3.2.1
             * https://jquery.com/
             *
             * Includes Sizzle.js
             * https://sizzlejs.com/
             *
             * Copyright JS Foundation and other contributors
             * Released under the MIT license
             * https://jquery.org/license
             *
             * Date: 2017-03-20T18:59Z
             */
            !
            function (e, i) {
                "object" === n(t) && "object" === n(t.exports) ? t.exports = e.document ? i(e, !0) : function (t) {
                    if (!t.document) throw new Error("jQuery requires a window with a document");
                    return i(t)
                } : i(e)
            }("undefined" != typeof window ? window : void 0, function (o, a) {
                function s(t, e) {
                    e = e || st;
                    var n = e.createElement("script");
                    n.text = t,
                    e.head.appendChild(n).parentNode.removeChild(n)
                }
                function u(t) {
                    var e = !! t && "length" in t && t.length,
                        n = bt.type(t);
                    return "function" !== n && !bt.isWindow(t) && ("array" === n || 0 === e || "number" == typeof e && e > 0 && e - 1 in t)
                }
                function l(t, e) {
                    return t.nodeName && t.nodeName.toLowerCase() === e.toLowerCase()
                }
                function f(t, e, n) {
                    return bt.isFunction(e) ? bt.grep(t, function (t, i) {
                        return !!e.call(t, i, t) !== n
                    }) : e.nodeType ? bt.grep(t, function (t) {
                        return t === e !== n
                    }) : "string" != typeof e ? bt.grep(t, function (t) {
                        return ht.call(e, t) > -1 !== n
                    }) : Rt.test(e) ? bt.filter(e, t, n) : (e = bt.filter(e, t), bt.grep(t, function (t) {
                        return ht.call(e, t) > -1 !== n && 1 === t.nodeType
                    }))
                }
                function c(t, e) {
                    for (;
                    (t = t[e]) && 1 !== t.nodeType;);
                    return t
                }
                function h(t) {
                    var e = {};
                    return bt.each(t.match(Ot) || [], function (t, n) {
                        e[n] = !0
                    }),
                    e
                }
                function d(t) {
                    return t
                }
                function p(t) {
                    throw t
                }
                function y(t, e, n, i) {
                    var r;
                    try {
                        t && bt.isFunction(r = t.promise) ? r.call(t).done(e).fail(n) : t && bt.isFunction(r = t.then) ? r.call(t, e, n) : e.apply(void 0, [t].slice(i))
                    } catch (t) {
                        n.apply(void 0, [t])
                    }
                }
                function m() {
                    st.removeEventListener("DOMContentLoaded", m),
                    o.removeEventListener("load", m),
                    bt.ready()
                }
                function v() {
                    this.expando = bt.expando + v.uid++
                }
                function g(t) {
                    return "true" === t || "false" !== t && ("null" === t ? null : t === +t + "" ? +t : Wt.test(t) ? JSON.parse(t) : t)
                }
                function S(t, e, n) {
                    var i;
                    if (void 0 === n && 1 === t.nodeType) if (i = "data-" + e.replace(Ut, "-$&").toLowerCase(), n = t.getAttribute(i), "string" == typeof n) {
                        try {
                            n = g(n)
                        } catch (t) {}
                        jt.set(t, e, n)
                    } else n = void 0;
                    return n
                }
                function b(t, e, n, i) {
                    var r, o = 1,
                        a = 20,
                        s = i ?
                    function () {
                            return i.cur()
                        } : function () {
                            return bt.css(t, e, "")
                        },
                        u = s(),
                        l = n && n[3] || (bt.cssNumber[e] ? "" : "px"),
                        f = (bt.cssNumber[e] || "px" !== l && +u) && Vt.exec(bt.css(t, e));
                    if (f && f[3] !== l) {
                            l = l || f[3],
                            n = n || [],
                            f = +u || 1;
                            do o = o || ".5",
                            f /= o,
                            bt.style(t, e, f + l);
                            while (o !== (o = s() / u) && 1 !== o && --a)
                        }
                    return n && (f = +f || +u || 0, r = n[1] ? f + (n[1] + 1) * n[2] : +n[2], i && (i.unit = l, i.start = f, i.end = r)),
                    r
                }
                function w(t) {
                    var e, n = t.ownerDocument,
                        i = t.nodeName,
                        r = $t[i];
                    return r ? r : (e = n.body.appendChild(n.createElement(i)), r = bt.css(e, "display"), e.parentNode.removeChild(e), "none" === r && (r = "block"), $t[i] = r, r)
                }
                function _(t, e) {
                    for (var n, i, r = [], o = 0, a = t.length; o < a; o++) i = t[o],
                    i.style && (n = i.style.display, e ? ("none" === n && (r[o] = Ht.get(i, "display") || null, r[o] || (i.style.display = "")), "" === i.style.display && Xt(i) && (r[o] = w(i))) : "none" !== n && (r[o] = "none", Ht.set(i, "display", n)));
                    for (o = 0; o < a; o++) null != r[o] && (t[o].style.display = r[o]);
                    return t
                }
                function P(t, e) {
                    var n;
                    return n = "undefined" != typeof t.getElementsByTagName ? t.getElementsByTagName(e || "*") : "undefined" != typeof t.querySelectorAll ? t.querySelectorAll(e || "*") : [],
                    void 0 === e || e && l(t, e) ? bt.merge([t], n) : n
                }
                function C(t, e) {
                    for (var n = 0, i = t.length; n < i; n++) Ht.set(t[n], "globalEval", !e || Ht.get(e[n], "globalEval"))
                }
                function x(t, e, n, i, r) {
                    for (var o, a, s, u, l, f, c = e.createDocumentFragment(), h = [], d = 0, p = t.length; d < p; d++) if (o = t[d], o || 0 === o) if ("object" === bt.type(o)) bt.merge(h, o.nodeType ? [o] : o);
                    else if (ee.test(o)) {
                        for (a = a || c.appendChild(e.createElement("div")), s = (Zt.exec(o) || ["", ""])[1].toLowerCase(), u = te[s] || te._default, a.innerHTML = u[1] + bt.htmlPrefilter(o) + u[2], f = u[0]; f--;) a = a.lastChild;
                        bt.merge(h, a.childNodes),
                        a = c.firstChild,
                        a.textContent = ""
                    } else h.push(e.createTextNode(o));
                    for (c.textContent = "", d = 0; o = h[d++];) if (i && bt.inArray(o, i) > -1) r && r.push(o);
                    else if (l = bt.contains(o.ownerDocument, o), a = P(c.appendChild(o), "script"), l && C(a), n) for (f = 0; o = a[f++];) Qt.test(o.type || "") && n.push(o);
                    return c
                }
                function T() {
                    return !0
                }
                function k() {
                    return !1
                }
                function D() {
                    try {
                        return st.activeElement
                    } catch (t) {}
                }
                function M(t, e, i, r, o, a) {
                    var s, u;
                    if ("object" === ("undefined" == typeof e ? "undefined" : n(e))) {
                        "string" != typeof i && (r = r || i, i = void 0);
                        for (u in e) M(t, u, i, r, e[u], a);
                        return t
                    }
                    if (null == r && null == o ? (o = i, r = i = void 0) : null == o && ("string" == typeof i ? (o = r, r = void 0) : (o = r, r = i, i = void 0)), o === !1) o = k;
                    else if (!o) return t;
                    return 1 === a && (s = o, o = function (t) {
                        return bt().off(t),
                        s.apply(this, arguments)
                    }, o.guid = s.guid || (s.guid = bt.guid++)),
                    t.each(function () {
                        bt.event.add(this, e, o, r, i)
                    })
                }
                function R(t, e) {
                    return l(t, "table") && l(11 !== e.nodeType ? e : e.firstChild, "tr") ? bt(">tbody", t)[0] || t : t
                }
                function E(t) {
                    return t.type = (null !== t.getAttribute("type")) + "/" + t.type,
                    t
                }
                function I(t) {
                    var e = le.exec(t.type);
                    return e ? t.type = e[1] : t.removeAttribute("type"),
                    t
                }
                function z(t, e) {
                    var n, i, r, o, a, s, u, l;
                    if (1 === e.nodeType) {
                        if (Ht.hasData(t) && (o = Ht.access(t), a = Ht.set(e, o), l = o.events)) {
                            delete a.handle,
                            a.events = {};
                            for (r in l) for (n = 0, i = l[r].length; n < i; n++) bt.event.add(e, r, l[r][n])
                        }
                        jt.hasData(t) && (s = jt.access(t), u = bt.extend({}, s), jt.set(e, u))
                    }
                }
                function A(t, e) {
                    var n = e.nodeName.toLowerCase();
                    "input" === n && Kt.test(t.type) ? e.checked = t.checked : "input" !== n && "textarea" !== n || (e.defaultValue = t.defaultValue)
                }
                function F(t, e, n, i) {
                    e = ft.apply([], e);
                    var r, o, a, u, l, f, c = 0,
                        h = t.length,
                        d = h - 1,
                        p = e[0],
                        y = bt.isFunction(p);
                    if (y || h > 1 && "string" == typeof p && !gt.checkClone && ue.test(p)) return t.each(function (r) {
                            var o = t.eq(r);
                            y && (e[0] = p.call(this, r, o.html())),
                            F(o, e, n, i)
                        });
                    if (h && (r = x(e, t[0].ownerDocument, !1, t, i), o = r.firstChild, 1 === r.childNodes.length && (r = o), o || i)) {
                            for (a = bt.map(P(r, "script"), E), u = a.length; c < h; c++) l = r,
                            c !== d && (l = bt.clone(l, !0, !0), u && bt.merge(a, P(l, "script"))),
                            n.call(t[c], l, c);
                            if (u) for (f = a[a.length - 1].ownerDocument, bt.map(a, I), c = 0; c < u; c++) l = a[c],
                            Qt.test(l.type || "") && !Ht.access(l, "globalEval") && bt.contains(f, l) && (l.src ? bt._evalUrl && bt._evalUrl(l.src) : s(l.textContent.replace(fe, ""), f))
                        }
                    return t
                }
                function O(t, e, n) {
                    for (var i, r = e ? bt.filter(e, t) : t, o = 0; null != (i = r[o]); o++) n || 1 !== i.nodeType || bt.cleanData(P(i)),
                    i.parentNode && (n && bt.contains(i.ownerDocument, i) && C(P(i, "script")), i.parentNode.removeChild(i));
                    return t
                }
                function B(t, e, n) {
                    var i, r, o, a, s = t.style;
                    return n = n || de(t),
                    n && (a = n.getPropertyValue(e) || n[e], "" !== a || bt.contains(t.ownerDocument, t) || (a = bt.style(t, e)), !gt.pixelMarginRight() && he.test(a) && ce.test(e) && (i = s.width, r = s.minWidth, o = s.maxWidth, s.minWidth = s.maxWidth = s.width = a, a = n.width, s.width = i, s.minWidth = r, s.maxWidth = o)),
                    void 0 !== a ? a + "" : a
                }
                function L(t, e) {
                    return {
                        get: function () {
                            return t() ? void delete this.get : (this.get = e).apply(this, arguments)
                        }
                    }
                }
                function q(t) {
                    if (t in Se) return t;
                    for (var e = t[0].toUpperCase() + t.slice(1), n = ge.length; n--;) if (t = ge[n] + e, t in Se) return t
                }
                function N(t) {
                    var e = bt.cssProps[t];
                    return e || (e = bt.cssProps[t] = q(t) || t),
                    e
                }
                function H(t, e, n) {
                    var i = Vt.exec(e);
                    return i ? Math.max(0, i[2] - (n || 0)) + (i[3] || "px") : e
                }
                function j(t, e, n, i, r) {
                    var o, a = 0;
                    for (o = n === (i ? "border" : "content") ? 4 : "width" === e ? 1 : 0; o < 4; o += 2)"margin" === n && (a += bt.css(t, n + Yt[o], !0, r)),
                    i ? ("content" === n && (a -= bt.css(t, "padding" + Yt[o], !0, r)), "margin" !== n && (a -= bt.css(t, "border" + Yt[o] + "Width", !0, r))) : (a += bt.css(t, "padding" + Yt[o], !0, r), "padding" !== n && (a += bt.css(t, "border" + Yt[o] + "Width", !0, r)));
                    return a
                }
                function W(t, e, n) {
                    var i, r = de(t),
                        o = B(t, e, r),
                        a = "border-box" === bt.css(t, "boxSizing", !1, r);
                    return he.test(o) ? o : (i = a && (gt.boxSizingReliable() || o === t.style[e]), "auto" === o && (o = t["offset" + e[0].toUpperCase() + e.slice(1)]), o = parseFloat(o) || 0, o + j(t, e, n || (a ? "border" : "content"), i, r) + "px")
                }
                function U(t, e, n, i, r) {
                    return new U.prototype.init(t, e, n, i, r)
                }
                function G() {
                    we && (st.hidden === !1 && o.requestAnimationFrame ? o.requestAnimationFrame(G) : o.setTimeout(G, bt.fx.interval), bt.fx.tick())
                }
                function V() {
                    return o.setTimeout(function () {
                        be = void 0
                    }),
                    be = bt.now()
                }
                function Y(t, e) {
                    var n, i = 0,
                        r = {
                            height: t
                        };
                    for (e = e ? 1 : 0; i < 4; i += 2 - e) n = Yt[i],
                    r["margin" + n] = r["padding" + n] = t;
                    return e && (r.opacity = r.width = t),
                    r
                }
                function X(t, e, n) {
                    for (var i, r = (K.tweeners[e] || []).concat(K.tweeners["*"]), o = 0, a = r.length; o < a; o++) if (i = r[o].call(n, e, t)) return i
                }
                function J(t, e, n) {
                    var i, r, o, a, s, u, l, f, c = "width" in e || "height" in e,
                        h = this,
                        d = {},
                        p = t.style,
                        y = t.nodeType && Xt(t),
                        m = Ht.get(t, "fxshow");
                    n.queue || (a = bt._queueHooks(t, "fx"), null == a.unqueued && (a.unqueued = 0, s = a.empty.fire, a.empty.fire = function () {
                            a.unqueued || s()
                        }), a.unqueued++, h.always(function () {
                            h.always(function () {
                                a.unqueued--,
                                bt.queue(t, "fx").length || a.empty.fire()
                            })
                        }));
                    for (i in e) if (r = e[i], _e.test(r)) {
                            if (delete e[i], o = o || "toggle" === r, r === (y ? "hide" : "show")) {
                                if ("show" !== r || !m || void 0 === m[i]) continue;
                                y = !0
                            }
                            d[i] = m && m[i] || bt.style(t, i)
                        }
                    if (u = !bt.isEmptyObject(e), u || !bt.isEmptyObject(d)) {
                            c && 1 === t.nodeType && (n.overflow = [p.overflow, p.overflowX, p.overflowY], l = m && m.display, null == l && (l = Ht.get(t, "display")), f = bt.css(t, "display"), "none" === f && (l ? f = l : (_([t], !0), l = t.style.display || l, f = bt.css(t, "display"), _([t]))), ("inline" === f || "inline-block" === f && null != l) && "none" === bt.css(t, "float") && (u || (h.done(function () {
                                p.display = l
                            }), null == l && (f = p.display, l = "none" === f ? "" : f)), p.display = "inline-block")),
                            n.overflow && (p.overflow = "hidden", h.always(function () {
                                p.overflow = n.overflow[0],
                                p.overflowX = n.overflow[1],
                                p.overflowY = n.overflow[2]
                            })),
                            u = !1;
                            for (i in d) u || (m ? "hidden" in m && (y = m.hidden) : m = Ht.access(t, "fxshow", {
                                display: l
                            }), o && (m.hidden = !y), y && _([t], !0), h.done(function () {
                                y || _([t]),
                                Ht.remove(t, "fxshow");
                                for (i in d) bt.style(t, i, d[i])
                            })),
                            u = X(y ? m[i] : 0, i, h),
                            i in m || (m[i] = u.start, y && (u.end = u.start, u.start = 0))
                        }
                }
                function $(t, e) {
                    var n, i, r, o, a;
                    for (n in t) if (i = bt.camelCase(n), r = e[i], o = t[n], Array.isArray(o) && (r = o[1], o = t[n] = o[0]), n !== i && (t[i] = o, delete t[n]), a = bt.cssHooks[i], a && "expand" in a) {
                        o = a.expand(o),
                        delete t[i];
                        for (n in o) n in t || (t[n] = o[n], e[n] = r)
                    } else e[i] = r
                }
                function K(t, e, n) {
                    var i, r, o = 0,
                        a = K.prefilters.length,
                        s = bt.Deferred().always(function () {
                            delete u.elem
                        }),
                        u = function () {
                            if (r) return !1;
                            for (var e = be || V(), n = Math.max(0, l.startTime + l.duration - e), i = n / l.duration || 0, o = 1 - i, a = 0, u = l.tweens.length; a < u; a++) l.tweens[a].run(o);
                            return s.notifyWith(t, [l, o, n]),
                            o < 1 && u ? n : (u || s.notifyWith(t, [l, 1, 0]), s.resolveWith(t, [l]), !1)
                        },
                        l = s.promise({
                            elem: t,
                            props: bt.extend({}, e),
                            opts: bt.extend(!0, {
                                specialEasing: {},
                                easing: bt.easing._default
                            }, n),
                            originalProperties: e,
                            originalOptions: n,
                            startTime: be || V(),
                            duration: n.duration,
                            tweens: [],
                            createTween: function (e, n) {
                                var i = bt.Tween(t, l.opts, e, n, l.opts.specialEasing[e] || l.opts.easing);
                                return l.tweens.push(i),
                                i
                            },
                            stop: function (e) {
                                var n = 0,
                                    i = e ? l.tweens.length : 0;
                                if (r) return this;
                                for (r = !0; n < i; n++) l.tweens[n].run(1);
                                return e ? (s.notifyWith(t, [l, 1, 0]), s.resolveWith(t, [l, e])) : s.rejectWith(t, [l, e]),
                                this
                            }
                        }),
                        f = l.props;
                    for ($(f, l.opts.specialEasing); o < a; o++) if (i = K.prefilters[o].call(l, t, f, l.opts)) return bt.isFunction(i.stop) && (bt._queueHooks(l.elem, l.opts.queue).stop = bt.proxy(i.stop, i)),
                    i;
                    return bt.map(f, X, l),
                    bt.isFunction(l.opts.start) && l.opts.start.call(t, l),
                    l.progress(l.opts.progress).done(l.opts.done, l.opts.complete).fail(l.opts.fail).always(l.opts.always),
                    bt.fx.timer(bt.extend(u, {
                            elem: t,
                            anim: l,
                            queue: l.opts.queue
                        })),
                    l
                }
                function Z(t) {
                    var e = t.match(Ot) || [];
                    return e.join(" ")
                }
                function Q(t) {
                    return t.getAttribute && t.getAttribute("class") || ""
                }
                function tt(t, e, i, r) {
                    var o;
                    if (Array.isArray(e)) bt.each(e, function (e, o) {
                        i || ze.test(t) ? r(t, o) : tt(t + "[" + ("object" === ("undefined" == typeof o ? "undefined" : n(o)) && null != o ? e : "") + "]", o, i, r)
                    });
                    else if (i || "object" !== bt.type(e)) r(t, e);
                    else for (o in e) tt(t + "[" + o + "]", e[o], i, r)
                }
                function et(t) {
                    return function (e, n) {
                        "string" != typeof e && (n = e, e = "*");
                        var i, r = 0,
                            o = e.toLowerCase().match(Ot) || [];
                        if (bt.isFunction(n)) for (; i = o[r++];)"+" === i[0] ? (i = i.slice(1) || "*", (t[i] = t[i] || []).unshift(n)) : (t[i] = t[i] || []).push(n)
                    }
                }
                function nt(t, e, n, i) {
                    function r(s) {
                        var u;
                        return o[s] = !0,
                        bt.each(t[s] || [], function (t, s) {
                            var l = s(e, n, i);
                            return "string" != typeof l || a || o[l] ? a ? !(u = l) : void 0 : (e.dataTypes.unshift(l), r(l), !1)
                        }),
                        u
                    }
                    var o = {},
                        a = t === Ge;
                    return r(e.dataTypes[0]) || !o["*"] && r("*")
                }
                function it(t, e) {
                    var n, i, r = bt.ajaxSettings.flatOptions || {};
                    for (n in e) void 0 !== e[n] && ((r[n] ? t : i || (i = {}))[n] = e[n]);
                    return i && bt.extend(!0, t, i),
                    t
                }
                function rt(t, e, n) {
                    for (var i, r, o, a, s = t.contents, u = t.dataTypes;
                    "*" === u[0];) u.shift(),
                    void 0 === i && (i = t.mimeType || e.getResponseHeader("Content-Type"));
                    if (i) for (r in s) if (s[r] && s[r].test(i)) {
                        u.unshift(r);
                        break
                    }
                    if (u[0] in n) o = u[0];
                    else {
                        for (r in n) {
                            if (!u[0] || t.converters[r + " " + u[0]]) {
                                o = r;
                                break
                            }
                            a || (a = r)
                        }
                        o = o || a
                    }
                    if (o) return o !== u[0] && u.unshift(o),
                    n[o]
                }
                function ot(t, e, n, i) {
                    var r, o, a, s, u, l = {},
                        f = t.dataTypes.slice();
                    if (f[1]) for (a in t.converters) l[a.toLowerCase()] = t.converters[a];
                    for (o = f.shift(); o;) if (t.responseFields[o] && (n[t.responseFields[o]] = e), !u && i && t.dataFilter && (e = t.dataFilter(e, t.dataType)), u = o, o = f.shift()) if ("*" === o) o = u;
                    else if ("*" !== u && u !== o) {
                            if (a = l[u + " " + o] || l["* " + o], !a) for (r in l) if (s = r.split(" "), s[1] === o && (a = l[u + " " + s[0]] || l["* " + s[0]])) {
                                a === !0 ? a = l[r] : l[r] !== !0 && (o = s[0], f.unshift(s[1]));
                                break
                            }
                            if (a !== !0) if (a && t.throws) e = a(e);
                            else try {
                                e = a(e)
                            } catch (t) {
                                return {
                                    state: "parsererror",
                                    error: a ? t : "No conversion from " + u + " to " + o
                                }
                            }
                        }
                    return {
                            state: "success",
                            data: e
                        }
                }
                var at = [],
                    st = o.document,
                    ut = Object.getPrototypeOf,
                    lt = at.slice,
                    ft = at.concat,
                    ct = at.push,
                    ht = at.indexOf,
                    dt = {},
                    pt = dt.toString,
                    yt = dt.hasOwnProperty,
                    mt = yt.toString,
                    vt = mt.call(Object),
                    gt = {},
                    St = "3.2.1",
                    bt = function t(e, n) {
                        return new t.fn.init(e, n)
                    },
                    wt = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,
                    _t = /^-ms-/,
                    Pt = /-([a-z])/g,
                    Ct = function (t, e) {
                        return e.toUpperCase()
                    };
                bt.fn = bt.prototype = {
                        jquery: St,
                        constructor: bt,
                        length: 0,
                        toArray: function () {
                            return lt.call(this)
                        },
                        get: function (t) {
                            return null == t ? lt.call(this) : t < 0 ? this[t + this.length] : this[t]
                        },
                        pushStack: function (t) {
                            var e = bt.merge(this.constructor(), t);
                            return e.prevObject = this,
                            e
                        },
                        each: function (t) {
                            return bt.each(this, t)
                        },
                        map: function (t) {
                            return this.pushStack(bt.map(this, function (e, n) {
                                return t.call(e, n, e)
                            }))
                        },
                        slice: function () {
                            return this.pushStack(lt.apply(this, arguments))
                        },
                        first: function () {
                            return this.eq(0)
                        },
                        last: function () {
                            return this.eq(-1)
                        },
                        eq: function (t) {
                            var e = this.length,
                                n = +t + (t < 0 ? e : 0);
                            return this.pushStack(n >= 0 && n < e ? [this[n]] : [])
                        },
                        end: function () {
                            return this.prevObject || this.constructor()
                        },
                        push: ct,
                        sort: at.sort,
                        splice: at.splice
                    },
                bt.extend = bt.fn.extend = function () {
                        var t, e, i, r, o, a, s = arguments[0] || {},
                            u = 1,
                            l = arguments.length,
                            f = !1;
                        for ("boolean" == typeof s && (f = s, s = arguments[u] || {}, u++), "object" === ("undefined" == typeof s ? "undefined" : n(s)) || bt.isFunction(s) || (s = {}), u === l && (s = this, u--); u < l; u++) if (null != (t = arguments[u])) for (e in t) i = s[e],
                        r = t[e],
                        s !== r && (f && r && (bt.isPlainObject(r) || (o = Array.isArray(r))) ? (o ? (o = !1, a = i && Array.isArray(i) ? i : []) : a = i && bt.isPlainObject(i) ? i : {}, s[e] = bt.extend(f, a, r)) : void 0 !== r && (s[e] = r));
                        return s
                    },
                bt.extend({
                        expando: "jQuery" + (St + Math.random()).replace(/\D/g, ""),
                        isReady: !0,
                        error: function (t) {
                            throw new Error(t)
                        },
                        noop: function () {},
                        isFunction: function (t) {
                            return "function" === bt.type(t)
                        },
                        isWindow: function (t) {
                            return null != t && t === t.window
                        },
                        isNumeric: function (t) {
                            var e = bt.type(t);
                            return ("number" === e || "string" === e) && !isNaN(t - parseFloat(t))
                        },
                        isPlainObject: function (t) {
                            var e, n;
                            return !(!t || "[object Object]" !== pt.call(t)) && (!(e = ut(t)) || (n = yt.call(e, "constructor") && e.constructor, "function" == typeof n && mt.call(n) === vt))
                        },
                        isEmptyObject: function (t) {
                            var e;
                            for (e in t) return !1;
                            return !0
                        },
                        type: function (t) {
                            return null == t ? t + "" : "object" === ("undefined" == typeof t ? "undefined" : n(t)) || "function" == typeof t ? dt[pt.call(t)] || "object" : "undefined" == typeof t ? "undefined" : n(t)
                        },
                        globalEval: function (t) {
                            s(t)
                        },
                        camelCase: function (t) {
                            return t.replace(_t, "ms-").replace(Pt, Ct)
                        },
                        each: function (t, e) {
                            var n, i = 0;
                            if (u(t)) for (n = t.length; i < n && e.call(t[i], i, t[i]) !== !1; i++);
                            else for (i in t) if (e.call(t[i], i, t[i]) === !1) break;
                            return t
                        },
                        trim: function (t) {
                            return null == t ? "" : (t + "").replace(wt, "")
                        },
                        makeArray: function (t, e) {
                            var n = e || [];
                            return null != t && (u(Object(t)) ? bt.merge(n, "string" == typeof t ? [t] : t) : ct.call(n, t)),
                            n
                        },
                        inArray: function (t, e, n) {
                            return null == e ? -1 : ht.call(e, t, n)
                        },
                        merge: function (t, e) {
                            for (var n = +e.length, i = 0, r = t.length; i < n; i++) t[r++] = e[i];
                            return t.length = r,
                            t
                        },
                        grep: function (t, e, n) {
                            for (var i, r = [], o = 0, a = t.length, s = !n; o < a; o++) i = !e(t[o], o),
                            i !== s && r.push(t[o]);
                            return r
                        },
                        map: function (t, e, n) {
                            var i, r, o = 0,
                                a = [];
                            if (u(t)) for (i = t.length; o < i; o++) r = e(t[o], o, n),
                            null != r && a.push(r);
                            else for (o in t) r = e(t[o], o, n),
                            null != r && a.push(r);
                            return ft.apply([], a)
                        },
                        guid: 1,
                        proxy: function t(e, n) {
                            var i, r, t;
                            if ("string" == typeof n && (i = e[n], n = e, e = i), bt.isFunction(e)) return r = lt.call(arguments, 2),
                            t = function () {
                                return e.apply(n || this, r.concat(lt.call(arguments)))
                            },
                            t.guid = e.guid = e.guid || bt.guid++,
                            t
                        },
                        now: Date.now,
                        support: gt
                    }),
                "function" == typeof Symbol && (bt.fn[Symbol.iterator] = at[Symbol.iterator]),
                bt.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "), function (t, e) {
                        dt["[object " + e + "]"] = e.toLowerCase()
                    });
                var xt =
                /*!
                 * Sizzle CSS Selector Engine v2.3.3
                 * https://sizzlejs.com/
                 *
                 * Copyright jQuery Foundation and other contributors
                 * Released under the MIT license
                 * http://jquery.org/license
                 *
                 * Date: 2016-08-08
                 */
 
                function (t) {
                        function e(t, e, n, i) {
                            var r, o, a, s, u, l, f, h = e && e.ownerDocument,
                                p = e ? e.nodeType : 9;
                            if (n = n || [], "string" != typeof t || !t || 1 !== p && 9 !== p && 11 !== p) return n;
                            if (!i && ((e ? e.ownerDocument || e : H) !== z && I(e), e = e || z, F)) {
                                    if (11 !== p && (u = vt.exec(t))) if (r = u[1]) {
                                        if (9 === p) {
                                            if (!(a = e.getElementById(r))) return n;
                                            if (a.id === r) return n.push(a),
                                            n
                                        } else if (h && (a = h.getElementById(r)) && q(e, a) && a.id === r) return n.push(a),
                                        n
                                    } else {
                                        if (u[2]) return Z.apply(n, e.getElementsByTagName(t)),
                                        n;
                                        if ((r = u[3]) && _.getElementsByClassName && e.getElementsByClassName) return Z.apply(n, e.getElementsByClassName(r)),
                                        n
                                    }
                                    if (_.qsa && !V[t + " "] && (!O || !O.test(t))) {
                                        if (1 !== p) h = e,
                                        f = t;
                                        else if ("object" !== e.nodeName.toLowerCase()) {
                                            for ((s = e.getAttribute("id")) ? s = s.replace(wt, _t) : e.setAttribute("id", s = N), l = T(t), o = l.length; o--;) l[o] = "#" + s + " " + d(l[o]);
                                            f = l.join(","),
                                            h = gt.test(t) && c(e.parentNode) || e
                                        }
                                        if (f) try {
                                            return Z.apply(n, h.querySelectorAll(f)),
                                            n
                                        } catch (t) {} finally {
                                            s === N && e.removeAttribute("id")
                                        }
                                    }
                                }
                            return D(t.replace(st, "$1"), e, n, i)
                        }
                        function n() {
                            function t(n, i) {
                                return e.push(n + " ") > P.cacheLength && delete t[e.shift()],
                                t[n + " "] = i
                            }
                            var e = [];
                            return t
                        }
                        function i(t) {
                            return t[N] = !0,
                            t
                        }
                        function r(t) {
                            var e = z.createElement("fieldset");
                            try {
                                return !!t(e)
                            } catch (t) {
                                return !1
                            } finally {
                                e.parentNode && e.parentNode.removeChild(e),
                                e = null
                            }
                        }
                        function o(t, e) {
                            for (var n = t.split("|"), i = n.length; i--;) P.attrHandle[n[i]] = e
                        }
                        function a(t, e) {
                            var n = e && t,
                                i = n && 1 === t.nodeType && 1 === e.nodeType && t.sourceIndex - e.sourceIndex;
                            if (i) return i;
                            if (n) for (; n = n.nextSibling;) if (n === e) return -1;
                            return t ? 1 : -1
                        }
                        function s(t) {
                            return function (e) {
                                var n = e.nodeName.toLowerCase();
                                return "input" === n && e.type === t
                            }
                        }
                        function u(t) {
                            return function (e) {
                                var n = e.nodeName.toLowerCase();
                                return ("input" === n || "button" === n) && e.type === t
                            }
                        }
                        function l(t) {
                            return function (e) {
                                return "form" in e ? e.parentNode && e.disabled === !1 ? "label" in e ? "label" in e.parentNode ? e.parentNode.disabled === t : e.disabled === t : e.isDisabled === t || e.isDisabled !== !t && Ct(e) === t : e.disabled === t : "label" in e && e.disabled === t
                            }
                        }
                        function f(t) {
                            return i(function (e) {
                                return e = +e,
                                i(function (n, i) {
                                    for (var r, o = t([], n.length, e), a = o.length; a--;) n[r = o[a]] && (n[r] = !(i[r] = n[r]))
                                })
                            })
                        }
                        function c(t) {
                            return t && "undefined" != typeof t.getElementsByTagName && t
                        }
                        function h() {}
                        function d(t) {
                            for (var e = 0, n = t.length, i = ""; e < n; e++) i += t[e].value;
                            return i
                        }
                        function p(t, e, n) {
                            var i = e.dir,
                                r = e.next,
                                o = r || i,
                                a = n && "parentNode" === o,
                                s = W++;
                            return e.first ?
                            function (e, n, r) {
                                    for (; e = e[i];) if (1 === e.nodeType || a) return t(e, n, r);
                                    return !1
                                } : function (e, n, u) {
                                    var l, f, c, h = [j, s];
                                    if (u) {
                                        for (; e = e[i];) if ((1 === e.nodeType || a) && t(e, n, u)) return !0
                                    } else for (; e = e[i];) if (1 === e.nodeType || a) if (c = e[N] || (e[N] = {}), f = c[e.uniqueID] || (c[e.uniqueID] = {}), r && r === e.nodeName.toLowerCase()) e = e[i] || e;
                                    else {
                                        if ((l = f[o]) && l[0] === j && l[1] === s) return h[2] = l[2];
                                        if (f[o] = h, h[2] = t(e, n, u)) return !0
                                    }
                                    return !1
                                }
                        }
                        function y(t) {
                            return t.length > 1 ?
                            function (e, n, i) {
                                for (var r = t.length; r--;) if (!t[r](e, n, i)) return !1;
                                return !0
                            } : t[0]
                        }
                        function m(t, n, i) {
                            for (var r = 0, o = n.length; r < o; r++) e(t, n[r], i);
                            return i
                        }
                        function v(t, e, n, i, r) {
                            for (var o, a = [], s = 0, u = t.length, l = null != e; s < u; s++)(o = t[s]) && (n && !n(o, i, r) || (a.push(o), l && e.push(s)));
                            return a
                        }
                        function g(t, e, n, r, o, a) {
                            return r && !r[N] && (r = g(r)),
                            o && !o[N] && (o = g(o, a)),
                            i(function (i, a, s, u) {
                                var l, f, c, h = [],
                                    d = [],
                                    p = a.length,
                                    y = i || m(e || "*", s.nodeType ? [s] : s, []),
                                    g = !t || !i && e ? y : v(y, h, t, s, u),
                                    S = n ? o || (i ? t : p || r) ? [] : a : g;
                                if (n && n(g, S, s, u), r) for (l = v(S, d), r(l, [], s, u), f = l.length; f--;)(c = l[f]) && (S[d[f]] = !(g[d[f]] = c));
                                if (i) {
                                        if (o || t) {
                                            if (o) {
                                                for (l = [], f = S.length; f--;)(c = S[f]) && l.push(g[f] = c);
                                                o(null, S = [], l, u)
                                            }
                                            for (f = S.length; f--;)(c = S[f]) && (l = o ? tt(i, c) : h[f]) > -1 && (i[l] = !(a[l] = c))
                                        }
                                    } else S = v(S === a ? S.splice(p, S.length) : S),
                                o ? o(null, a, S, u) : Z.apply(a, S)
                            })
                        }
                        function S(t) {
                            for (var e, n, i, r = t.length, o = P.relative[t[0].type], a = o || P.relative[" "], s = o ? 1 : 0, u = p(function (t) {
                                return t === e
                            }, a, !0), l = p(function (t) {
                                return tt(e, t) > -1
                            }, a, !0), f = [function (t, n, i) {
                                var r = !o && (i || n !== M) || ((e = n).nodeType ? u(t, n, i) : l(t, n, i));
                                return e = null,
                                r
                            }]; s < r; s++) if (n = P.relative[t[s].type]) f = [p(y(f), n)];
                            else {
                                if (n = P.filter[t[s].type].apply(null, t[s].matches), n[N]) {
                                    for (i = ++s; i < r && !P.relative[t[i].type]; i++);
                                    return g(s > 1 && y(f), s > 1 && d(t.slice(0, s - 1).concat({
                                        value: " " === t[s - 2].type ? "*" : ""
                                    })).replace(st, "$1"), n, s < i && S(t.slice(s, i)), i < r && S(t = t.slice(i)), i < r && d(t))
                                }
                                f.push(n)
                            }
                            return y(f)
                        }
                        function b(t, n) {
                            var r = n.length > 0,
                                o = t.length > 0,
                                a = function (i, a, s, u, l) {
                                    var f, c, h, d = 0,
                                        p = "0",
                                        y = i && [],
                                        m = [],
                                        g = M,
                                        S = i || o && P.find.TAG("*", l),
                                        b = j += null == g ? 1 : Math.random() || .1,
                                        w = S.length;
                                    for (l && (M = a === z || a || l); p !== w && null != (f = S[p]); p++) {
                                            if (o && f) {
                                                for (c = 0, a || f.ownerDocument === z || (I(f), s = !F); h = t[c++];) if (h(f, a || z, s)) {
                                                    u.push(f);
                                                    break
                                                }
                                                l && (j = b)
                                            }
                                            r && ((f = !h && f) && d--, i && y.push(f))
                                        }
                                    if (d += p, r && p !== d) {
                                            for (c = 0; h = n[c++];) h(y, m, a, s);
                                            if (i) {
                                                if (d > 0) for (; p--;) y[p] || m[p] || (m[p] = $.call(u));
                                                m = v(m)
                                            }
                                            Z.apply(u, m),
                                            l && !i && m.length > 0 && d + n.length > 1 && e.uniqueSort(u)
                                        }
                                    return l && (j = b, M = g),
                                    y
                                };
                            return r ? i(a) : a
                        }
                        var w, _, P, C, x, T, k, D, M, R, E, I, z, A, F, O, B, L, q, N = "sizzle" + 1 * new Date,
                            H = t.document,
                            j = 0,
                            W = 0,
                            U = n(),
                            G = n(),
                            V = n(),
                            Y = function (t, e) {
                                return t === e && (E = !0),
                                0
                            },
                            X = {}.hasOwnProperty,
                            J = [],
                            $ = J.pop,
                            K = J.push,
                            Z = J.push,
                            Q = J.slice,
                            tt = function (t, e) {
                                for (var n = 0, i = t.length; n < i; n++) if (t[n] === e) return n;
                                return -1
                            },
                            et = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",
                            nt = "[\\x20\\t\\r\\n\\f]",
                            it = "(?:\\\\.|[\\w-]|[^\0-\\xa0])+",
                            rt = "\\[" + nt + "*(" + it + ")(?:" + nt + "*([*^$|!~]?=)" + nt + "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + it + "))|)" + nt + "*\\]",
                            ot = ":(" + it + ")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|" + rt + ")*)|.*)\\)|)",
                            at = new RegExp(nt + "+", "g"),
                            st = new RegExp("^" + nt + "+|((?:^|[^\\\\])(?:\\\\.)*)" + nt + "+$", "g"),
                            ut = new RegExp("^" + nt + "*," + nt + "*"),
                            lt = new RegExp("^" + nt + "*([>+~]|" + nt + ")" + nt + "*"),
                            ft = new RegExp("=" + nt + "*([^\\]'\"]*?)" + nt + "*\\]", "g"),
                            ct = new RegExp(ot),
                            ht = new RegExp("^" + it + "$"),
                            dt = {
                                ID: new RegExp("^#(" + it + ")"),
                                CLASS: new RegExp("^\\.(" + it + ")"),
                                TAG: new RegExp("^(" + it + "|[*])"),
                                ATTR: new RegExp("^" + rt),
                                PSEUDO: new RegExp("^" + ot),
                                CHILD: new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + nt + "*(even|odd|(([+-]|)(\\d*)n|)" + nt + "*(?:([+-]|)" + nt + "*(\\d+)|))" + nt + "*\\)|)", "i"),
                                bool: new RegExp("^(?:" + et + ")$", "i"),
                                needsContext: new RegExp("^" + nt + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + nt + "*((?:-\\d)?\\d*)" + nt + "*\\)|)(?=[^-]|$)", "i")
                            },
                            pt = /^(?:input|select|textarea|button)$/i,
                            yt = /^h\d$/i,
                            mt = /^[^{]+\{\s*\[native \w/,
                            vt = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,
                            gt = /[+~]/,
                            St = new RegExp("\\\\([\\da-f]{1,6}" + nt + "?|(" + nt + ")|.)", "ig"),
                            bt = function (t, e, n) {
                                var i = "0x" + e - 65536;
                                return i !== i || n ? e : i < 0 ? String.fromCharCode(i + 65536) : String.fromCharCode(i >> 10 | 55296, 1023 & i | 56320)
                            },
                            wt = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,
                            _t = function (t, e) {
                                return e ? "\0" === t ? "�" : t.slice(0, -1) + "\\" + t.charCodeAt(t.length - 1).toString(16) + " " : "\\" + t
                            },
                            Pt = function () {
                                I()
                            },
                            Ct = p(function (t) {
                                return t.disabled === !0 && ("form" in t || "label" in t)
                            }, {
                                dir: "parentNode",
                                next: "legend"
                            });
                        try {
                                Z.apply(J = Q.call(H.childNodes), H.childNodes),
                                J[H.childNodes.length].nodeType
                            } catch (t) {
                                Z = {
                                    apply: J.length ?
                                    function (t, e) {
                                        K.apply(t, Q.call(e))
                                    } : function (t, e) {
                                        for (var n = t.length, i = 0; t[n++] = e[i++];);
                                        t.length = n - 1
                                    }
                                }
                            }
                        _ = e.support = {},
                        x = e.isXML = function (t) {
                                var e = t && (t.ownerDocument || t).documentElement;
                                return !!e && "HTML" !== e.nodeName
                            },
                        I = e.setDocument = function (t) {
                                var e, n, i = t ? t.ownerDocument || t : H;
                                return i !== z && 9 === i.nodeType && i.documentElement ? (z = i, A = z.documentElement, F = !x(z), H !== z && (n = z.defaultView) && n.top !== n && (n.addEventListener ? n.addEventListener("unload", Pt, !1) : n.attachEvent && n.attachEvent("onunload", Pt)), _.attributes = r(function (t) {
                                    return t.className = "i",
                                    !t.getAttribute("className")
                                }), _.getElementsByTagName = r(function (t) {
                                    return t.appendChild(z.createComment("")),
                                    !t.getElementsByTagName("*").length
                                }), _.getElementsByClassName = mt.test(z.getElementsByClassName), _.getById = r(function (t) {
                                    return A.appendChild(t).id = N,
                                    !z.getElementsByName || !z.getElementsByName(N).length
                                }), _.getById ? (P.filter.ID = function (t) {
                                    var e = t.replace(St, bt);
                                    return function (t) {
                                        return t.getAttribute("id") === e
                                    }
                                }, P.find.ID = function (t, e) {
                                    if ("undefined" != typeof e.getElementById && F) {
                                        var n = e.getElementById(t);
                                        return n ? [n] : []
                                    }
                                }) : (P.filter.ID = function (t) {
                                    var e = t.replace(St, bt);
                                    return function (t) {
                                        var n = "undefined" != typeof t.getAttributeNode && t.getAttributeNode("id");
                                        return n && n.value === e
                                    }
                                }, P.find.ID = function (t, e) {
                                    if ("undefined" != typeof e.getElementById && F) {
                                        var n, i, r, o = e.getElementById(t);
                                        if (o) {
                                            if (n = o.getAttributeNode("id"), n && n.value === t) return [o];
                                            for (r = e.getElementsByName(t), i = 0; o = r[i++];) if (n = o.getAttributeNode("id"), n && n.value === t) return [o]
                                        }
                                        return []
                                    }
                                }), P.find.TAG = _.getElementsByTagName ?
                                function (t, e) {
                                    return "undefined" != typeof e.getElementsByTagName ? e.getElementsByTagName(t) : _.qsa ? e.querySelectorAll(t) : void 0
                                } : function (t, e) {
                                    var n, i = [],
                                        r = 0,
                                        o = e.getElementsByTagName(t);
                                    if ("*" === t) {
                                            for (; n = o[r++];) 1 === n.nodeType && i.push(n);
                                            return i
                                        }
                                    return o
                                }, P.find.CLASS = _.getElementsByClassName &&
                                function (t, e) {
                                    if ("undefined" != typeof e.getElementsByClassName && F) return e.getElementsByClassName(t)
                                }, B = [], O = [], (_.qsa = mt.test(z.querySelectorAll)) && (r(function (t) {
                                    A.appendChild(t).innerHTML = "<a id='" + N + "'></a><select id='" + N + "-\r\\' msallowcapture=''><option selected=''></option></select>",
                                    t.querySelectorAll("[msallowcapture^='']").length && O.push("[*^$]=" + nt + "*(?:''|\"\")"),
                                    t.querySelectorAll("[selected]").length || O.push("\\[" + nt + "*(?:value|" + et + ")"),
                                    t.querySelectorAll("[id~=" + N + "-]").length || O.push("~="),
                                    t.querySelectorAll(":checked").length || O.push(":checked"),
                                    t.querySelectorAll("a#" + N + "+*").length || O.push(".#.+[+~]")
                                }), r(function (t) {
                                    t.innerHTML = "<a href='' disabled='disabled'></a><select disabled='disabled'><option/></select>";
                                    var e = z.createElement("input");
                                    e.setAttribute("type", "hidden"),
                                    t.appendChild(e).setAttribute("name", "D"),
                                    t.querySelectorAll("[name=d]").length && O.push("name" + nt + "*[*^$|!~]?="),
                                    2 !== t.querySelectorAll(":enabled").length && O.push(":enabled", ":disabled"),
                                    A.appendChild(t).disabled = !0,
                                    2 !== t.querySelectorAll(":disabled").length && O.push(":enabled", ":disabled"),
                                    t.querySelectorAll("*,:x"),
                                    O.push(",.*:")
                                })), (_.matchesSelector = mt.test(L = A.matches || A.webkitMatchesSelector || A.mozMatchesSelector || A.oMatchesSelector || A.msMatchesSelector)) && r(function (t) {
                                    _.disconnectedMatch = L.call(t, "*"),
                                    L.call(t, "[s!='']:x"),
                                    B.push("!=", ot)
                                }), O = O.length && new RegExp(O.join("|")), B = B.length && new RegExp(B.join("|")), e = mt.test(A.compareDocumentPosition), q = e || mt.test(A.contains) ?
                                function (t, e) {
                                    var n = 9 === t.nodeType ? t.documentElement : t,
                                        i = e && e.parentNode;
                                    return t === i || !(!i || 1 !== i.nodeType || !(n.contains ? n.contains(i) : t.compareDocumentPosition && 16 & t.compareDocumentPosition(i)))
                                } : function (t, e) {
                                    if (e) for (; e = e.parentNode;) if (e === t) return !0;
                                    return !1
                                }, Y = e ?
                                function (t, e) {
                                    if (t === e) return E = !0,
                                    0;
                                    var n = !t.compareDocumentPosition - !e.compareDocumentPosition;
                                    return n ? n : (n = (t.ownerDocument || t) === (e.ownerDocument || e) ? t.compareDocumentPosition(e) : 1, 1 & n || !_.sortDetached && e.compareDocumentPosition(t) === n ? t === z || t.ownerDocument === H && q(H, t) ? -1 : e === z || e.ownerDocument === H && q(H, e) ? 1 : R ? tt(R, t) - tt(R, e) : 0 : 4 & n ? -1 : 1)
                                } : function (t, e) {
                                    if (t === e) return E = !0,
                                    0;
                                    var n, i = 0,
                                        r = t.parentNode,
                                        o = e.parentNode,
                                        s = [t],
                                        u = [e];
                                    if (!r || !o) return t === z ? -1 : e === z ? 1 : r ? -1 : o ? 1 : R ? tt(R, t) - tt(R, e) : 0;
                                    if (r === o) return a(t, e);
                                    for (n = t; n = n.parentNode;) s.unshift(n);
                                    for (n = e; n = n.parentNode;) u.unshift(n);
                                    for (; s[i] === u[i];) i++;
                                    return i ? a(s[i], u[i]) : s[i] === H ? -1 : u[i] === H ? 1 : 0
                                }, z) : z
                            },
                        e.matches = function (t, n) {
                                return e(t, null, null, n)
                            },
                        e.matchesSelector = function (t, n) {
                                if ((t.ownerDocument || t) !== z && I(t), n = n.replace(ft, "='$1']"), _.matchesSelector && F && !V[n + " "] && (!B || !B.test(n)) && (!O || !O.test(n))) try {
                                    var i = L.call(t, n);
                                    if (i || _.disconnectedMatch || t.document && 11 !== t.document.nodeType) return i
                                } catch (t) {}
                                return e(n, z, null, [t]).length > 0
                            },
                        e.contains = function (t, e) {
                                return (t.ownerDocument || t) !== z && I(t),
                                q(t, e)
                            },
                        e.attr = function (t, e) {
                                (t.ownerDocument || t) !== z && I(t);
                                var n = P.attrHandle[e.toLowerCase()],
                                    i = n && X.call(P.attrHandle, e.toLowerCase()) ? n(t, e, !F) : void 0;
                                return void 0 !== i ? i : _.attributes || !F ? t.getAttribute(e) : (i = t.getAttributeNode(e)) && i.specified ? i.value : null
                            },
                        e.escape = function (t) {
                                return (t + "").replace(wt, _t)
                            },
                        e.error = function (t) {
                                throw new Error("Syntax error, unrecognized expression: " + t)
                            },
                        e.uniqueSort = function (t) {
                                var e, n = [],
                                    i = 0,
                                    r = 0;
                                if (E = !_.detectDuplicates, R = !_.sortStable && t.slice(0), t.sort(Y), E) {
                                        for (; e = t[r++];) e === t[r] && (i = n.push(r));
                                        for (; i--;) t.splice(n[i], 1)
                                    }
                                return R = null,
                                t
                            },
                        C = e.getText = function (t) {
                                var e, n = "",
                                    i = 0,
                                    r = t.nodeType;
                                if (r) {
                                        if (1 === r || 9 === r || 11 === r) {
                                            if ("string" == typeof t.textContent) return t.textContent;
                                            for (t = t.firstChild; t; t = t.nextSibling) n += C(t)
                                        } else if (3 === r || 4 === r) return t.nodeValue
                                    } else for (; e = t[i++];) n += C(e);
                                return n
                            },
                        P = e.selectors = {
                                cacheLength: 50,
                                createPseudo: i,
                                match: dt,
                                attrHandle: {},
                                find: {},
                                relative: {
                                    ">": {
                                        dir: "parentNode",
                                        first: !0
                                    },
                                    " ": {
                                        dir: "parentNode"
                                    },
                                    "+": {
                                        dir: "previousSibling",
                                        first: !0
                                    },
                                    "~": {
                                        dir: "previousSibling"
                                    }
                                },
                                preFilter: {
                                    ATTR: function (t) {
                                        return t[1] = t[1].replace(St, bt),
                                        t[3] = (t[3] || t[4] || t[5] || "").replace(St, bt),
                                        "~=" === t[2] && (t[3] = " " + t[3] + " "),
                                        t.slice(0, 4)
                                    },
                                    CHILD: function (t) {
                                        return t[1] = t[1].toLowerCase(),
                                        "nth" === t[1].slice(0, 3) ? (t[3] || e.error(t[0]), t[4] = +(t[4] ? t[5] + (t[6] || 1) : 2 * ("even" === t[3] || "odd" === t[3])), t[5] = +(t[7] + t[8] || "odd" === t[3])) : t[3] && e.error(t[0]),
                                        t
                                    },
                                    PSEUDO: function (t) {
                                        var e, n = !t[6] && t[2];
                                        return dt.CHILD.test(t[0]) ? null : (t[3] ? t[2] = t[4] || t[5] || "" : n && ct.test(n) && (e = T(n, !0)) && (e = n.indexOf(")", n.length - e) - n.length) && (t[0] = t[0].slice(0, e), t[2] = n.slice(0, e)), t.slice(0, 3))
                                    }
                                },
                                filter: {
                                    TAG: function (t) {
                                        var e = t.replace(St, bt).toLowerCase();
                                        return "*" === t ?
                                        function () {
                                            return !0
                                        } : function (t) {
                                            return t.nodeName && t.nodeName.toLowerCase() === e
                                        }
                                    },
                                    CLASS: function (t) {
                                        var e = U[t + " "];
                                        return e || (e = new RegExp("(^|" + nt + ")" + t + "(" + nt + "|$)")) && U(t, function (t) {
                                            return e.test("string" == typeof t.className && t.className || "undefined" != typeof t.getAttribute && t.getAttribute("class") || "")
                                        })
                                    },
                                    ATTR: function (t, n, i) {
                                        return function (r) {
                                            var o = e.attr(r, t);
                                            return null == o ? "!=" === n : !n || (o += "", "=" === n ? o === i : "!=" === n ? o !== i : "^=" === n ? i && 0 === o.indexOf(i) : "*=" === n ? i && o.indexOf(i) > -1 : "$=" === n ? i && o.slice(-i.length) === i : "~=" === n ? (" " + o.replace(at, " ") + " ").indexOf(i) > -1 : "|=" === n && (o === i || o.slice(0, i.length + 1) === i + "-"))
                                        }
                                    },
                                    CHILD: function (t, e, n, i, r) {
                                        var o = "nth" !== t.slice(0, 3),
                                            a = "last" !== t.slice(-4),
                                            s = "of-type" === e;
                                        return 1 === i && 0 === r ?
                                        function (t) {
                                                return !!t.parentNode
                                            } : function (e, n, u) {
                                                var l, f, c, h, d, p, y = o !== a ? "nextSibling" : "previousSibling",
                                                    m = e.parentNode,
                                                    v = s && e.nodeName.toLowerCase(),
                                                    g = !u && !s,
                                                    S = !1;
                                                if (m) {
                                                        if (o) {
                                                            for (; y;) {
                                                                for (h = e; h = h[y];) if (s ? h.nodeName.toLowerCase() === v : 1 === h.nodeType) return !1;
                                                                p = y = "only" === t && !p && "nextSibling"
                                                            }
                                                            return !0
                                                        }
                                                        if (p = [a ? m.firstChild : m.lastChild], a && g) {
                                                            for (h = m, c = h[N] || (h[N] = {}), f = c[h.uniqueID] || (c[h.uniqueID] = {}), l = f[t] || [], d = l[0] === j && l[1], S = d && l[2], h = d && m.childNodes[d]; h = ++d && h && h[y] || (S = d = 0) || p.pop();) if (1 === h.nodeType && ++S && h === e) {
                                                                f[t] = [j, d, S];
                                                                break
                                                            }
                                                        } else if (g && (h = e, c = h[N] || (h[N] = {}), f = c[h.uniqueID] || (c[h.uniqueID] = {}), l = f[t] || [], d = l[0] === j && l[1], S = d), S === !1) for (;
                                                        (h = ++d && h && h[y] || (S = d = 0) || p.pop()) && ((s ? h.nodeName.toLowerCase() !== v : 1 !== h.nodeType) || !++S || (g && (c = h[N] || (h[N] = {}), f = c[h.uniqueID] || (c[h.uniqueID] = {}), f[t] = [j, S]), h !== e)););
                                                        return S -= r,
                                                        S === i || S % i === 0 && S / i >= 0
                                                    }
                                            }
                                    },
                                    PSEUDO: function (t, n) {
                                        var r, o = P.pseudos[t] || P.setFilters[t.toLowerCase()] || e.error("unsupported pseudo: " + t);
                                        return o[N] ? o(n) : o.length > 1 ? (r = [t, t, "", n], P.setFilters.hasOwnProperty(t.toLowerCase()) ? i(function (t, e) {
                                            for (var i, r = o(t, n), a = r.length; a--;) i = tt(t, r[a]),
                                            t[i] = !(e[i] = r[a])
                                        }) : function (t) {
                                            return o(t, 0, r)
                                        }) : o
                                    }
                                },
                                pseudos: {
                                    not: i(function (t) {
                                        var e = [],
                                            n = [],
                                            r = k(t.replace(st, "$1"));
                                        return r[N] ? i(function (t, e, n, i) {
                                                for (var o, a = r(t, null, i, []), s = t.length; s--;)(o = a[s]) && (t[s] = !(e[s] = o))
                                            }) : function (t, i, o) {
                                                return e[0] = t,
                                                r(e, null, o, n),
                                                e[0] = null,
                                                !n.pop()
                                            }
                                    }),
                                    has: i(function (t) {
                                        return function (n) {
                                            return e(t, n).length > 0
                                        }
                                    }),
                                    contains: i(function (t) {
                                        return t = t.replace(St, bt),
 
 
                                        function (e) {
                                            return (e.textContent || e.innerText || C(e)).indexOf(t) > -1
                                        }
                                    }),
                                    lang: i(function (t) {
                                        return ht.test(t || "") || e.error("unsupported lang: " + t),
                                        t = t.replace(St, bt).toLowerCase(),
 
 
                                        function (e) {
                                            var n;
                                            do
                                            if (n = F ? e.lang : e.getAttribute("xml:lang") || e.getAttribute("lang")) return n = n.toLowerCase(),
                                            n === t || 0 === n.indexOf(t + "-");
                                            while ((e = e.parentNode) && 1 === e.nodeType);
                                            return !1
                                        }
                                    }),
                                    target: function (e) {
                                        var n = t.location && t.location.hash;
                                        return n && n.slice(1) === e.id
                                    },
                                    root: function (t) {
                                        return t === A
                                    },
                                    focus: function (t) {
                                        return t === z.activeElement && (!z.hasFocus || z.hasFocus()) && !! (t.type || t.href || ~t.tabIndex)
                                    },
                                    enabled: l(!1),
                                    disabled: l(!0),
                                    checked: function (t) {
                                        var e = t.nodeName.toLowerCase();
                                        return "input" === e && !! t.checked || "option" === e && !! t.selected
                                    },
                                    selected: function (t) {
                                        return t.parentNode && t.parentNode.selectedIndex,
                                        t.selected === !0
                                    },
                                    empty: function (t) {
                                        for (t = t.firstChild; t; t = t.nextSibling) if (t.nodeType < 6) return !1;
                                        return !0
                                    },
                                    parent: function (t) {
                                        return !P.pseudos.empty(t)
                                    },
                                    header: function (t) {
                                        return yt.test(t.nodeName)
                                    },
                                    input: function (t) {
                                        return pt.test(t.nodeName)
                                    },
                                    button: function (t) {
                                        var e = t.nodeName.toLowerCase();
                                        return "input" === e && "button" === t.type || "button" === e
                                    },
                                    text: function (t) {
                                        var e;
                                        return "input" === t.nodeName.toLowerCase() && "text" === t.type && (null == (e = t.getAttribute("type")) || "text" === e.toLowerCase())
                                    },
                                    first: f(function () {
                                        return [0]
                                    }),
                                    last: f(function (t, e) {
                                        return [e - 1]
                                    }),
                                    eq: f(function (t, e, n) {
                                        return [n < 0 ? n + e : n]
                                    }),
                                    even: f(function (t, e) {
                                        for (var n = 0; n < e; n += 2) t.push(n);
                                        return t
                                    }),
                                    odd: f(function (t, e) {
                                        for (var n = 1; n < e; n += 2) t.push(n);
                                        return t
                                    }),
                                    lt: f(function (t, e, n) {
                                        for (var i = n < 0 ? n + e : n; --i >= 0;) t.push(i);
                                        return t
                                    }),
                                    gt: f(function (t, e, n) {
                                        for (var i = n < 0 ? n + e : n; ++i < e;) t.push(i);
                                        return t
                                    })
                                }
                            },
                        P.pseudos.nth = P.pseudos.eq;
                        for (w in {
                                radio: !0,
                                checkbox: !0,
                                file: !0,
                                password: !0,
                                image: !0
                            }) P.pseudos[w] = s(w);
                        for (w in {
                                submit: !0,
                                reset: !0
                            }) P.pseudos[w] = u(w);
                        return h.prototype = P.filters = P.pseudos,
                        P.setFilters = new h,
                        T = e.tokenize = function (t, n) {
                                var i, r, o, a, s, u, l, f = G[t + " "];
                                if (f) return n ? 0 : f.slice(0);
                                for (s = t, u = [], l = P.preFilter; s;) {
                                    i && !(r = ut.exec(s)) || (r && (s = s.slice(r[0].length) || s), u.push(o = [])),
                                    i = !1,
                                    (r = lt.exec(s)) && (i = r.shift(), o.push({
                                        value: i,
                                        type: r[0].replace(st, " ")
                                    }), s = s.slice(i.length));
                                    for (a in P.filter)!(r = dt[a].exec(s)) || l[a] && !(r = l[a](r)) || (i = r.shift(), o.push({
                                        value: i,
                                        type: a,
                                        matches: r
                                    }), s = s.slice(i.length));
                                    if (!i) break
                                }
                                return n ? s.length : s ? e.error(t) : G(t, u).slice(0)
                            },
                        k = e.compile = function (t, e) {
                                var n, i = [],
                                    r = [],
                                    o = V[t + " "];
                                if (!o) {
                                        for (e || (e = T(t)), n = e.length; n--;) o = S(e[n]),
                                        o[N] ? i.push(o) : r.push(o);
                                        o = V(t, b(r, i)),
                                        o.selector = t
                                    }
                                return o
                            },
                        D = e.select = function (t, e, n, i) {
                                var r, o, a, s, u, l = "function" == typeof t && t,
                                    f = !i && T(t = l.selector || t);
                                if (n = n || [], 1 === f.length) {
                                        if (o = f[0] = f[0].slice(0), o.length > 2 && "ID" === (a = o[0]).type && 9 === e.nodeType && F && P.relative[o[1].type]) {
                                            if (e = (P.find.ID(a.matches[0].replace(St, bt), e) || [])[0], !e) return n;
                                            l && (e = e.parentNode),
                                            t = t.slice(o.shift().value.length)
                                        }
                                        for (r = dt.needsContext.test(t) ? 0 : o.length; r-- && (a = o[r], !P.relative[s = a.type]);) if ((u = P.find[s]) && (i = u(a.matches[0].replace(St, bt), gt.test(o[0].type) && c(e.parentNode) || e))) {
                                            if (o.splice(r, 1), t = i.length && d(o), !t) return Z.apply(n, i),
                                            n;
                                            break
                                        }
                                    }
                                return (l || k(t, f))(i, e, !F, n, !e || gt.test(t) && c(e.parentNode) || e),
                                n
                            },
                        _.sortStable = N.split("").sort(Y).join("") === N,
                        _.detectDuplicates = !! E,
                        I(),
                        _.sortDetached = r(function (t) {
                                return 1 & t.compareDocumentPosition(z.createElement("fieldset"))
                            }),
                        r(function (t) {
                                return t.innerHTML = "<a href='#'></a>",
                                "#" === t.firstChild.getAttribute("href")
                            }) || o("type|href|height|width", function (t, e, n) {
                                if (!n) return t.getAttribute(e, "type" === e.toLowerCase() ? 1 : 2)
                            }),
                        _.attributes && r(function (t) {
                                return t.innerHTML = "<input/>",
                                t.firstChild.setAttribute("value", ""),
                                "" === t.firstChild.getAttribute("value")
                            }) || o("value", function (t, e, n) {
                                if (!n && "input" === t.nodeName.toLowerCase()) return t.defaultValue
                            }),
                        r(function (t) {
                                return null == t.getAttribute("disabled")
                            }) || o(et, function (t, e, n) {
                                var i;
                                if (!n) return t[e] === !0 ? e.toLowerCase() : (i = t.getAttributeNode(e)) && i.specified ? i.value : null
                            }),
                        e
                    }(o);
                bt.find = xt,
                bt.expr = xt.selectors,
                bt.expr[":"] = bt.expr.pseudos,
                bt.uniqueSort = bt.unique = xt.uniqueSort,
                bt.text = xt.getText,
                bt.isXMLDoc = xt.isXML,
                bt.contains = xt.contains,
                bt.escapeSelector = xt.escape;
                var Tt = function (t, e, n) {
                        for (var i = [], r = void 0 !== n;
                        (t = t[e]) && 9 !== t.nodeType;) if (1 === t.nodeType) {
                            if (r && bt(t).is(n)) break;
                            i.push(t)
                        }
                        return i
                    },
                    kt = function (t, e) {
                        for (var n = []; t; t = t.nextSibling) 1 === t.nodeType && t !== e && n.push(t);
                        return n
                    },
                    Dt = bt.expr.match.needsContext,
                    Mt = /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i,
                    Rt = /^.[^:#\[\.,]*$/;
                bt.filter = function (t, e, n) {
                        var i = e[0];
                        return n && (t = ":not(" + t + ")"),
                        1 === e.length && 1 === i.nodeType ? bt.find.matchesSelector(i, t) ? [i] : [] : bt.find.matches(t, bt.grep(e, function (t) {
                            return 1 === t.nodeType
                        }))
                    },
                bt.fn.extend({
                        find: function (t) {
                            var e, n, i = this.length,
                                r = this;
                            if ("string" != typeof t) return this.pushStack(bt(t).filter(function () {
                                    for (e = 0; e < i; e++) if (bt.contains(r[e], this)) return !0
                                }));
                            for (n = this.pushStack([]), e = 0; e < i; e++) bt.find(t, r[e], n);
                            return i > 1 ? bt.uniqueSort(n) : n
                        },
                        filter: function (t) {
                            return this.pushStack(f(this, t || [], !1))
                        },
                        not: function (t) {
                            return this.pushStack(f(this, t || [], !0))
                        },
                        is: function (t) {
                            return !!f(this, "string" == typeof t && Dt.test(t) ? bt(t) : t || [], !1).length
                        }
                    });
                var Et, It = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/,
                    zt = bt.fn.init = function (t, e, n) {
                        var i, r;
                        if (!t) return this;
                        if (n = n || Et, "string" == typeof t) {
                            if (i = "<" === t[0] && ">" === t[t.length - 1] && t.length >= 3 ? [null, t, null] : It.exec(t), !i || !i[1] && e) return !e || e.jquery ? (e || n).find(t) : this.constructor(e).find(t);
                            if (i[1]) {
                                if (e = e instanceof bt ? e[0] : e, bt.merge(this, bt.parseHTML(i[1], e && e.nodeType ? e.ownerDocument || e : st, !0)), Mt.test(i[1]) && bt.isPlainObject(e)) for (i in e) bt.isFunction(this[i]) ? this[i](e[i]) : this.attr(i, e[i]);
                                return this
                            }
                            return r = st.getElementById(i[2]),
                            r && (this[0] = r, this.length = 1),
                            this
                        }
                        return t.nodeType ? (this[0] = t, this.length = 1, this) : bt.isFunction(t) ? void 0 !== n.ready ? n.ready(t) : t(bt) : bt.makeArray(t, this)
                    };
                zt.prototype = bt.fn,
                Et = bt(st);
                var At = /^(?:parents|prev(?:Until|All))/,
                    Ft = {
                        children: !0,
                        contents: !0,
                        next: !0,
                        prev: !0
                    };
                bt.fn.extend({
                        has: function (t) {
                            var e = bt(t, this),
                                n = e.length;
                            return this.filter(function () {
                                    for (var t = 0; t < n; t++) if (bt.contains(this, e[t])) return !0
                                })
                        },
                        closest: function (t, e) {
                            var n, i = 0,
                                r = this.length,
                                o = [],
                                a = "string" != typeof t && bt(t);
                            if (!Dt.test(t)) for (; i < r; i++) for (n = this[i]; n && n !== e; n = n.parentNode) if (n.nodeType < 11 && (a ? a.index(n) > -1 : 1 === n.nodeType && bt.find.matchesSelector(n, t))) {
                                    o.push(n);
                                    break
                                }
                            return this.pushStack(o.length > 1 ? bt.uniqueSort(o) : o)
                        },
                        index: function (t) {
                            return t ? "string" == typeof t ? ht.call(bt(t), this[0]) : ht.call(this, t.jquery ? t[0] : t) : this[0] && this[0].parentNode ? this.first().prevAll().length : -1
                        },
                        add: function (t, e) {
                            return this.pushStack(bt.uniqueSort(bt.merge(this.get(), bt(t, e))))
                        },
                        addBack: function (t) {
                            return this.add(null == t ? this.prevObject : this.prevObject.filter(t))
                        }
                    }),
                bt.each({
                        parent: function t(e) {
                            var t = e.parentNode;
                            return t && 11 !== t.nodeType ? t : null
                        },
                        parents: function (t) {
                            return Tt(t, "parentNode")
                        },
                        parentsUntil: function (t, e, n) {
                            return Tt(t, "parentNode", n)
                        },
                        next: function (t) {
                            return c(t, "nextSibling")
                        },
                        prev: function (t) {
                            return c(t, "previousSibling")
                        },
                        nextAll: function (t) {
                            return Tt(t, "nextSibling")
                        },
                        prevAll: function (t) {
                            return Tt(t, "previousSibling")
                        },
                        nextUntil: function (t, e, n) {
                            return Tt(t, "nextSibling", n)
                        },
                        prevUntil: function (t, e, n) {
                            return Tt(t, "previousSibling", n)
                        },
                        siblings: function (t) {
                            return kt((t.parentNode || {}).firstChild, t)
                        },
                        children: function (t) {
                            return kt(t.firstChild)
                        },
                        contents: function (t) {
                            return l(t, "iframe") ? t.contentDocument : (l(t, "template") && (t = t.content || t), bt.merge([], t.childNodes))
                        }
                    }, function (t, e) {
                        bt.fn[t] = function (n, i) {
                            var r = bt.map(this, e, n);
                            return "Until" !== t.slice(-5) && (i = n),
                            i && "string" == typeof i && (r = bt.filter(i, r)),
                            this.length > 1 && (Ft[t] || bt.uniqueSort(r), At.test(t) && r.reverse()),
                            this.pushStack(r)
                        }
                    });
                var Ot = /[^\x20\t\r\n\f]+/g;
                bt.Callbacks = function (t) {
                        t = "string" == typeof t ? h(t) : bt.extend({}, t);
                        var e, n, i, r, o = [],
                            a = [],
                            s = -1,
                            u = function () {
                                for (r = r || t.once, i = e = !0; a.length; s = -1) for (n = a.shift(); ++s < o.length;) o[s].apply(n[0], n[1]) === !1 && t.stopOnFalse && (s = o.length, n = !1);
                                t.memory || (n = !1),
                                e = !1,
                                r && (o = n ? [] : "")
                            },
                            l = {
                                add: function () {
                                    return o && (n && !e && (s = o.length - 1, a.push(n)), function e(n) {
                                        bt.each(n, function (n, i) {
                                            bt.isFunction(i) ? t.unique && l.has(i) || o.push(i) : i && i.length && "string" !== bt.type(i) && e(i)
                                        })
                                    }(arguments), n && !e && u()),
                                    this
                                },
                                remove: function () {
                                    return bt.each(arguments, function (t, e) {
                                        for (var n;
                                        (n = bt.inArray(e, o, n)) > -1;) o.splice(n, 1),
                                        n <= s && s--
                                    }),
                                    this
                                },
                                has: function (t) {
                                    return t ? bt.inArray(t, o) > -1 : o.length > 0
                                },
                                empty: function () {
                                    return o && (o = []),
                                    this
                                },
                                disable: function () {
                                    return r = a = [],
                                    o = n = "",
                                    this
                                },
                                disabled: function () {
                                    return !o
                                },
                                lock: function () {
                                    return r = a = [],
                                    n || e || (o = n = ""),
                                    this
                                },
                                locked: function () {
                                    return !!r
                                },
                                fireWith: function (t, n) {
                                    return r || (n = n || [], n = [t, n.slice ? n.slice() : n], a.push(n), e || u()),
                                    this
                                },
                                fire: function () {
                                    return l.fireWith(this, arguments),
                                    this
                                },
                                fired: function () {
                                    return !!i
                                }
                            };
                        return l
                    },
                bt.extend({
                        Deferred: function (t) {
                            var e = [
                                ["notify", "progress", bt.Callbacks("memory"), bt.Callbacks("memory"), 2],
                                ["resolve", "done", bt.Callbacks("once memory"), bt.Callbacks("once memory"), 0, "resolved"],
                                ["reject", "fail", bt.Callbacks("once memory"), bt.Callbacks("once memory"), 1, "rejected"]
                            ],
                                i = "pending",
                                r = {
                                    state: function () {
                                        return i
                                    },
                                    always: function () {
                                        return a.done(arguments).fail(arguments),
                                        this
                                    },
                                    catch: function (t) {
                                        return r.then(null, t)
                                    },
                                    pipe: function () {
                                        var t = arguments;
                                        return bt.Deferred(function (n) {
                                            bt.each(e, function (e, i) {
                                                var r = bt.isFunction(t[i[4]]) && t[i[4]];
                                                a[i[1]](function () {
                                                    var t = r && r.apply(this, arguments);
                                                    t && bt.isFunction(t.promise) ? t.promise().progress(n.notify).done(n.resolve).fail(n.reject) : n[i[0] + "With"](this, r ? [t] : arguments)
                                                })
                                            }),
                                            t = null
                                        }).promise()
                                    },
                                    then: function (t, i, r) {
                                        function a(t, e, i, r) {
                                            return function () {
                                                var u = this,
                                                    l = arguments,
                                                    f = function () {
                                                        var o, f;
                                                        if (!(t < s)) {
                                                            if (o = i.apply(u, l), o === e.promise()) throw new TypeError("Thenable self-resolution");
                                                            f = o && ("object" === ("undefined" == typeof o ? "undefined" : n(o)) || "function" == typeof o) && o.then,
                                                            bt.isFunction(f) ? r ? f.call(o, a(s, e, d, r), a(s, e, p, r)) : (s++, f.call(o, a(s, e, d, r), a(s, e, p, r), a(s, e, d, e.notifyWith))) : (i !== d && (u = void 0, l = [o]), (r || e.resolveWith)(u, l))
                                                        }
                                                    },
                                                    c = r ? f : function () {
                                                        try {
                                                            f()
                                                        } catch (n) {
                                                            bt.Deferred.exceptionHook && bt.Deferred.exceptionHook(n, c.stackTrace),
                                                            t + 1 >= s && (i !== p && (u = void 0, l = [n]), e.rejectWith(u, l))
                                                        }
                                                    };
                                                t ? c() : (bt.Deferred.getStackHook && (c.stackTrace = bt.Deferred.getStackHook()), o.setTimeout(c))
                                            }
                                        }
                                        var s = 0;
                                        return bt.Deferred(function (n) {
                                            e[0][3].add(a(0, n, bt.isFunction(r) ? r : d, n.notifyWith)),
                                            e[1][3].add(a(0, n, bt.isFunction(t) ? t : d)),
                                            e[2][3].add(a(0, n, bt.isFunction(i) ? i : p))
                                        }).promise()
                                    },
                                    promise: function (t) {
                                        return null != t ? bt.extend(t, r) : r
                                    }
                                },
                                a = {};
                            return bt.each(e, function (t, n) {
                                    var o = n[2],
                                        s = n[5];
                                    r[n[1]] = o.add,
                                    s && o.add(function () {
                                            i = s
                                        }, e[3 - t][2].disable, e[0][2].lock),
                                    o.add(n[3].fire),
                                    a[n[0]] = function () {
                                            return a[n[0] + "With"](this === a ? void 0 : this, arguments),
                                            this
                                        },
                                    a[n[0] + "With"] = o.fireWith
                                }),
                            r.promise(a),
                            t && t.call(a, a),
                            a
                        },
                        when: function (t) {
                            var e = arguments.length,
                                n = e,
                                i = Array(n),
                                r = lt.call(arguments),
                                o = bt.Deferred(),
                                a = function (t) {
                                    return function (n) {
                                        i[t] = this,
                                        r[t] = arguments.length > 1 ? lt.call(arguments) : n,
                                        --e || o.resolveWith(i, r)
                                    }
                                };
                            if (e <= 1 && (y(t, o.done(a(n)).resolve, o.reject, !e), "pending" === o.state() || bt.isFunction(r[n] && r[n].then))) return o.then();
                            for (; n--;) y(r[n], a(n), o.reject);
                            return o.promise()
                        }
                    });
                var Bt = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;
                bt.Deferred.exceptionHook = function (t, e) {
                        o.console && o.console.warn && t && Bt.test(t.name) && o.console.warn("jQuery.Deferred exception: " + t.message, t.stack, e)
                    },
                bt.readyException = function (t) {
                        o.setTimeout(function () {
                            throw t
                        })
                    };
                var Lt = bt.Deferred();
                bt.fn.ready = function (t) {
                        return Lt.then(t).
                        catch (function (t) {
                            bt.readyException(t)
                        }),
                        this
                    },
                bt.extend({
                        isReady: !1,
                        readyWait: 1,
                        ready: function (t) {
                            (t === !0 ? --bt.readyWait : bt.isReady) || (bt.isReady = !0, t !== !0 && --bt.readyWait > 0 || Lt.resolveWith(st, [bt]))
                        }
                    }),
                bt.ready.then = Lt.then,
                "complete" === st.readyState || "loading" !== st.readyState && !st.documentElement.doScroll ? o.setTimeout(bt.ready) : (st.addEventListener("DOMContentLoaded", m), o.addEventListener("load", m));
                var qt = function t(e, n, i, r, o, a, s) {
                        var u = 0,
                            l = e.length,
                            f = null == i;
                        if ("object" === bt.type(i)) {
                                o = !0;
                                for (u in i) t(e, n, u, i[u], !0, a, s)
                            } else if (void 0 !== r && (o = !0, bt.isFunction(r) || (s = !0), f && (s ? (n.call(e, r), n = null) : (f = n, n = function (t, e, n) {
                                return f.call(bt(t), n)
                            })), n)) for (; u < l; u++) n(e[u], i, s ? r : r.call(e[u], u, n(e[u], i)));
                        return o ? e : f ? n.call(e) : l ? n(e[0], i) : a
                    },
                    Nt = function (t) {
                        return 1 === t.nodeType || 9 === t.nodeType || !+t.nodeType
                    };
                v.uid = 1,
                v.prototype = {
                        cache: function (t) {
                            var e = t[this.expando];
                            return e || (e = {}, Nt(t) && (t.nodeType ? t[this.expando] = e : Object.defineProperty(t, this.expando, {
                                value: e,
                                configurable: !0
                            }))),
                            e
                        },
                        set: function (t, e, n) {
                            var i, r = this.cache(t);
                            if ("string" == typeof e) r[bt.camelCase(e)] = n;
                            else for (i in e) r[bt.camelCase(i)] = e[i];
                            return r
                        },
                        get: function (t, e) {
                            return void 0 === e ? this.cache(t) : t[this.expando] && t[this.expando][bt.camelCase(e)]
                        },
                        access: function (t, e, n) {
                            return void 0 === e || e && "string" == typeof e && void 0 === n ? this.get(t, e) : (this.set(t, e, n), void 0 !== n ? n : e)
                        },
                        remove: function (t, e) {
                            var n, i = t[this.expando];
                            if (void 0 !== i) {
                                if (void 0 !== e) {
                                    Array.isArray(e) ? e = e.map(bt.camelCase) : (e = bt.camelCase(e), e = e in i ? [e] : e.match(Ot) || []),
                                    n = e.length;
                                    for (; n--;) delete i[e[n]]
                                }(void 0 === e || bt.isEmptyObject(i)) && (t.nodeType ? t[this.expando] = void 0 : delete t[this.expando])
                            }
                        },
                        hasData: function (t) {
                            var e = t[this.expando];
                            return void 0 !== e && !bt.isEmptyObject(e)
                        }
                    };
                var Ht = new v,
                    jt = new v,
                    Wt = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,
                    Ut = /[A-Z]/g;
                bt.extend({
                        hasData: function (t) {
                            return jt.hasData(t) || Ht.hasData(t)
                        },
                        data: function (t, e, n) {
                            return jt.access(t, e, n)
                        },
                        removeData: function (t, e) {
                            jt.remove(t, e)
                        },
                        _data: function (t, e, n) {
                            return Ht.access(t, e, n)
                        },
                        _removeData: function (t, e) {
                            Ht.remove(t, e)
                        }
                    }),
                bt.fn.extend({
                        data: function t(e, i) {
                            var r, o, t, a = this[0],
                                s = a && a.attributes;
                            if (void 0 === e) {
                                    if (this.length && (t = jt.get(a), 1 === a.nodeType && !Ht.get(a, "hasDataAttrs"))) {
                                        for (r = s.length; r--;) s[r] && (o = s[r].name, 0 === o.indexOf("data-") && (o = bt.camelCase(o.slice(5)), S(a, o, t[o])));
                                        Ht.set(a, "hasDataAttrs", !0)
                                    }
                                    return t
                                }
                            return "object" === ("undefined" == typeof e ? "undefined" : n(e)) ? this.each(function () {
                                    jt.set(this, e)
                                }) : qt(this, function (t) {
                                    var n;
                                    if (a && void 0 === t) {
                                        if (n = jt.get(a, e), void 0 !== n) return n;
                                        if (n = S(a, e), void 0 !== n) return n
                                    } else this.each(function () {
                                        jt.set(this, e, t)
                                    })
                                }, null, i, arguments.length > 1, null, !0)
                        },
                        removeData: function (t) {
                            return this.each(function () {
                                jt.remove(this, t)
                            })
                        }
                    }),
                bt.extend({
                        queue: function t(e, n, i) {
                            var t;
                            if (e) return n = (n || "fx") + "queue",
                            t = Ht.get(e, n),
                            i && (!t || Array.isArray(i) ? t = Ht.access(e, n, bt.makeArray(i)) : t.push(i)),
                            t || []
                        },
                        dequeue: function (t, e) {
                            e = e || "fx";
                            var n = bt.queue(t, e),
                                i = n.length,
                                r = n.shift(),
                                o = bt._queueHooks(t, e),
                                a = function () {
                                    bt.dequeue(t, e)
                                };
                            "inprogress" === r && (r = n.shift(), i--),
                            r && ("fx" === e && n.unshift("inprogress"), delete o.stop, r.call(t, a, o)),
                            !i && o && o.empty.fire()
                        },
                        _queueHooks: function (t, e) {
                            var n = e + "queueHooks";
                            return Ht.get(t, n) || Ht.access(t, n, {
                                empty: bt.Callbacks("once memory").add(function () {
                                    Ht.remove(t, [e + "queue", n])
                                })
                            })
                        }
                    }),
                bt.fn.extend({
                        queue: function (t, e) {
                            var n = 2;
                            return "string" != typeof t && (e = t, t = "fx", n--),
                            arguments.length < n ? bt.queue(this[0], t) : void 0 === e ? this : this.each(function () {
                                var n = bt.queue(this, t, e);
                                bt._queueHooks(this, t),
                                "fx" === t && "inprogress" !== n[0] && bt.dequeue(this, t)
                            })
                        },
                        dequeue: function (t) {
                            return this.each(function () {
                                bt.dequeue(this, t)
                            })
                        },
                        clearQueue: function (t) {
                            return this.queue(t || "fx", [])
                        },
                        promise: function (t, e) {
                            var n, i = 1,
                                r = bt.Deferred(),
                                o = this,
                                a = this.length,
                                s = function () {
                                    --i || r.resolveWith(o, [o])
                                };
                            for ("string" != typeof t && (e = t, t = void 0), t = t || "fx"; a--;) n = Ht.get(o[a], t + "queueHooks"),
                            n && n.empty && (i++, n.empty.add(s));
                            return s(),
                            r.promise(e)
                        }
                    });
                var Gt = /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,
                    Vt = new RegExp("^(?:([+-])=|)(" + Gt + ")([a-z%]*)$", "i"),
                    Yt = ["Top", "Right", "Bottom", "Left"],
                    Xt = function (t, e) {
                        return t = e || t,
                        "none" === t.style.display || "" === t.style.display && bt.contains(t.ownerDocument, t) && "none" === bt.css(t, "display")
                    },
                    Jt = function (t, e, n, i) {
                        var r, o, a = {};
                        for (o in e) a[o] = t.style[o],
                        t.style[o] = e[o];
                        r = n.apply(t, i || []);
                        for (o in e) t.style[o] = a[o];
                        return r
                    },
                    $t = {};
                bt.fn.extend({
                        show: function () {
                            return _(this, !0)
                        },
                        hide: function () {
                            return _(this)
                        },
                        toggle: function (t) {
                            return "boolean" == typeof t ? t ? this.show() : this.hide() : this.each(function () {
                                Xt(this) ? bt(this).show() : bt(this).hide()
                            })
                        }
                    });
                var Kt = /^(?:checkbox|radio)$/i,
                    Zt = /<([a-z][^\/\0>\x20\t\r\n\f]+)/i,
                    Qt = /^$|\/(?:java|ecma)script/i,
                    te = {
                        option: [1, "<select multiple='multiple'>", "</select>"],
                        thead: [1, "<table>", "</table>"],
                        col: [2, "<table><colgroup>", "</colgroup></table>"],
                        tr: [2, "<table><tbody>", "</tbody></table>"],
                        td: [3, "<table><tbody><tr>", "</tr></tbody></table>"],
                        _default: [0, "", ""]
                    };
                te.optgroup = te.option,
                te.tbody = te.tfoot = te.colgroup = te.caption = te.thead,
                te.th = te.td;
                var ee = /<|&#?\w+;/;
                !
                function () {
                        var t = st.createDocumentFragment(),
                            e = t.appendChild(st.createElement("div")),
                            n = st.createElement("input");
                        n.setAttribute("type", "radio"),
                        n.setAttribute("checked", "checked"),
                        n.setAttribute("name", "t"),
                        e.appendChild(n),
                        gt.checkClone = e.cloneNode(!0).cloneNode(!0).lastChild.checked,
                        e.innerHTML = "<textarea>x</textarea>",
                        gt.noCloneChecked = !! e.cloneNode(!0).lastChild.defaultValue
                    }();
                var ne = st.documentElement,
                    ie = /^key/,
                    re = /^(?:mouse|pointer|contextmenu|drag|drop)|click/,
                    oe = /^([^.]*)(?:\.(.+)|)/;
                bt.event = {
                        global: {},
                        add: function (t, e, n, i, r) {
                            var o, a, s, u, l, f, c, h, d, p, y, m = Ht.get(t);
                            if (m) for (n.handler && (o = n, n = o.handler, r = o.selector), r && bt.find.matchesSelector(ne, r), n.guid || (n.guid = bt.guid++), (u = m.events) || (u = m.events = {}), (a = m.handle) || (a = m.handle = function (e) {
                                return "undefined" != typeof bt && bt.event.triggered !== e.type ? bt.event.dispatch.apply(t, arguments) : void 0
                            }), e = (e || "").match(Ot) || [""], l = e.length; l--;) s = oe.exec(e[l]) || [],
                            d = y = s[1],
                            p = (s[2] || "").split(".").sort(),
                            d && (c = bt.event.special[d] || {}, d = (r ? c.delegateType : c.bindType) || d, c = bt.event.special[d] || {}, f = bt.extend({
                                type: d,
                                origType: y,
                                data: i,
                                handler: n,
                                guid: n.guid,
                                selector: r,
                                needsContext: r && bt.expr.match.needsContext.test(r),
                                namespace: p.join(".")
                            }, o), (h = u[d]) || (h = u[d] = [], h.delegateCount = 0, c.setup && c.setup.call(t, i, p, a) !== !1 || t.addEventListener && t.addEventListener(d, a)), c.add && (c.add.call(t, f), f.handler.guid || (f.handler.guid = n.guid)), r ? h.splice(h.delegateCount++, 0, f) : h.push(f), bt.event.global[d] = !0)
                        },
                        remove: function (t, e, n, i, r) {
                            var o, a, s, u, l, f, c, h, d, p, y, m = Ht.hasData(t) && Ht.get(t);
                            if (m && (u = m.events)) {
                                for (e = (e || "").match(Ot) || [""], l = e.length; l--;) if (s = oe.exec(e[l]) || [], d = y = s[1], p = (s[2] || "").split(".").sort(), d) {
                                    for (c = bt.event.special[d] || {}, d = (i ? c.delegateType : c.bindType) || d, h = u[d] || [], s = s[2] && new RegExp("(^|\\.)" + p.join("\\.(?:.*\\.|)") + "(\\.|$)"), a = o = h.length; o--;) f = h[o],
                                    !r && y !== f.origType || n && n.guid !== f.guid || s && !s.test(f.namespace) || i && i !== f.selector && ("**" !== i || !f.selector) || (h.splice(o, 1), f.selector && h.delegateCount--, c.remove && c.remove.call(t, f));
                                    a && !h.length && (c.teardown && c.teardown.call(t, p, m.handle) !== !1 || bt.removeEvent(t, d, m.handle), delete u[d])
                                } else for (d in u) bt.event.remove(t, d + e[l], n, i, !0);
                                bt.isEmptyObject(u) && Ht.remove(t, "handle events")
                            }
                        },
                        dispatch: function (t) {
                            var e, n, i, r, o, a, s = bt.event.fix(t),
                                u = new Array(arguments.length),
                                l = (Ht.get(this, "events") || {})[s.type] || [],
                                f = bt.event.special[s.type] || {};
                            for (u[0] = s, e = 1; e < arguments.length; e++) u[e] = arguments[e];
                            if (s.delegateTarget = this, !f.preDispatch || f.preDispatch.call(this, s) !== !1) {
                                    for (a = bt.event.handlers.call(this, s, l), e = 0;
                                    (r = a[e++]) && !s.isPropagationStopped();) for (s.currentTarget = r.elem, n = 0;
                                    (o = r.handlers[n++]) && !s.isImmediatePropagationStopped();) s.rnamespace && !s.rnamespace.test(o.namespace) || (s.handleObj = o, s.data = o.data, i = ((bt.event.special[o.origType] || {}).handle || o.handler).apply(r.elem, u), void 0 !== i && (s.result = i) === !1 && (s.preventDefault(), s.stopPropagation()));
                                    return f.postDispatch && f.postDispatch.call(this, s),
                                    s.result
                                }
                        },
                        handlers: function (t, e) {
                            var n, i, r, o, a, s = [],
                                u = e.delegateCount,
                                l = t.target;
                            if (u && l.nodeType && !("click" === t.type && t.button >= 1)) for (; l !== this; l = l.parentNode || this) if (1 === l.nodeType && ("click" !== t.type || l.disabled !== !0)) {
                                    for (o = [], a = {}, n = 0; n < u; n++) i = e[n],
                                    r = i.selector + " ",
                                    void 0 === a[r] && (a[r] = i.needsContext ? bt(r, this).index(l) > -1 : bt.find(r, this, null, [l]).length),
                                    a[r] && o.push(i);
                                    o.length && s.push({
                                        elem: l,
                                        handlers: o
                                    })
                                }
                            return l = this,
                            u < e.length && s.push({
                                    elem: l,
                                    handlers: e.slice(u)
                                }),
                            s
                        },
                        addProp: function (t, e) {
                            Object.defineProperty(bt.Event.prototype, t, {
                                enumerable: !0,
                                configurable: !0,
                                get: bt.isFunction(e) ?
                                function () {
                                    if (this.originalEvent) return e(this.originalEvent)
                                } : function () {
                                    if (this.originalEvent) return this.originalEvent[t]
                                },
                                set: function (e) {
                                    Object.defineProperty(this, t, {
                                        enumerable: !0,
                                        configurable: !0,
                                        writable: !0,
                                        value: e
                                    })
                                }
                            })
                        },
                        fix: function (t) {
                            return t[bt.expando] ? t : new bt.Event(t)
                        },
                        special: {
                            load: {
                                noBubble: !0
                            },
                            focus: {
                                trigger: function () {
                                    if (this !== D() && this.focus) return this.focus(),
                                    !1
                                },
                                delegateType: "focusin"
                            },
                            blur: {
                                trigger: function () {
                                    if (this === D() && this.blur) return this.blur(),
                                    !1
                                },
                                delegateType: "focusout"
                            },
                            click: {
                                trigger: function () {
                                    if ("checkbox" === this.type && this.click && l(this, "input")) return this.click(),
                                    !1
                                },
                                _default: function (t) {
                                    return l(t.target, "a")
                                }
                            },
                            beforeunload: {
                                postDispatch: function (t) {
                                    void 0 !== t.result && t.originalEvent && (t.originalEvent.returnValue = t.result)
                                }
                            }
                        }
                    },
                bt.removeEvent = function (t, e, n) {
                        t.removeEventListener && t.removeEventListener(e, n)
                    },
                bt.Event = function (t, e) {
                        return this instanceof bt.Event ? (t && t.type ? (this.originalEvent = t, this.type = t.type, this.isDefaultPrevented = t.defaultPrevented || void 0 === t.defaultPrevented && t.returnValue === !1 ? T : k, this.target = t.target && 3 === t.target.nodeType ? t.target.parentNode : t.target, this.currentTarget = t.currentTarget, this.relatedTarget = t.relatedTarget) : this.type = t, e && bt.extend(this, e), this.timeStamp = t && t.timeStamp || bt.now(), void(this[bt.expando] = !0)) : new bt.Event(t, e)
                    },
                bt.Event.prototype = {
                        constructor: bt.Event,
                        isDefaultPrevented: k,
                        isPropagationStopped: k,
                        isImmediatePropagationStopped: k,
                        isSimulated: !1,
                        preventDefault: function () {
                            var t = this.originalEvent;
                            this.isDefaultPrevented = T,
                            t && !this.isSimulated && t.preventDefault()
                        },
                        stopPropagation: function () {
                            var t = this.originalEvent;
                            this.isPropagationStopped = T,
                            t && !this.isSimulated && t.stopPropagation()
                        },
                        stopImmediatePropagation: function () {
                            var t = this.originalEvent;
                            this.isImmediatePropagationStopped = T,
                            t && !this.isSimulated && t.stopImmediatePropagation(),
                            this.stopPropagation()
                        }
                    },
                bt.each({
                        altKey: !0,
                        bubbles: !0,
                        cancelable: !0,
                        changedTouches: !0,
                        ctrlKey: !0,
                        detail: !0,
                        eventPhase: !0,
                        metaKey: !0,
                        pageX: !0,
                        pageY: !0,
                        shiftKey: !0,
                        view: !0,
                        char: !0,
                        charCode: !0,
                        key: !0,
                        keyCode: !0,
                        button: !0,
                        buttons: !0,
                        clientX: !0,
                        clientY: !0,
                        offsetX: !0,
                        offsetY: !0,
                        pointerId: !0,
                        pointerType: !0,
                        screenX: !0,
                        screenY: !0,
                        targetTouches: !0,
                        toElement: !0,
                        touches: !0,
                        which: function (t) {
                            var e = t.button;
                            return null == t.which && ie.test(t.type) ? null != t.charCode ? t.charCode : t.keyCode : !t.which && void 0 !== e && re.test(t.type) ? 1 & e ? 1 : 2 & e ? 3 : 4 & e ? 2 : 0 : t.which
                        }
                    }, bt.event.addProp),
                bt.each({
                        mouseenter: "mouseover",
                        mouseleave: "mouseout",
                        pointerenter: "pointerover",
                        pointerleave: "pointerout"
                    }, function (t, e) {
                        bt.event.special[t] = {
                            delegateType: e,
                            bindType: e,
                            handle: function (t) {
                                var n, i = this,
                                    r = t.relatedTarget,
                                    o = t.handleObj;
                                return r && (r === i || bt.contains(i, r)) || (t.type = o.origType, n = o.handler.apply(this, arguments), t.type = e),
                                n
                            }
                        }
                    }),
                bt.fn.extend({
                        on: function (t, e, n, i) {
                            return M(this, t, e, n, i)
                        },
                        one: function (t, e, n, i) {
                            return M(this, t, e, n, i, 1)
                        },
                        off: function (t, e, i) {
                            var r, o;
                            if (t && t.preventDefault && t.handleObj) return r = t.handleObj,
                            bt(t.delegateTarget).off(r.namespace ? r.origType + "." + r.namespace : r.origType, r.selector, r.handler),
                            this;
                            if ("object" === ("undefined" == typeof t ? "undefined" : n(t))) {
                                for (o in t) this.off(o, e, t[o]);
                                return this
                            }
                            return e !== !1 && "function" != typeof e || (i = e, e = void 0),
                            i === !1 && (i = k),
                            this.each(function () {
                                bt.event.remove(this, t, i, e)
                            })
                        }
                    });
                var ae = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\/\0>\x20\t\r\n\f]*)[^>]*)\/>/gi,
                    se = /<script|<style|<link/i,
                    ue = /checked\s*(?:[^=]|=\s*.checked.)/i,
                    le = /^true\/(.*)/,
                    fe = /^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g;
                bt.extend({
                        htmlPrefilter: function (t) {
                            return t.replace(ae, "<$1></$2>")
                        },
                        clone: function t(e, n, i) {
                            var r, o, a, s, t = e.cloneNode(!0),
                                u = bt.contains(e.ownerDocument, e);
                            if (!(gt.noCloneChecked || 1 !== e.nodeType && 11 !== e.nodeType || bt.isXMLDoc(e))) for (s = P(t), a = P(e), r = 0, o = a.length; r < o; r++) A(a[r], s[r]);
                            if (n) if (i) for (a = a || P(e), s = s || P(t), r = 0, o = a.length; r < o; r++) z(a[r], s[r]);
                            else z(e, t);
                            return s = P(t, "script"),
                            s.length > 0 && C(s, !u && P(e, "script")),
                            t
                        },
                        cleanData: function (t) {
                            for (var e, n, i, r = bt.event.special, o = 0; void 0 !== (n = t[o]); o++) if (Nt(n)) {
                                if (e = n[Ht.expando]) {
                                    if (e.events) for (i in e.events) r[i] ? bt.event.remove(n, i) : bt.removeEvent(n, i, e.handle);
                                    n[Ht.expando] = void 0
                                }
                                n[jt.expando] && (n[jt.expando] = void 0)
                            }
                        }
                    }),
                bt.fn.extend({
                        detach: function (t) {
                            return O(this, t, !0)
                        },
                        remove: function (t) {
                            return O(this, t)
                        },
                        text: function (t) {
                            return qt(this, function (t) {
                                return void 0 === t ? bt.text(this) : this.empty().each(function () {
                                    1 !== this.nodeType && 11 !== this.nodeType && 9 !== this.nodeType || (this.textContent = t)
                                })
                            }, null, t, arguments.length)
                        },
                        append: function () {
                            return F(this, arguments, function (t) {
                                if (1 === this.nodeType || 11 === this.nodeType || 9 === this.nodeType) {
                                    var e = R(this, t);
                                    e.appendChild(t)
                                }
                            })
                        },
                        prepend: function () {
                            return F(this, arguments, function (t) {
                                if (1 === this.nodeType || 11 === this.nodeType || 9 === this.nodeType) {
                                    var e = R(this, t);
                                    e.insertBefore(t, e.firstChild)
                                }
                            })
                        },
                        before: function () {
                            return F(this, arguments, function (t) {
                                this.parentNode && this.parentNode.insertBefore(t, this)
                            })
                        },
                        after: function () {
                            return F(this, arguments, function (t) {
                                this.parentNode && this.parentNode.insertBefore(t, this.nextSibling)
                            })
                        },
                        empty: function () {
                            for (var t, e = 0; null != (t = this[e]); e++) 1 === t.nodeType && (bt.cleanData(P(t, !1)), t.textContent = "");
                            return this
                        },
                        clone: function (t, e) {
                            return t = null != t && t,
                            e = null == e ? t : e,
                            this.map(function () {
                                return bt.clone(this, t, e)
                            })
                        },
                        html: function (t) {
                            return qt(this, function (t) {
                                var e = this[0] || {},
                                    n = 0,
                                    i = this.length;
                                if (void 0 === t && 1 === e.nodeType) return e.innerHTML;
                                if ("string" == typeof t && !se.test(t) && !te[(Zt.exec(t) || ["", ""])[1].toLowerCase()]) {
                                        t = bt.htmlPrefilter(t);
                                        try {
                                            for (; n < i; n++) e = this[n] || {},
                                            1 === e.nodeType && (bt.cleanData(P(e, !1)), e.innerHTML = t);
                                            e = 0
                                        } catch (t) {}
                                    }
                                e && this.empty().append(t)
                            }, null, t, arguments.length)
                        },
                        replaceWith: function () {
                            var t = [];
                            return F(this, arguments, function (e) {
                                var n = this.parentNode;
                                bt.inArray(this, t) < 0 && (bt.cleanData(P(this)), n && n.replaceChild(e, this))
                            }, t)
                        }
                    }),
                bt.each({
                        appendTo: "append",
                        prependTo: "prepend",
                        insertBefore: "before",
                        insertAfter: "after",
                        replaceAll: "replaceWith"
                    }, function (t, e) {
                        bt.fn[t] = function (t) {
                            for (var n, i = [], r = bt(t), o = r.length - 1, a = 0; a <= o; a++) n = a === o ? this : this.clone(!0),
                            bt(r[a])[e](n),
                            ct.apply(i, n.get());
                            return this.pushStack(i)
                        }
                    });
                var ce = /^margin/,
                    he = new RegExp("^(" + Gt + ")(?!px)[a-z%]+$", "i"),
                    de = function (t) {
                        var e = t.ownerDocument.defaultView;
                        return e && e.opener || (e = o),
                        e.getComputedStyle(t)
                    };
                !
                function () {
                        function t() {
                            if (s) {
                                s.style.cssText = "box-sizing:border-box;position:relative;display:block;margin:auto;border:1px;padding:1px;top:1%;width:50%",
                                s.innerHTML = "",
                                ne.appendChild(a);
                                var t = o.getComputedStyle(s);
                                e = "1%" !== t.top,
                                r = "2px" === t.marginLeft,
                                n = "4px" === t.width,
                                s.style.marginRight = "50%",
                                i = "4px" === t.marginRight,
                                ne.removeChild(a),
                                s = null
                            }
                        }
                        var e, n, i, r, a = st.createElement("div"),
                            s = st.createElement("div");
                        s.style && (s.style.backgroundClip = "content-box", s.cloneNode(!0).style.backgroundClip = "", gt.clearCloneStyle = "content-box" === s.style.backgroundClip, a.style.cssText = "border:0;width:8px;height:0;top:0;left:-9999px;padding:0;margin-top:1px;position:absolute", a.appendChild(s), bt.extend(gt, {
                                pixelPosition: function () {
                                    return t(),
                                    e
                                },
                                boxSizingReliable: function () {
                                    return t(),
                                    n
                                },
                                pixelMarginRight: function () {
                                    return t(),
                                    i
                                },
                                reliableMarginLeft: function () {
                                    return t(),
                                    r
                                }
                            }))
                    }();
                var pe = /^(none|table(?!-c[ea]).+)/,
                    ye = /^--/,
                    me = {
                        position: "absolute",
                        visibility: "hidden",
                        display: "block"
                    },
                    ve = {
                        letterSpacing: "0",
                        fontWeight: "400"
                    },
                    ge = ["Webkit", "Moz", "ms"],
                    Se = st.createElement("div").style;
                bt.extend({
                        cssHooks: {
                            opacity: {
                                get: function (t, e) {
                                    if (e) {
                                        var n = B(t, "opacity");
                                        return "" === n ? "1" : n
                                    }
                                }
                            }
                        },
                        cssNumber: {
                            animationIterationCount: !0,
                            columnCount: !0,
                            fillOpacity: !0,
                            flexGrow: !0,
                            flexShrink: !0,
                            fontWeight: !0,
                            lineHeight: !0,
                            opacity: !0,
                            order: !0,
                            orphans: !0,
                            widows: !0,
                            zIndex: !0,
                            zoom: !0
                        },
                        cssProps: {
                            float: "cssFloat"
                        },
                        style: function t(e, i, r, o) {
                            if (e && 3 !== e.nodeType && 8 !== e.nodeType && e.style) {
                                var a, s, u, l = bt.camelCase(i),
                                    f = ye.test(i),
                                    t = e.style;
                                return f || (i = N(l)),
                                u = bt.cssHooks[i] || bt.cssHooks[l],
                                void 0 === r ? u && "get" in u && void 0 !== (a = u.get(e, !1, o)) ? a : t[i] : (s = "undefined" == typeof r ? "undefined" : n(r), "string" === s && (a = Vt.exec(r)) && a[1] && (r = b(e, i, a), s = "number"), null != r && r === r && ("number" === s && (r += a && a[3] || (bt.cssNumber[l] ? "" : "px")), gt.clearCloneStyle || "" !== r || 0 !== i.indexOf("background") || (t[i] = "inherit"), u && "set" in u && void 0 === (r = u.set(e, r, o)) || (f ? t.setProperty(i, r) : t[i] = r)), void 0)
                            }
                        },
                        css: function (t, e, n, i) {
                            var r, o, a, s = bt.camelCase(e),
                                u = ye.test(e);
                            return u || (e = N(s)),
                            a = bt.cssHooks[e] || bt.cssHooks[s],
                            a && "get" in a && (r = a.get(t, !0, n)),
                            void 0 === r && (r = B(t, e, i)),
                            "normal" === r && e in ve && (r = ve[e]),
                            "" === n || n ? (o = parseFloat(r), n === !0 || isFinite(o) ? o || 0 : r) : r
                        }
                    }),
                bt.each(["height", "width"], function (t, e) {
                        bt.cssHooks[e] = {
                            get: function (t, n, i) {
                                if (n) return !pe.test(bt.css(t, "display")) || t.getClientRects().length && t.getBoundingClientRect().width ? W(t, e, i) : Jt(t, me, function () {
                                    return W(t, e, i)
                                })
                            },
                            set: function (t, n, i) {
                                var r, o = i && de(t),
                                    a = i && j(t, e, i, "border-box" === bt.css(t, "boxSizing", !1, o), o);
                                return a && (r = Vt.exec(n)) && "px" !== (r[3] || "px") && (t.style[e] = n, n = bt.css(t, e)),
                                H(t, n, a)
                            }
                        }
                    }),
                bt.cssHooks.marginLeft = L(gt.reliableMarginLeft, function (t, e) {
                        if (e) return (parseFloat(B(t, "marginLeft")) || t.getBoundingClientRect().left - Jt(t, {
                            marginLeft: 0
                        }, function () {
                            return t.getBoundingClientRect().left
                        })) + "px"
                    }),
                bt.each({
                        margin: "",
                        padding: "",
                        border: "Width"
                    }, function (t, e) {
                        bt.cssHooks[t + e] = {
                            expand: function (n) {
                                for (var i = 0, r = {}, o = "string" == typeof n ? n.split(" ") : [n]; i < 4; i++) r[t + Yt[i] + e] = o[i] || o[i - 2] || o[0];
                                return r
                            }
                        },
                        ce.test(t) || (bt.cssHooks[t + e].set = H)
                    }),
                bt.fn.extend({
                        css: function (t, e) {
                            return qt(this, function (t, e, n) {
                                var i, r, o = {},
                                    a = 0;
                                if (Array.isArray(e)) {
                                        for (i = de(t), r = e.length; a < r; a++) o[e[a]] = bt.css(t, e[a], !1, i);
                                        return o
                                    }
                                return void 0 !== n ? bt.style(t, e, n) : bt.css(t, e)
                            }, t, e, arguments.length > 1)
                        }
                    }),
                bt.Tween = U,
                U.prototype = {
                        constructor: U,
                        init: function (t, e, n, i, r, o) {
                            this.elem = t,
                            this.prop = n,
                            this.easing = r || bt.easing._default,
                            this.options = e,
                            this.start = this.now = this.cur(),
                            this.end = i,
                            this.unit = o || (bt.cssNumber[n] ? "" : "px")
                        },
                        cur: function () {
                            var t = U.propHooks[this.prop];
                            return t && t.get ? t.get(this) : U.propHooks._default.get(this)
                        },
                        run: function (t) {
                            var e, n = U.propHooks[this.prop];
                            return this.options.duration ? this.pos = e = bt.easing[this.easing](t, this.options.duration * t, 0, 1, this.options.duration) : this.pos = e = t,
                            this.now = (this.end - this.start) * e + this.start,
                            this.options.step && this.options.step.call(this.elem, this.now, this),
                            n && n.set ? n.set(this) : U.propHooks._default.set(this),
                            this
                        }
                    },
                U.prototype.init.prototype = U.prototype,
                U.propHooks = {
                        _default: {
                            get: function (t) {
                                var e;
                                return 1 !== t.elem.nodeType || null != t.elem[t.prop] && null == t.elem.style[t.prop] ? t.elem[t.prop] : (e = bt.css(t.elem, t.prop, ""), e && "auto" !== e ? e : 0)
                            },
                            set: function (t) {
                                bt.fx.step[t.prop] ? bt.fx.step[t.prop](t) : 1 !== t.elem.nodeType || null == t.elem.style[bt.cssProps[t.prop]] && !bt.cssHooks[t.prop] ? t.elem[t.prop] = t.now : bt.style(t.elem, t.prop, t.now + t.unit)
                            }
                        }
                    },
                U.propHooks.scrollTop = U.propHooks.scrollLeft = {
                        set: function (t) {
                            t.elem.nodeType && t.elem.parentNode && (t.elem[t.prop] = t.now)
                        }
                    },
                bt.easing = {
                        linear: function (t) {
                            return t
                        },
                        swing: function (t) {
                            return.5 - Math.cos(t * Math.PI) / 2
                        },
                        _default: "swing"
                    },
                bt.fx = U.prototype.init,
                bt.fx.step = {};
                var be, we, _e = /^(?:toggle|show|hide)$/,
                    Pe = /queueHooks$/;
                bt.Animation = bt.extend(K, {
                        tweeners: {
                            "*": [function (t, e) {
                                var n = this.createTween(t, e);
                                return b(n.elem, t, Vt.exec(e), n),
                                n
                            }]
                        },
                        tweener: function (t, e) {
                            bt.isFunction(t) ? (e = t, t = ["*"]) : t = t.match(Ot);
                            for (var n, i = 0, r = t.length; i < r; i++) n = t[i],
                            K.tweeners[n] = K.tweeners[n] || [],
                            K.tweeners[n].unshift(e)
                        },
                        prefilters: [J],
                        prefilter: function (t, e) {
                            e ? K.prefilters.unshift(t) : K.prefilters.push(t)
                        }
                    }),
                bt.speed = function (t, e, i) {
                        var r = t && "object" === ("undefined" == typeof t ? "undefined" : n(t)) ? bt.extend({}, t) : {
                            complete: i || !i && e || bt.isFunction(t) && t,
                            duration: t,
                            easing: i && e || e && !bt.isFunction(e) && e
                        };
                        return bt.fx.off ? r.duration = 0 : "number" != typeof r.duration && (r.duration in bt.fx.speeds ? r.duration = bt.fx.speeds[r.duration] : r.duration = bt.fx.speeds._default),
                        null != r.queue && r.queue !== !0 || (r.queue = "fx"),
                        r.old = r.complete,
                        r.complete = function () {
                            bt.isFunction(r.old) && r.old.call(this),
                            r.queue && bt.dequeue(this, r.queue)
                        },
                        r
                    },
                bt.fn.extend({
                        fadeTo: function (t, e, n, i) {
                            return this.filter(Xt).css("opacity", 0).show().end().animate({
                                opacity: e
                            }, t, n, i)
                        },
                        animate: function (t, e, n, i) {
                            var r = bt.isEmptyObject(t),
                                o = bt.speed(e, n, i),
                                a = function () {
                                    var e = K(this, bt.extend({}, t), o);
                                    (r || Ht.get(this, "finish")) && e.stop(!0)
                                };
                            return a.finish = a,
                            r || o.queue === !1 ? this.each(a) : this.queue(o.queue, a)
                        },
                        stop: function (t, e, n) {
                            var i = function (t) {
                                var e = t.stop;
                                delete t.stop,
                                e(n)
                            };
                            return "string" != typeof t && (n = e, e = t, t = void 0),
                            e && t !== !1 && this.queue(t || "fx", []),
                            this.each(function () {
                                var e = !0,
                                    r = null != t && t + "queueHooks",
                                    o = bt.timers,
                                    a = Ht.get(this);
                                if (r) a[r] && a[r].stop && i(a[r]);
                                else for (r in a) a[r] && a[r].stop && Pe.test(r) && i(a[r]);
                                for (r = o.length; r--;) o[r].elem !== this || null != t && o[r].queue !== t || (o[r].anim.stop(n), e = !1, o.splice(r, 1));
                                !e && n || bt.dequeue(this, t)
                            })
                        },
                        finish: function (t) {
                            return t !== !1 && (t = t || "fx"),
                            this.each(function () {
                                var e, n = Ht.get(this),
                                    i = n[t + "queue"],
                                    r = n[t + "queueHooks"],
                                    o = bt.timers,
                                    a = i ? i.length : 0;
                                for (n.finish = !0, bt.queue(this, t, []), r && r.stop && r.stop.call(this, !0), e = o.length; e--;) o[e].elem === this && o[e].queue === t && (o[e].anim.stop(!0), o.splice(e, 1));
                                for (e = 0; e < a; e++) i[e] && i[e].finish && i[e].finish.call(this);
                                delete n.finish
                            })
                        }
                    }),
                bt.each(["toggle", "show", "hide"], function (t, e) {
                        var n = bt.fn[e];
                        bt.fn[e] = function (t, i, r) {
                            return null == t || "boolean" == typeof t ? n.apply(this, arguments) : this.animate(Y(e, !0), t, i, r)
                        }
                    }),
                bt.each({
                        slideDown: Y("show"),
                        slideUp: Y("hide"),
                        slideToggle: Y("toggle"),
                        fadeIn: {
                            opacity: "show"
                        },
                        fadeOut: {
                            opacity: "hide"
                        },
                        fadeToggle: {
                            opacity: "toggle"
                        }
                    }, function (t, e) {
                        bt.fn[t] = function (t, n, i) {
                            return this.animate(e, t, n, i)
                        }
                    }),
                bt.timers = [],
                bt.fx.tick = function () {
                        var t, e = 0,
                            n = bt.timers;
                        for (be = bt.now(); e < n.length; e++) t = n[e],
                        t() || n[e] !== t || n.splice(e--, 1);
                        n.length || bt.fx.stop(),
                        be = void 0
                    },
                bt.fx.timer = function (t) {
                        bt.timers.push(t),
                        bt.fx.start()
                    },
                bt.fx.interval = 13,
                bt.fx.start = function () {
                        we || (we = !0, G())
                    },
                bt.fx.stop = function () {
                        we = null
                    },
                bt.fx.speeds = {
                        slow: 600,
                        fast: 200,
                        _default: 400
                    },
                bt.fn.delay = function (t, e) {
                        return t = bt.fx ? bt.fx.speeds[t] || t : t,
                        e = e || "fx",
                        this.queue(e, function (e, n) {
                            var i = o.setTimeout(e, t);
                            n.stop = function () {
                                o.clearTimeout(i)
                            }
                        })
                    },
 
 
                function () {
                        var t = st.createElement("input"),
                            e = st.createElement("select"),
                            n = e.appendChild(st.createElement("option"));
                        t.type = "checkbox",
                        gt.checkOn = "" !== t.value,
                        gt.optSelected = n.selected,
                        t = st.createElement("input"),
                        t.value = "t",
                        t.type = "radio",
                        gt.radioValue = "t" === t.value
                    }();
                var Ce, xe = bt.expr.attrHandle;
                bt.fn.extend({
                        attr: function (t, e) {
                            return qt(this, bt.attr, t, e, arguments.length > 1)
                        },
                        removeAttr: function (t) {
                            return this.each(function () {
                                bt.removeAttr(this, t)
                            })
                        }
                    }),
                bt.extend({
                        attr: function (t, e, n) {
                            var i, r, o = t.nodeType;
                            if (3 !== o && 8 !== o && 2 !== o) return "undefined" == typeof t.getAttribute ? bt.prop(t, e, n) : (1 === o && bt.isXMLDoc(t) || (r = bt.attrHooks[e.toLowerCase()] || (bt.expr.match.bool.test(e) ? Ce : void 0)), void 0 !== n ? null === n ? void bt.removeAttr(t, e) : r && "set" in r && void 0 !== (i = r.set(t, n, e)) ? i : (t.setAttribute(e, n + ""), n) : r && "get" in r && null !== (i = r.get(t, e)) ? i : (i = bt.find.attr(t, e), null == i ? void 0 : i))
                        },
                        attrHooks: {
                            type: {
                                set: function (t, e) {
                                    if (!gt.radioValue && "radio" === e && l(t, "input")) {
                                        var n = t.value;
                                        return t.setAttribute("type", e),
                                        n && (t.value = n),
                                        e
                                    }
                                }
                            }
                        },
                        removeAttr: function (t, e) {
                            var n, i = 0,
                                r = e && e.match(Ot);
                            if (r && 1 === t.nodeType) for (; n = r[i++];) t.removeAttribute(n)
                        }
                    }),
                Ce = {
                        set: function (t, e, n) {
                            return e === !1 ? bt.removeAttr(t, n) : t.setAttribute(n, n),
                            n
                        }
                    },
                bt.each(bt.expr.match.bool.source.match(/\w+/g), function (t, e) {
                        var n = xe[e] || bt.find.attr;
                        xe[e] = function (t, e, i) {
                            var r, o, a = e.toLowerCase();
                            return i || (o = xe[a], xe[a] = r, r = null != n(t, e, i) ? a : null, xe[a] = o),
                            r
                        }
                    });
                var Te = /^(?:input|select|textarea|button)$/i,
                    ke = /^(?:a|area)$/i;
                bt.fn.extend({
                        prop: function (t, e) {
                            return qt(this, bt.prop, t, e, arguments.length > 1)
                        },
                        removeProp: function (t) {
                            return this.each(function () {
                                delete this[bt.propFix[t] || t]
                            })
                        }
                    }),
                bt.extend({
                        prop: function (t, e, n) {
                            var i, r, o = t.nodeType;
                            if (3 !== o && 8 !== o && 2 !== o) return 1 === o && bt.isXMLDoc(t) || (e = bt.propFix[e] || e, r = bt.propHooks[e]),
                            void 0 !== n ? r && "set" in r && void 0 !== (i = r.set(t, n, e)) ? i : t[e] = n : r && "get" in r && null !== (i = r.get(t, e)) ? i : t[e]
                        },
                        propHooks: {
                            tabIndex: {
                                get: function (t) {
                                    var e = bt.find.attr(t, "tabindex");
                                    return e ? parseInt(e, 10) : Te.test(t.nodeName) || ke.test(t.nodeName) && t.href ? 0 : -1
                                }
                            }
                        },
                        propFix: {
                            for: "htmlFor",
                            class: "className"
                        }
                    }),
                gt.optSelected || (bt.propHooks.selected = {
                        get: function (t) {
                            var e = t.parentNode;
                            return e && e.parentNode && e.parentNode.selectedIndex,
                            null
                        },
                        set: function (t) {
                            var e = t.parentNode;
                            e && (e.selectedIndex, e.parentNode && e.parentNode.selectedIndex)
                        }
                    }),
                bt.each(["tabIndex", "readOnly", "maxLength", "cellSpacing", "cellPadding", "rowSpan", "colSpan", "useMap", "frameBorder", "contentEditable"], function () {
                        bt.propFix[this.toLowerCase()] = this
                    }),
                bt.fn.extend({
                        addClass: function (t) {
                            var e, n, i, r, o, a, s, u = 0;
                            if (bt.isFunction(t)) return this.each(function (e) {
                                bt(this).addClass(t.call(this, e, Q(this)))
                            });
                            if ("string" == typeof t && t) for (e = t.match(Ot) || []; n = this[u++];) if (r = Q(n), i = 1 === n.nodeType && " " + Z(r) + " ") {
                                for (a = 0; o = e[a++];) i.indexOf(" " + o + " ") < 0 && (i += o + " ");
                                s = Z(i),
                                r !== s && n.setAttribute("class", s)
                            }
                            return this
                        },
                        removeClass: function (t) {
                            var e, n, i, r, o, a, s, u = 0;
                            if (bt.isFunction(t)) return this.each(function (e) {
                                bt(this).removeClass(t.call(this, e, Q(this)))
                            });
                            if (!arguments.length) return this.attr("class", "");
                            if ("string" == typeof t && t) for (e = t.match(Ot) || []; n = this[u++];) if (r = Q(n), i = 1 === n.nodeType && " " + Z(r) + " ") {
                                for (a = 0; o = e[a++];) for (; i.indexOf(" " + o + " ") > -1;) i = i.replace(" " + o + " ", " ");
                                s = Z(i),
                                r !== s && n.setAttribute("class", s)
                            }
                            return this
                        },
                        toggleClass: function (t, e) {
                            var i = "undefined" == typeof t ? "undefined" : n(t);
                            return "boolean" == typeof e && "string" === i ? e ? this.addClass(t) : this.removeClass(t) : bt.isFunction(t) ? this.each(function (n) {
                                bt(this).toggleClass(t.call(this, n, Q(this), e), e)
                            }) : this.each(function () {
                                var e, n, r, o;
                                if ("string" === i) for (n = 0, r = bt(this), o = t.match(Ot) || []; e = o[n++];) r.hasClass(e) ? r.removeClass(e) : r.addClass(e);
                                else void 0 !== t && "boolean" !== i || (e = Q(this), e && Ht.set(this, "__className__", e), this.setAttribute && this.setAttribute("class", e || t === !1 ? "" : Ht.get(this, "__className__") || ""))
                            })
                        },
                        hasClass: function (t) {
                            var e, n, i = 0;
                            for (e = " " + t + " "; n = this[i++];) if (1 === n.nodeType && (" " + Z(Q(n)) + " ").indexOf(e) > -1) return !0;
                            return !1
                        }
                    });
                var De = /\r/g;
                bt.fn.extend({
                        val: function (t) {
                            var e, n, i, r = this[0]; {
                                if (arguments.length) return i = bt.isFunction(t),
                                this.each(function (n) {
                                    var r;
                                    1 === this.nodeType && (r = i ? t.call(this, n, bt(this).val()) : t, null == r ? r = "" : "number" == typeof r ? r += "" : Array.isArray(r) && (r = bt.map(r, function (t) {
                                        return null == t ? "" : t + ""
                                    })), e = bt.valHooks[this.type] || bt.valHooks[this.nodeName.toLowerCase()], e && "set" in e && void 0 !== e.set(this, r, "value") || (this.value = r))
                                });
                                if (r) return e = bt.valHooks[r.type] || bt.valHooks[r.nodeName.toLowerCase()],
                                e && "get" in e && void 0 !== (n = e.get(r, "value")) ? n : (n = r.value, "string" == typeof n ? n.replace(De, "") : null == n ? "" : n)
                            }
                        }
                    }),
                bt.extend({
                        valHooks: {
                            option: {
                                get: function (t) {
                                    var e = bt.find.attr(t, "value");
                                    return null != e ? e : Z(bt.text(t))
                                }
                            },
                            select: {
                                get: function (t) {
                                    var e, n, i, r = t.options,
                                        o = t.selectedIndex,
                                        a = "select-one" === t.type,
                                        s = a ? null : [],
                                        u = a ? o + 1 : r.length;
                                    for (i = o < 0 ? u : a ? o : 0; i < u; i++) if (n = r[i], (n.selected || i === o) && !n.disabled && (!n.parentNode.disabled || !l(n.parentNode, "optgroup"))) {
                                            if (e = bt(n).val(), a) return e;
                                            s.push(e)
                                        }
                                    return s
                                },
                                set: function (t, e) {
                                    for (var n, i, r = t.options, o = bt.makeArray(e), a = r.length; a--;) i = r[a],
                                    (i.selected = bt.inArray(bt.valHooks.option.get(i), o) > -1) && (n = !0);
                                    return n || (t.selectedIndex = -1),
                                    o
                                }
                            }
                        }
                    }),
                bt.each(["radio", "checkbox"], function () {
                        bt.valHooks[this] = {
                            set: function (t, e) {
                                if (Array.isArray(e)) return t.checked = bt.inArray(bt(t).val(), e) > -1
                            }
                        },
                        gt.checkOn || (bt.valHooks[this].get = function (t) {
                            return null === t.getAttribute("value") ? "on" : t.value
                        })
                    });
                var Me = /^(?:focusinfocus|focusoutblur)$/;
                bt.extend(bt.event, {
                        trigger: function (t, e, i, r) {
                            var a, s, u, l, f, c, h, d = [i || st],
                                p = yt.call(t, "type") ? t.type : t,
                                y = yt.call(t, "namespace") ? t.namespace.split(".") : [];
                            if (s = u = i = i || st, 3 !== i.nodeType && 8 !== i.nodeType && !Me.test(p + bt.event.triggered) && (p.indexOf(".") > -1 && (y = p.split("."), p = y.shift(), y.sort()), f = p.indexOf(":") < 0 && "on" + p, t = t[bt.expando] ? t : new bt.Event(p, "object" === ("undefined" == typeof t ? "undefined" : n(t)) && t), t.isTrigger = r ? 2 : 3, t.namespace = y.join("."), t.rnamespace = t.namespace ? new RegExp("(^|\\.)" + y.join("\\.(?:.*\\.|)") + "(\\.|$)") : null, t.result = void 0, t.target || (t.target = i), e = null == e ? [t] : bt.makeArray(e, [t]), h = bt.event.special[p] || {}, r || !h.trigger || h.trigger.apply(i, e) !== !1)) {
                                    if (!r && !h.noBubble && !bt.isWindow(i)) {
                                        for (l = h.delegateType || p, Me.test(l + p) || (s = s.parentNode); s; s = s.parentNode) d.push(s),
                                        u = s;
                                        u === (i.ownerDocument || st) && d.push(u.defaultView || u.parentWindow || o)
                                    }
                                    for (a = 0;
                                    (s = d[a++]) && !t.isPropagationStopped();) t.type = a > 1 ? l : h.bindType || p,
                                    c = (Ht.get(s, "events") || {})[t.type] && Ht.get(s, "handle"),
                                    c && c.apply(s, e),
                                    c = f && s[f],
                                    c && c.apply && Nt(s) && (t.result = c.apply(s, e), t.result === !1 && t.preventDefault());
                                    return t.type = p,
                                    r || t.isDefaultPrevented() || h._default && h._default.apply(d.pop(), e) !== !1 || !Nt(i) || f && bt.isFunction(i[p]) && !bt.isWindow(i) && (u = i[f], u && (i[f] = null), bt.event.triggered = p, i[p](), bt.event.triggered = void 0, u && (i[f] = u)),
                                    t.result
                                }
                        },
                        simulate: function (t, e, n) {
                            var i = bt.extend(new bt.Event, n, {
                                type: t,
                                isSimulated: !0
                            });
                            bt.event.trigger(i, null, e)
                        }
                    }),
                bt.fn.extend({
                        trigger: function (t, e) {
                            return this.each(function () {
                                bt.event.trigger(t, e, this)
                            })
                        },
                        triggerHandler: function (t, e) {
                            var n = this[0];
                            if (n) return bt.event.trigger(t, e, n, !0)
                        }
                    }),
                bt.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "), function (t, e) {
                        bt.fn[e] = function (t, n) {
                            return arguments.length > 0 ? this.on(e, null, t, n) : this.trigger(e)
                        }
                    }),
                bt.fn.extend({
                        hover: function (t, e) {
                            return this.mouseenter(t).mouseleave(e || t)
                        }
                    }),
                gt.focusin = "onfocusin" in o,
                gt.focusin || bt.each({
                        focus: "focusin",
                        blur: "focusout"
                    }, function (t, e) {
                        var n = function (t) {
                            bt.event.simulate(e, t.target, bt.event.fix(t))
                        };
                        bt.event.special[e] = {
                            setup: function () {
                                var i = this.ownerDocument || this,
                                    r = Ht.access(i, e);
                                r || i.addEventListener(t, n, !0),
                                Ht.access(i, e, (r || 0) + 1)
                            },
                            teardown: function () {
                                var i = this.ownerDocument || this,
                                    r = Ht.access(i, e) - 1;
                                r ? Ht.access(i, e, r) : (i.removeEventListener(t, n, !0), Ht.remove(i, e))
                            }
                        }
                    });
                var Re = o.location,
                    Ee = bt.now(),
                    Ie = /\?/;
                bt.parseXML = function (t) {
                        var e;
                        if (!t || "string" != typeof t) return null;
                        try {
                            e = (new o.DOMParser).parseFromString(t, "text/xml")
                        } catch (t) {
                            e = void 0
                        }
                        return e && !e.getElementsByTagName("parsererror").length || bt.error("Invalid XML: " + t),
                        e
                    };
                var ze = /\[\]$/,
                    Ae = /\r?\n/g,
                    Fe = /^(?:submit|button|image|reset|file)$/i,
                    Oe = /^(?:input|select|textarea|keygen)/i;
                bt.param = function (t, e) {
                        var n, i = [],
                            r = function (t, e) {
                                var n = bt.isFunction(e) ? e() : e;
                                i[i.length] = encodeURIComponent(t) + "=" + encodeURIComponent(null == n ? "" : n)
                            };
                        if (Array.isArray(t) || t.jquery && !bt.isPlainObject(t)) bt.each(t, function () {
                                r(this.name, this.value)
                            });
                        else for (n in t) tt(n, t[n], e, r);
                        return i.join("&")
                    },
                bt.fn.extend({
                        serialize: function () {
                            return bt.param(this.serializeArray())
                        },
                        serializeArray: function () {
                            return this.map(function () {
                                var t = bt.prop(this, "elements");
                                return t ? bt.makeArray(t) : this
                            }).filter(function () {
                                var t = this.type;
                                return this.name && !bt(this).is(":disabled") && Oe.test(this.nodeName) && !Fe.test(t) && (this.checked || !Kt.test(t))
                            }).map(function (t, e) {
                                var n = bt(this).val();
                                return null == n ? null : Array.isArray(n) ? bt.map(n, function (t) {
                                    return {
                                        name: e.name,
                                        value: t.replace(Ae, "\r\n")
                                    }
                                }) : {
                                    name: e.name,
                                    value: n.replace(Ae, "\r\n")
                                }
                            }).get()
                        }
                    });
                var Be = /%20/g,
                    Le = /#.*$/,
                    qe = /([?&])_=[^&]*/,
                    Ne = /^(.*?):[ \t]*([^\r\n]*)$/gm,
                    He = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,
                    je = /^(?:GET|HEAD)$/,
                    We = /^\/\//,
                    Ue = {},
                    Ge = {},
                    Ve = "*/".concat("*"),
                    Ye = st.createElement("a");
                Ye.href = Re.href,
                bt.extend({
                        active: 0,
                        lastModified: {},
                        etag: {},
                        ajaxSettings: {
                            url: Re.href,
                            type: "GET",
                            isLocal: He.test(Re.protocol),
                            global: !0,
                            processData: !0,
                            async: !0,
                            contentType: "application/x-www-form-urlencoded; charset=UTF-8",
                            accepts: {
                                "*": Ve,
                                text: "text/plain",
                                html: "text/html",
                                xml: "application/xml, text/xml",
                                json: "application/json, text/javascript"
                            },
                            contents: {
                                xml: /\bxml\b/,
                                html: /\bhtml/,
                                json: /\bjson\b/
                            },
                            responseFields: {
                                xml: "responseXML",
                                text: "responseText",
                                json: "responseJSON"
                            },
                            converters: {
                                "* text": String,
                                "text html": !0,
                                "text json": JSON.parse,
                                "text xml": bt.parseXML
                            },
                            flatOptions: {
                                url: !0,
                                context: !0
                            }
                        },
                        ajaxSetup: function (t, e) {
                            return e ? it(it(t, bt.ajaxSettings), e) : it(bt.ajaxSettings, t)
                        },
                        ajaxPrefilter: et(Ue),
                        ajaxTransport: et(Ge),
                        ajax: function (t, e) {
                            function i(t, e, n, i) {
                                var u, f, d, p, w, _ = e;
                                c || (c = !0, l && o.clearTimeout(l), r = void 0, s = i || "", C.readyState = t > 0 ? 4 : 0, u = t >= 200 && t < 300 || 304 === t, n && (p = rt(y, C, n)), p = ot(y, p, C, u), u ? (y.ifModified && (w = C.getResponseHeader("Last-Modified"), w && (bt.lastModified[a] = w), w = C.getResponseHeader("etag"), w && (bt.etag[a] = w)), 204 === t || "HEAD" === y.type ? _ = "nocontent" : 304 === t ? _ = "notmodified" : (_ = p.state, f = p.data, d = p.error, u = !d)) : (d = _, !t && _ || (_ = "error", t < 0 && (t = 0))), C.status = t, C.statusText = (e || _) + "", u ? g.resolveWith(m, [f, _, C]) : g.rejectWith(m, [C, _, d]), C.statusCode(b), b = void 0, h && v.trigger(u ? "ajaxSuccess" : "ajaxError", [C, y, u ? f : d]), S.fireWith(m, [C, _]), h && (v.trigger("ajaxComplete", [C, y]), --bt.active || bt.event.trigger("ajaxStop")))
                            }
                            "object" === ("undefined" == typeof t ? "undefined" : n(t)) && (e = t, t = void 0),
                            e = e || {};
                            var r, a, s, u, l, f, c, h, d, p, y = bt.ajaxSetup({}, e),
                                m = y.context || y,
                                v = y.context && (m.nodeType || m.jquery) ? bt(m) : bt.event,
                                g = bt.Deferred(),
                                S = bt.Callbacks("once memory"),
                                b = y.statusCode || {},
                                w = {},
                                _ = {},
                                P = "canceled",
                                C = {
                                    readyState: 0,
                                    getResponseHeader: function (t) {
                                        var e;
                                        if (c) {
                                            if (!u) for (u = {}; e = Ne.exec(s);) u[e[1].toLowerCase()] = e[2];
                                            e = u[t.toLowerCase()]
                                        }
                                        return null == e ? null : e
                                    },
                                    getAllResponseHeaders: function () {
                                        return c ? s : null
                                    },
                                    setRequestHeader: function (t, e) {
                                        return null == c && (t = _[t.toLowerCase()] = _[t.toLowerCase()] || t, w[t] = e),
                                        this
                                    },
                                    overrideMimeType: function (t) {
                                        return null == c && (y.mimeType = t),
                                        this
                                    },
                                    statusCode: function (t) {
                                        var e;
                                        if (t) if (c) C.always(t[C.status]);
                                        else for (e in t) b[e] = [b[e], t[e]];
                                        return this
                                    },
                                    abort: function (t) {
                                        var e = t || P;
                                        return r && r.abort(e),
                                        i(0, e),
                                        this
                                    }
                                };
                            if (g.promise(C), y.url = ((t || y.url || Re.href) + "").replace(We, Re.protocol + "//"), y.type = e.method || e.type || y.method || y.type, y.dataTypes = (y.dataType || "*").toLowerCase().match(Ot) || [""], null == y.crossDomain) {
                                    f = st.createElement("a");
                                    try {
                                        f.href = y.url,
                                        f.href = f.href,
                                        y.crossDomain = Ye.protocol + "//" + Ye.host != f.protocol + "//" + f.host
                                    } catch (t) {
                                        y.crossDomain = !0
                                    }
                                }
                            if (y.data && y.processData && "string" != typeof y.data && (y.data = bt.param(y.data, y.traditional)), nt(Ue, y, e, C), c) return C;
                            h = bt.event && y.global,
                            h && 0 === bt.active++ && bt.event.trigger("ajaxStart"),
                            y.type = y.type.toUpperCase(),
                            y.hasContent = !je.test(y.type),
                            a = y.url.replace(Le, ""),
                            y.hasContent ? y.data && y.processData && 0 === (y.contentType || "").indexOf("application/x-www-form-urlencoded") && (y.data = y.data.replace(Be, "+")) : (p = y.url.slice(a.length), y.data && (a += (Ie.test(a) ? "&" : "?") + y.data, delete y.data), y.cache === !1 && (a = a.replace(qe, "$1"), p = (Ie.test(a) ? "&" : "?") + "_=" + Ee+++p), y.url = a + p),
                            y.ifModified && (bt.lastModified[a] && C.setRequestHeader("If-Modified-Since", bt.lastModified[a]), bt.etag[a] && C.setRequestHeader("If-None-Match", bt.etag[a])),
                            (y.data && y.hasContent && y.contentType !== !1 || e.contentType) && C.setRequestHeader("Content-Type", y.contentType),
                            C.setRequestHeader("Accept", y.dataTypes[0] && y.accepts[y.dataTypes[0]] ? y.accepts[y.dataTypes[0]] + ("*" !== y.dataTypes[0] ? ", " + Ve + "; q=0.01" : "") : y.accepts["*"]);
                            for (d in y.headers) C.setRequestHeader(d, y.headers[d]);
                            if (y.beforeSend && (y.beforeSend.call(m, C, y) === !1 || c)) return C.abort();
                            if (P = "abort", S.add(y.complete), C.done(y.success), C.fail(y.error), r = nt(Ge, y, e, C)) {
                                    if (C.readyState = 1, h && v.trigger("ajaxSend", [C, y]), c) return C;
                                    y.async && y.timeout > 0 && (l = o.setTimeout(function () {
                                        C.abort("timeout")
                                    }, y.timeout));
                                    try {
                                        c = !1,
                                        r.send(w, i)
                                    } catch (t) {
                                        if (c) throw t;
                                        i(-1, t)
                                    }
                                } else i(-1, "No Transport");
                            return C
                        },
                        getJSON: function (t, e, n) {
                            return bt.get(t, e, n, "json")
                        },
                        getScript: function (t, e) {
                            return bt.get(t, void 0, e, "script")
                        }
                    }),
                bt.each(["get", "post"], function (t, e) {
                        bt[e] = function (t, n, i, r) {
                            return bt.isFunction(n) && (r = r || i, i = n, n = void 0),
                            bt.ajax(bt.extend({
                                url: t,
                                type: e,
                                dataType: r,
                                data: n,
                                success: i
                            }, bt.isPlainObject(t) && t))
                        }
                    }),
                bt._evalUrl = function (t) {
                        return bt.ajax({
                            url: t,
                            type: "GET",
                            dataType: "script",
                            cache: !0,
                            async: !1,
                            global: !1,
                            throws: !0
                        })
                    },
                bt.fn.extend({
                        wrapAll: function (t) {
                            var e;
                            return this[0] && (bt.isFunction(t) && (t = t.call(this[0])), e = bt(t, this[0].ownerDocument).eq(0).clone(!0), this[0].parentNode && e.insertBefore(this[0]), e.map(function () {
                                for (var t = this; t.firstElementChild;) t = t.firstElementChild;
                                return t
                            }).append(this)),
                            this
                        },
                        wrapInner: function (t) {
                            return bt.isFunction(t) ? this.each(function (e) {
                                bt(this).wrapInner(t.call(this, e))
                            }) : this.each(function () {
                                var e = bt(this),
                                    n = e.contents();
                                n.length ? n.wrapAll(t) : e.append(t)
                            })
                        },
                        wrap: function (t) {
                            var e = bt.isFunction(t);
                            return this.each(function (n) {
                                bt(this).wrapAll(e ? t.call(this, n) : t)
                            })
                        },
                        unwrap: function (t) {
                            return this.parent(t).not("body").each(function () {
                                bt(this).replaceWith(this.childNodes)
                            }),
                            this
                        }
                    }),
                bt.expr.pseudos.hidden = function (t) {
                        return !bt.expr.pseudos.visible(t)
                    },
                bt.expr.pseudos.visible = function (t) {
                        return !!(t.offsetWidth || t.offsetHeight || t.getClientRects().length)
                    },
                bt.ajaxSettings.xhr = function () {
                        try {
                            return new o.XMLHttpRequest
                        } catch (t) {}
                    };
                var Xe = {
                        0: 200,
                        1223: 204
                    },
                    Je = bt.ajaxSettings.xhr();
                gt.cors = !! Je && "withCredentials" in Je,
                gt.ajax = Je = !! Je,
                bt.ajaxTransport(function (t) {
                        var e, n;
                        if (gt.cors || Je && !t.crossDomain) return {
                            send: function (i, r) {
                                var a, s = t.xhr();
                                if (s.open(t.type, t.url, t.async, t.username, t.password), t.xhrFields) for (a in t.xhrFields) s[a] = t.xhrFields[a];
                                t.mimeType && s.overrideMimeType && s.overrideMimeType(t.mimeType),
                                t.crossDomain || i["X-Requested-With"] || (i["X-Requested-With"] = "XMLHttpRequest");
                                for (a in i) s.setRequestHeader(a, i[a]);
                                e = function (t) {
                                    return function () {
                                        e && (e = n = s.onload = s.onerror = s.onabort = s.onreadystatechange = null, "abort" === t ? s.abort() : "error" === t ? "number" != typeof s.status ? r(0, "error") : r(s.status, s.statusText) : r(Xe[s.status] || s.status, s.statusText, "text" !== (s.responseType || "text") || "string" != typeof s.responseText ? {
                                            binary: s.response
                                        } : {
                                            text: s.responseText
                                        }, s.getAllResponseHeaders()))
                                    }
                                },
                                s.onload = e(),
                                n = s.onerror = e("error"),
                                void 0 !== s.onabort ? s.onabort = n : s.onreadystatechange = function () {
                                    4 === s.readyState && o.setTimeout(function () {
                                        e && n()
                                    })
                                },
                                e = e("abort");
                                try {
                                    s.send(t.hasContent && t.data || null)
                                } catch (t) {
                                    if (e) throw t
                                }
                            },
                            abort: function () {
                                e && e()
                            }
                        }
                    }),
                bt.ajaxPrefilter(function (t) {
                        t.crossDomain && (t.contents.script = !1)
                    }),
                bt.ajaxSetup({
                        accepts: {
                            script: "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"
                        },
                        contents: {
                            script: /\b(?:java|ecma)script\b/
                        },
                        converters: {
                            "text script": function (t) {
                                return bt.globalEval(t),
                                t
                            }
                        }
                    }),
                bt.ajaxPrefilter("script", function (t) {
                        void 0 === t.cache && (t.cache = !1),
                        t.crossDomain && (t.type = "GET")
                    }),
                bt.ajaxTransport("script", function (t) {
                        if (t.crossDomain) {
                            var e, n;
                            return {
                                send: function (i, r) {
                                    e = bt("<script>").prop({
                                        charset: t.scriptCharset,
                                        src: t.url
                                    }).on("load error", n = function (t) {
                                        e.remove(),
                                        n = null,
                                        t && r("error" === t.type ? 404 : 200, t.type)
                                    }),
                                    st.head.appendChild(e[0])
                                },
                                abort: function () {
                                    n && n()
                                }
                            }
                        }
                    });
                var $e = [],
                    Ke = /(=)\?(?=&|$)|\?\?/;
                bt.ajaxSetup({
                        jsonp: "callback",
                        jsonpCallback: function () {
                            var t = $e.pop() || bt.expando + "_" + Ee++;
                            return this[t] = !0,
                            t
                        }
                    }),
                bt.ajaxPrefilter("json jsonp", function (t, e, n) {
                        var i, r, a, s = t.jsonp !== !1 && (Ke.test(t.url) ? "url" : "string" == typeof t.data && 0 === (t.contentType || "").indexOf("application/x-www-form-urlencoded") && Ke.test(t.data) && "data");
                        if (s || "jsonp" === t.dataTypes[0]) return i = t.jsonpCallback = bt.isFunction(t.jsonpCallback) ? t.jsonpCallback() : t.jsonpCallback,
                        s ? t[s] = t[s].replace(Ke, "$1" + i) : t.jsonp !== !1 && (t.url += (Ie.test(t.url) ? "&" : "?") + t.jsonp + "=" + i),
                        t.converters["script json"] = function () {
                            return a || bt.error(i + " was not called"),
                            a[0]
                        },
                        t.dataTypes[0] = "json",
                        r = o[i],
                        o[i] = function () {
                            a = arguments
                        },
                        n.always(function () {
                            void 0 === r ? bt(o).removeProp(i) : o[i] = r,
                            t[i] && (t.jsonpCallback = e.jsonpCallback, $e.push(i)),
                            a && bt.isFunction(r) && r(a[0]),
                            a = r = void 0
                        }),
                        "script"
                    }),
                gt.createHTMLDocument = function () {
                        var t = st.implementation.createHTMLDocument("").body;
                        return t.innerHTML = "<form></form><form></form>",
                        2 === t.childNodes.length
                    }(),
                bt.parseHTML = function (t, e, n) {
                        if ("string" != typeof t) return [];
                        "boolean" == typeof e && (n = e, e = !1);
                        var i, r, o;
                        return e || (gt.createHTMLDocument ? (e = st.implementation.createHTMLDocument(""), i = e.createElement("base"), i.href = st.location.href, e.head.appendChild(i)) : e = st),
                        r = Mt.exec(t),
                        o = !n && [],
                        r ? [e.createElement(r[1])] : (r = x([t], e, o), o && o.length && bt(o).remove(), bt.merge([], r.childNodes))
                    },
                bt.fn.load = function (t, e, i) {
                        var r, o, a, s = this,
                            u = t.indexOf(" ");
                        return u > -1 && (r = Z(t.slice(u)), t = t.slice(0, u)),
                        bt.isFunction(e) ? (i = e, e = void 0) : e && "object" === ("undefined" == typeof e ? "undefined" : n(e)) && (o = "POST"),
                        s.length > 0 && bt.ajax({
                                url: t,
                                type: o || "GET",
                                dataType: "html",
                                data: e
                            }).done(function (t) {
                                a = arguments,
                                s.html(r ? bt("<div>").append(bt.parseHTML(t)).find(r) : t)
                            }).always(i &&
                            function (t, e) {
                                s.each(function () {
                                    i.apply(this, a || [t.responseText, e, t])
                                })
                            }),
                        this
                    },
                bt.each(["ajaxStart", "ajaxStop", "ajaxComplete", "ajaxError", "ajaxSuccess", "ajaxSend"], function (t, e) {
                        bt.fn[e] = function (t) {
                            return this.on(e, t)
                        }
                    }),
                bt.expr.pseudos.animated = function (t) {
                        return bt.grep(bt.timers, function (e) {
                            return t === e.elem
                        }).length
                    },
                bt.offset = {
                        setOffset: function (t, e, n) {
                            var i, r, o, a, s, u, l, f = bt.css(t, "position"),
                                c = bt(t),
                                h = {};
                            "static" === f && (t.style.position = "relative"),
                            s = c.offset(),
                            o = bt.css(t, "top"),
                            u = bt.css(t, "left"),
                            l = ("absolute" === f || "fixed" === f) && (o + u).indexOf("auto") > -1,
                            l ? (i = c.position(), a = i.top, r = i.left) : (a = parseFloat(o) || 0, r = parseFloat(u) || 0),
                            bt.isFunction(e) && (e = e.call(t, n, bt.extend({}, s))),
                            null != e.top && (h.top = e.top - s.top + a),
                            null != e.left && (h.left = e.left - s.left + r),
                            "using" in e ? e.using.call(t, h) : c.css(h)
                        }
                    },
                bt.fn.extend({
                        offset: function (t) {
                            if (arguments.length) return void 0 === t ? this : this.each(function (e) {
                                bt.offset.setOffset(this, t, e)
                            });
                            var e, n, i, r, o = this[0];
                            if (o) return o.getClientRects().length ? (i = o.getBoundingClientRect(), e = o.ownerDocument, n = e.documentElement, r = e.defaultView, {
                                top: i.top + r.pageYOffset - n.clientTop,
                                left: i.left + r.pageXOffset - n.clientLeft
                            }) : {
                                top: 0,
                                left: 0
                            }
                        },
                        position: function () {
                            if (this[0]) {
                                var t, e, n = this[0],
                                    i = {
                                        top: 0,
                                        left: 0
                                    };
                                return "fixed" === bt.css(n, "position") ? e = n.getBoundingClientRect() : (t = this.offsetParent(), e = this.offset(), l(t[0], "html") || (i = t.offset()), i = {
                                        top: i.top + bt.css(t[0], "borderTopWidth", !0),
                                        left: i.left + bt.css(t[0], "borderLeftWidth", !0)
                                    }),
                                {
                                        top: e.top - i.top - bt.css(n, "marginTop", !0),
                                        left: e.left - i.left - bt.css(n, "marginLeft", !0)
                                    }
                            }
                        },
                        offsetParent: function () {
                            return this.map(function () {
                                for (var t = this.offsetParent; t && "static" === bt.css(t, "position");) t = t.offsetParent;
                                return t || ne
                            })
                        }
                    }),
                bt.each({
                        scrollLeft: "pageXOffset",
                        scrollTop: "pageYOffset"
                    }, function (t, e) {
                        var n = "pageYOffset" === e;
                        bt.fn[t] = function (i) {
                            return qt(this, function (t, i, r) {
                                var o;
                                return bt.isWindow(t) ? o = t : 9 === t.nodeType && (o = t.defaultView),
                                void 0 === r ? o ? o[e] : t[i] : void(o ? o.scrollTo(n ? o.pageXOffset : r, n ? r : o.pageYOffset) : t[i] = r)
                            }, t, i, arguments.length)
                        }
                    }),
                bt.each(["top", "left"], function (t, e) {
                        bt.cssHooks[e] = L(gt.pixelPosition, function (t, n) {
                            if (n) return n = B(t, e),
                            he.test(n) ? bt(t).position()[e] + "px" : n
                        })
                    }),
                bt.each({
                        Height: "height",
                        Width: "width"
                    }, function (t, e) {
                        bt.each({
                            padding: "inner" + t,
                            content: e,
                            "": "outer" + t
                        }, function (n, i) {
                            bt.fn[i] = function (r, o) {
                                var a = arguments.length && (n || "boolean" != typeof r),
                                    s = n || (r === !0 || o === !0 ? "margin" : "border");
                                return qt(this, function (e, n, r) {
                                        var o;
                                        return bt.isWindow(e) ? 0 === i.indexOf("outer") ? e["inner" + t] : e.document.documentElement["client" + t] : 9 === e.nodeType ? (o = e.documentElement, Math.max(e.body["scroll" + t], o["scroll" + t], e.body["offset" + t], o["offset" + t], o["client" + t])) : void 0 === r ? bt.css(e, n, s) : bt.style(e, n, r, s)
                                    }, e, a ? r : void 0, a)
                            }
                        })
                    }),
                bt.fn.extend({
                        bind: function (t, e, n) {
                            return this.on(t, null, e, n)
                        },
                        unbind: function (t, e) {
                            return this.off(t, null, e)
                        },
                        delegate: function (t, e, n, i) {
                            return this.on(e, t, n, i)
                        },
                        undelegate: function (t, e, n) {
                            return 1 === arguments.length ? this.off(t, "**") : this.off(e, t || "**", n)
                        }
                    }),
                bt.holdReady = function (t) {
                        t ? bt.readyWait++ : bt.ready(!0)
                    },
                bt.isArray = Array.isArray,
                bt.parseJSON = JSON.parse,
                bt.nodeName = l,
                i = [],
                r = function () {
                        return bt
                    }.apply(e, i),
                !(void 0 !== r && (t.exports = r));
                var Ze = o.jQuery,
                    Qe = o.$;
                return bt.noConflict = function (t) {
                        return o.$ === bt && (o.$ = Qe),
                        t && o.jQuery === bt && (o.jQuery = Ze),
                        bt
                    },
                a || (o.jQuery = o.$ = bt),
                bt
            })
        }).call(e, n(8)(t))
    },
 
 
    function (t, e, n) {
        "use strict";
        var i = n(6),
            r = n(7),
            o = r;
        o.v1 = i,
        o.v4 = r,
        t.exports = o
    },
 
 
    function (t, e) {
        "use strict";
 
        function n(t, e) {
            var n = e || 0,
                r = i;
            return r[t[n++]] + r[t[n++]] + r[t[n++]] + r[t[n++]] + "-" + r[t[n++]] + r[t[n++]] + "-" + r[t[n++]] + r[t[n++]] + "-" + r[t[n++]] + r[t[n++]] + "-" + r[t[n++]] + r[t[n++]] + r[t[n++]] + r[t[n++]] + r[t[n++]] + r[t[n++]]
        }
        for (var i = [], r = 0; r < 256; ++r) i[r] = (r + 256).toString(16).substr(1);
        t.exports = n
    },
 
 
    function (t, e) {
        (function (e) {
            "use strict";
            var n, i = e.crypto || e.msCrypto;
            if (i && i.getRandomValues) {
                var r = new Uint8Array(16);
                n = function () {
                    return i.getRandomValues(r),
                    r
                }
            }
            if (!n) {
                var o = new Array(16);
                n = function () {
                    for (var t, e = 0; e < 16; e++) 0 === (3 & e) && (t = 4294967296 * Math.random()),
                    o[e] = t >>> ((3 & e) << 3) & 255;
                    return o
                }
            }
            t.exports = n
        }).call(e, function () {
            return this
        }())
    },
 
 
    function (t, e) {
        "use strict";
 
        function n(t, e) {
            if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function")
        }
        Object.defineProperty(e, "__esModule", {
            value: !0
        });
        var i = function () {
            function t(t, e) {
                for (var n = 0; n < e.length; n++) {
                    var i = e[n];
                    i.enumerable = i.enumerable || !1,
                    i.configurable = !0,
                    "value" in i && (i.writable = !0),
                    Object.defineProperty(t, i.key, i)
                }
            }
            return function (e, n, i) {
                return n && t(e.prototype, n),
                i && t(e, i),
                e
            }
        }(),
            r = function () {
                function t() {
                    n(this, t),
                    this._keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="
                }
                return i(t, [{
                    key: "$",
                    value: function (t) {
                        var e = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,
                            n = /^(?:\s*(<[\w\W]+>)[^>]*|.([\w-]*))$/;
                        if (e.test(t)) {
                                var i = e.exec(t);
                                return document.getElementById(i[2])
                            }
                        if (n.test(t)) {
                                for (var r = n.exec(t), o = document.getElementsByTagName("*"), a = [], s = 0, u = o.length; s < u; s++) o[s].className.match(new RegExp("(\\s|^)" + r[2] + "(\\s|$)")) && a.push(o[s]);
                                return a
                            }
                    }
                },
                {
                    key: "dateFormat",
                    value: function (t, e) {
                        var n = {
                            "M+": t.getMonth() + 1,
                            "d+": t.getDate(),
                            "h+": t.getHours(),
                            "m+": t.getMinutes(),
                            "s+": t.getSeconds(),
                            "q+": Math.floor((t.getMonth() + 3) / 3),
                            S: t.getMilliseconds()
                        };
                        /(y+)/.test(e) && (e = e.replace(RegExp.$1, (t.getFullYear() + "").substr(4 - RegExp.$1.length)));
                        for (var i in n) new RegExp("(" + i + ")").test(e) && (e = e.replace(RegExp.$1, 1 === RegExp.$1.length ? n[i] : ("00" + n[i]).substr(("" + n[i]).length)));
                        return e
                    }
                },
                {
                    key: "downloadFile",
                    value: function (t, e) {
                        var n = t;
                        t instanceof Blob || t instanceof File || (n = new Blob([t]));
                        var i = window.URL.createObjectURL(n),
                            r = window.document.createElement("a");
                        r.href = i,
                        r.download = e;
                        var o = document.createEvent("MouseEvents");
                        o.initEvent("click", !0, !0),
                        r.dispatchEvent(o)
                    }
                },
                {
                    key: "createxmlDoc",
                    value: function () {
                        for (var t, e = ["MSXML2.DOMDocument", "MSXML2.DOMDocument.5.0", "MSXML2.DOMDocument.4.0", "MSXML2.DOMDocument.3.0", "Microsoft.XmlDom"], n = 0, i = e.length; n < i; n++) try {
                            t = new ActiveXObject(e[n]);
                            break
                        } catch (e) {
                            t = document.implementation.createDocument("", "", null);
                            break
                        }
                        return t.async = "false",
                        t
                    }
                },
                {
                    key: "parseXmlFromStr",
                    value: function (t) {
                        if (null === t || "" === t) return null;
                        var e = this.createxmlDoc();
                        if ("Netscape" === navigator.appName || "Opera" === navigator.appName) {
                            var n = new DOMParser;
                            e = n.parseFromString(t, "text/xml")
                        } else e.loadXML(t);
                        return e
                    }
                },
                {
                    key: "encode",
                    value: function (t) {
                        var e, n, i, r, o, a, s, u = "",
                            l = 0;
                        for (t = this._utf8_encode(t); l < t.length;) e = t.charCodeAt(l++),
                        n = t.charCodeAt(l++),
                        i = t.charCodeAt(l++),
                        r = e >> 2,
                        o = (3 & e) << 4 | n >> 4,
                        a = (15 & n) << 2 | i >> 6,
                        s = 63 & i,
                        isNaN(n) ? a = s = 64 : isNaN(i) && (s = 64),
                        u = u + this._keyStr.charAt(r) + this._keyStr.charAt(o) + this._keyStr.charAt(a) + this._keyStr.charAt(s);
                        return u
                    }
                },
                {
                    key: "decode",
                    value: function (t) {
                        var e, n, i, r, o, a, s, u = "",
                            l = 0;
                        for (t = t.replace(/[^A-Za-z0-9+\/=]/g, ""); l < t.length;) r = this._keyStr.indexOf(t.charAt(l++)),
                        o = this._keyStr.indexOf(t.charAt(l++)),
                        a = this._keyStr.indexOf(t.charAt(l++)),
                        s = this._keyStr.indexOf(t.charAt(l++)),
                        e = r << 2 | o >> 4,
                        n = (15 & o) << 4 | a >> 2,
                        i = (3 & a) << 6 | s,
                        u += String.fromCharCode(e),
                        64 !== a && (u += String.fromCharCode(n)),
                        64 !== s && (u += String.fromCharCode(i));
                        return u = this._utf8_decode(u)
                    }
                },
                {
                    key: "_utf8_encode",
                    value: function (t) {
                        t = t.replace(/\r\n/g, "\n");
                        for (var e = "", n = 0; n < t.length; n++) {
                            var i = t.charCodeAt(n);
                            i < 128 ? e += String.fromCharCode(i) : i > 127 && i < 2048 ? (e += String.fromCharCode(i >> 6 | 192), e += String.fromCharCode(63 & i | 128)) : (e += String.fromCharCode(i >> 12 | 224), e += String.fromCharCode(i >> 6 & 63 | 128), e += String.fromCharCode(63 & i | 128))
                        }
                        return e
                    }
                },
                {
                    key: "_utf8_decode",
                    value: function (t) {
                        for (var e = "", n = 0, i = 0, r = 0; n < t.length;) if (i = t.charCodeAt(n), i < 128) e += String.fromCharCode(i),
                        n++;
                        else if (i > 191 && i < 224) r = t.charCodeAt(n + 1),
                        e += String.fromCharCode((31 & i) << 6 | 63 & r),
                        n += 2;
                        else {
                            r = t.charCodeAt(n + 1);
                            var o = t.charCodeAt(n + 2);
                            e += String.fromCharCode((15 & i) << 12 | (63 & r) << 6 | 63 & o),
                            n += 3
                        }
                        return e
                    }
                },
                {
                    key: "isFirefox",
                    value: function () {
                        var t = !1,
                            e = navigator.userAgent.toLowerCase(),
                            n = "",
                            i = -1;
                        return e.match(/firefox\/([\d.]+)/) && (n = e.match(/firefox\/([\d.]+)/)[1], i = parseInt(n.split(".")[0], 10), i > -1 && (t = !0)),
                        t
                    }
                }]),
                t
            }();
        e.oTool = new r
    },
 
 
    function (t, e, n) {
        "use strict";
 
        function i(t, e, n) {
            var i = e && n || 0,
                r = e || [];
            t = t || {};
            var a = void 0 !== t.clockseq ? t.clockseq : u,
                c = void 0 !== t.msecs ? t.msecs : (new Date).getTime(),
                h = void 0 !== t.nsecs ? t.nsecs : f + 1,
                d = c - l + (h - f) / 1e4;
            if (d < 0 && void 0 === t.clockseq && (a = a + 1 & 16383), (d < 0 || c > l) && void 0 === t.nsecs && (h = 0), h >= 1e4) throw new Error("uuid.v1(): Can't create more than 10M uuids/sec");
            l = c,
            f = h,
            u = a,
            c += 122192928e5;
            var p = (1e4 * (268435455 & c) + h) % 4294967296;
            r[i++] = p >>> 24 & 255,
            r[i++] = p >>> 16 & 255,
            r[i++] = p >>> 8 & 255,
            r[i++] = 255 & p;
            var y = c / 4294967296 * 1e4 & 268435455;
            r[i++] = y >>> 8 & 255,
            r[i++] = 255 & y,
            r[i++] = y >>> 24 & 15 | 16,
            r[i++] = y >>> 16 & 255,
            r[i++] = a >>> 8 | 128,
            r[i++] = 255 & a;
            for (var m = t.node || s, v = 0; v < 6; ++v) r[i + v] = m[v];
            return e ? e : o(r)
        }
        var r = n(4),
            o = n(3),
            a = r(),
            s = [1 | a[0], a[1], a[2], a[3], a[4], a[5]],
            u = 16383 & (a[6] << 8 | a[7]),
            l = 0,
            f = 0;
        t.exports = i
    },
 
 
    function (t, e, n) {
        "use strict";
 
        function i(t, e, n) {
            var i = e && n || 0;
            "string" == typeof t && (e = "binary" == t ? new Array(16) : null, t = null),
            t = t || {};
            var a = t.random || (t.rng || r)();
            if (a[6] = 15 & a[6] | 64, a[8] = 63 & a[8] | 128, e) for (var s = 0; s < 16; ++s) e[i + s] = a[s];
            return e || o(a)
        }
        var r = n(4),
            o = n(3);
        t.exports = i
    },
 
 
    function (t, e) {
        "use strict";
        t.exports = function (t) {
            return t.webpackPolyfill || (t.deprecate = function () {}, t.paths = [], t.children = [], t.webpackPolyfill = 1),
            t
        }
    },
 
 
    function (t, e, n) {
        "use strict";
 
        function i(t) {
            return t && t.__esModule ? t : {
            default:
                t
            }
        }
        function r(t, e) {
            if (!t) throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
            return !e || "object" != typeof e && "function" != typeof e ? t : e
        }
        function o(t, e) {
            if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function, not " + typeof e);
            t.prototype = Object.create(e && e.prototype, {
                constructor: {
                    value: t,
                    enumerable: !1,
                    writable: !0,
                    configurable: !0
                }
            }),
            e && (Object.setPrototypeOf ? Object.setPrototypeOf(t, e) : t.__proto__ = e)
        }
        function a(t, e) {
            if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function")
        }
        Object.defineProperty(e, "__esModule", {
            value: !0
        }),
        e.ESCanvas = void 0;
        var s = function () {
            function t(t, e) {
                for (var n = 0; n < e.length; n++) {
                    var i = e[n];
                    i.enumerable = i.enumerable || !1,
                    i.configurable = !0,
                    "value" in i && (i.writable = !0),
                    Object.defineProperty(t, i.key, i)
                }
            }
            return function (e, n, i) {
                return n && t(e.prototype, n),
                i && t(e, i),
                e
            }
        }(),
            u = n(1),
            l = i(u),
            f = function () {
                function t() {
                    i[f].clearRect(0, 0, i.m_iCanvasWidth, i.m_iCanvasHeight);
                    for (var t = 0, e = i[c].length; t < e; t++) i[c][t].draw()
                }
                function e(t) {
                    var e = i[c].length;
                    e < i[p] && i[c].push(t)
                }
                function n() {
                    function n() {
                        for (var t = -1, e = 0, n = i[c].length; e < n; e++) if (i[c][e].m_bChoosed) {
                            t = e;
                            break
                        }
                        return t
                    }
                    var r = !1,
                        o = 0,
                        a = 0,
                        s = "draw",
                        l = null;
                    i[u][0].oncontextmenu = function () {
                            return !1
                        },
                    i[u][0].onselectstart = function () {
                            return !1
                        },
                    i[u].unbind(),
                    i[u].bind("mousedown", function (f) {
                            if (2 === f.button) i[m] && l && l.m_aPoint.length >= l.m_iMinClosed && (l.m_bClosed = !0, i[m] = !1, l.setPointInfo(l.m_aPoint), e(l), t(), r = !1, i[g] || (i[h] = !1), window.onDrawShapeEvent && window.onDrawShapeEvent(l.m_szType, "onDrawEnd", l.m_szId));
                            else if (0 === f.button) {
                                if (o = f.offsetX, a = f.offsetY, s = "draw", !i[m]) {
                                    var y = n();
                                    if (y !== -1 && i[c][y].inArc(f.offsetX, f.offsetY, 5) && (s = "stretch"), "stretch" !== s) for (var S = 0, b = i[c].length; S < b; S++) i[c][S].inShape(f.offsetX, f.offsetY) ? (i[c][S].m_bChoosed = !0, i[c][S].getMouseDownPoints(f.offsetX, f.offsetY), s = "drag", window.onDrawShapeEvent && window.onDrawShapeEvent(i[c][S].m_szType, "onChoose", i[c][S].m_szId)) : i[c][S].m_bChoosed = !1;
                                    "drag" === s ? i[u][0].style.cursor = "move" : i[u][0].style.cursor = "default",
                                    i[h] && !i[g] && (s = "draw")
                                }
                                if ("draw" === s && i[h]) {
                                    if (i[p] <= i[c].length && "Grid" !== i[d] && "Point" !== i[d]) return;
                                    "Rect" === i[d] ? l = new w : "Grid" === i[d] ? 0 === i[c].length && (l = new P, e(l)) : "Polygon" === i[d] ? (i[m] || (i[m] = !0, l = new x, l.m_szId = i[v].szId || "", l.m_szTips = i[v].szTips || "", l.m_iMinClosed = i[v].iMinClosed || 3, l.m_iMaxPointNum = i[v].iMaxPointNum || 11, l.m_iPolygonType = i[v].iPolygonType, l.m_szDrawColor = i[v].szDrawColor, l.m_szFillColor = i[v].szFillColor, l.m_iTranslucent = i[v].iTranslucent), 1 === l.m_iPolygonType && (l.addPoint(o, a), l.m_aPoint.length === l.m_iMaxPointNum && (l.m_bClosed = !0, i[m] = !1, e(l), t(), r = !1, i[g] || (i[h] = !1), window.onDrawShapeEvent && window.onDrawShapeEvent(l.m_szType, "onDrawEnd", l.m_szId)))) : "Point" === i[d] && (i.clearShapeByType("Point"), l = new T, l.m_szId = i[v].szId || "", l.m_szDrawColor = i[v].szDrawColor, l.setPointInfo([
                                        [o, a]
                                    ]), e(l), t())
                                }
                                r = !0
                            }
                        }),
                    i[u].bind("mousemove", function (e) {
                            if (i[m]) i[h] && r && ("Polygon" === i[d] && 0 === l.m_iPolygonType && (l.m_bClosed = !0), t(), l.move(e.offsetX, e.offsetY, o, a));
                            else {
                                var u = n();
                                u > -1 ? r && ("drag" === s ? i[c][u].drag(e.offsetX, e.offsetY) : "stretch" === s && i[c][u].stretch(e.offsetX, e.offsetY)) : i[h] && r && ("Rect" === i[d] ? l.move([
                                    [o, a],
                                    [e.offsetX, e.offsetY]
                                ]) : "Grid" === i[d] && i[c][0].move(o, a, e.offsetX, e.offsetY))
                            }
                        }),
                    i[u].bind("mouseup", function (n) {
                            if (i[u][0].style.cursor = "default", null !== l && "undefined" != typeof l && "draw" === s) if ("Rect" === i[d]) {
                                if (Math.abs(n.offsetX - o) > 2 && Math.abs(n.offsetY - a) > 2 && (e(l), i[g] || (i[h] = !1)), i[S]) {
                                    var f = {
                                        startPos: [],
                                        endPos: []
                                    };
                                    n.offsetX > o && n.offsetY > a ? (f.startPos = l.m_aPoint[0] || [n.offsetX, n.offsetY], f.endPos = l.m_aPoint[2] || [n.offsetX, n.offsetY]) : (f.startPos = l.m_aPoint[2] || [n.offsetX, n.offsetY], f.endPos = l.m_aPoint[0] || [n.offsetX, n.offsetY]),
                                    i[S] && i[S](f),
                                    i.clearAllShape()
                                }
                                l = null
                            } else "Polygon" === i[d] && 0 === l.m_iPolygonType && i[m] && Math.abs(n.offsetX - o) > 2 && Math.abs(n.offsetY - a) > 2 && (e(l), i[m] = !1, i[g] || (i[h] = !1));
                            r = !! i[m],
                            i[m] || t()
                        }),
                    i[u].bind("dblclick", function () {
                            i[h] && "Grid" === i[d] && (i[c][0].m_szGridMap = "fffffcfffffcfffffcfffffcfffffcfffffcfffffcfffffcfffffcfffffcfffffcfffffcfffffcfffffcfffffcfffffcfffffcfffffc", t())
                        }),
                    i[u].bind("mouseout", function () {
                            i[u][0].style.cursor = "default",
                            r = !! i[m]
                        })
                }
                if ("undefined" != typeof Symbol) {
                    var i = null,
                        u = Symbol("CANVAS"),
                        f = Symbol("CONTEXT"),
                        c = Symbol("SHAPES"),
                        h = Symbol("DRAWSTATUS"),
                        d = Symbol("SHAPETYPE"),
                        p = Symbol("MAXSHAPENUMSUPPORT"),
                        y = Symbol("SHAPESTYLE"),
                        m = Symbol("POLYGONDRAWING"),
                        v = Symbol("CURRENTSHAPEINFO"),
                        g = Symbol("DRAWSHAPEMULTIONETIME"),
                        S = Symbol("EVENTCALLBACK"),
                        b = function () {
                            function e() {
                                a(this, e),
                                this.m_szId = "",
                                this.m_aPoint = [],
                                this.m_bChoosed = !1,
                                this.m_szDrawColor = i[y].szDrawColor,
                                this.m_szFillColor = i[y].szFillColor,
                                this.m_iTranslucent = i[y].iTranslucent,
                                this.m_iIndexChoosePoint = -1,
                                this.m_iDriftStartX = 0,
                                this.m_iDriftStartY = 0,
                                this.m_oEdgePoints = {
                                    top: {
                                        x: 0,
                                        y: 0
                                    },
                                    left: {
                                        x: 0,
                                        y: 0
                                    },
                                    right: {
                                        x: 0,
                                        y: 0
                                    },
                                    bottom: {
                                        x: 0,
                                        y: 0
                                    }
                                },
                                this.m_szTips = "",
                                this.m_iEditType = 0,
                                this.m_iMinClosed = 3,
                                this.m_iMaxPointNum = 11,
                                this.m_bClosed = !1
                            }
                            return s(e, [{
                                key: "draw",
                                value: function () {}
                            },
                            {
                                key: "drag",
                                value: function (e, n) {
                                    var r = this.m_aPoint.length,
                                        o = 0;
                                    for (o = 0; o < r; o++) if (this.m_aPoint[o][0] + e - this.m_iDriftStartX > i.m_iCanvasWidth || this.m_aPoint[o][1] + n - this.m_iDriftStartY > i.m_iCanvasHeight || this.m_aPoint[o][0] + e - this.m_iDriftStartX < 0 || this.m_aPoint[o][1] + n - this.m_iDriftStartY < 0) return this.m_iDriftStartX = e,
                                    void(this.m_iDriftStartY = n);
                                    for (o = 0; o < r; o++) this.m_aPoint[o][0] = this.m_aPoint[o][0] + e - this.m_iDriftStartX,
                                    this.m_aPoint[o][1] = this.m_aPoint[o][1] + n - this.m_iDriftStartY;
                                    this.m_iDriftStartX = e,
                                    this.m_iDriftStartY = n,
                                    this.setPointInfo(this.m_aPoint),
                                    t()
                                }
                            },
                            {
                                key: "stretch",
                                value: function (e, n) {
                                    0 === this.m_iEditType && (this.m_iIndexChoosePoint !== -1 && (this.m_aPoint[this.m_iIndexChoosePoint][0] = e, this.m_aPoint[this.m_iIndexChoosePoint][1] = n), this.setPointInfo(this.m_aPoint), t())
                                }
                            },
                            {
                                key: "inShape",
                                value: function (t, e) {
                                    for (var n = !1, i = this.m_aPoint.length, r = 0, o = i - 1; r < i; o = r++) this.m_aPoint[r][1] > e != this.m_aPoint[o][1] > e && t < (this.m_aPoint[o][0] - this.m_aPoint[r][0]) * (e - this.m_aPoint[r][1]) / (this.m_aPoint[o][1] - this.m_aPoint[r][1]) + this.m_aPoint[r][0] && (n = !n);
                                    return n
                                }
                            },
                            {
                                key: "inArc",
                                value: function (t, e, n) {
                                    for (var i = !1, r = 0, o = this.m_aPoint.length; r < o; r++) {
                                        var a = Math.sqrt((t - this.m_aPoint[r][0]) * (t - this.m_aPoint[r][0]) + (e - this.m_aPoint[r][1]) * (e - this.m_aPoint[r][1]));
                                        if (a < n) {
                                            i = !0,
                                            this.m_iIndexChoosePoint = r;
                                            break
                                        }
                                    }
                                    return i
                                }
                            },
                            {
                                key: "getMouseDownPoints",
                                value: function (t, e) {
                                    this.m_iDriftStartX = t,
                                    this.m_iDriftStartY = e
                                }
                            },
                            {
                                key: "getPointInfo",
                                value: function () {
                                    return this.m_aPoint
                                }
                            },
                            {
                                key: "setPointInfo",
                                value: function (t) {
                                    null !== t && "undefined" != typeof t && t.length > 0 && (this.m_aPoint = t, this.setEdgePoints(t))
                                }
                            },
                            {
                                key: "addPoint",
                                value: function (t, e) {
                                    this.m_aPoint.length < this.m_iMaxPointNum && this.m_aPoint.push([t, e]),
                                    this.m_aPoint.length === this.m_iMaxPointNum && this.setPointInfo(this.m_aPoint)
                                }
                            },
                            {
                                key: "setEdgePoints",
                                value: function (t) {
                                    for (var e = 0, n = t.length; e < n; e++) 0 === e ? (this.m_oEdgePoints.top.x = t[e][0], this.m_oEdgePoints.top.y = t[e][1], this.m_oEdgePoints.left.x = t[e][0], this.m_oEdgePoints.left.y = t[e][1], this.m_oEdgePoints.right.x = t[e][0], this.m_oEdgePoints.right.y = t[e][1], this.m_oEdgePoints.bottom.x = t[e][0], this.m_oEdgePoints.bottom.y = t[e][1]) : (t[e][1] < this.m_oEdgePoints.top.y && (this.m_oEdgePoints.top.x = t[e][0], this.m_oEdgePoints.top.y = t[e][1]), t[e][0] > this.m_oEdgePoints.right.x && (this.m_oEdgePoints.right.x = t[e][0], this.m_oEdgePoints.right.y = t[e][1]), t[e][1] > this.m_oEdgePoints.bottom.y && (this.m_oEdgePoints.bottom.x = t[e][0], this.m_oEdgePoints.bottom.y = t[e][1]), t[e][0] < this.m_oEdgePoints.left.x && (this.m_oEdgePoints.left.x = t[e][0], this.m_oEdgePoints.left.y = t[e][1]))
                                }
                            }]),
                            e
                        }(),
                        w = function (e) {
                            function n() {
                                a(this, n);
                                var t = r(this, (n.__proto__ || Object.getPrototypeOf(n)).call(this));
                                return t.m_szType = "Rect",
                                t
                            }
                            return o(n, e),
                            s(n, [{
                                key: "setPointInfo",
                                value: function (t) {
                                    if (null !== t && "undefined" != typeof t) {
                                        for (var e = t[0][0], n = t[0][1], i = t[0][0], r = t[0][1], o = 0, a = t.length; o < a; o++) e > t[o][0] && (e = t[o][0]),
                                        n > t[o][1] && (n = t[o][1]),
                                        i < t[o][0] && (i = t[o][0]),
                                        r < t[o][1] && (r = t[o][1]);
                                        this.m_aPoint = [
                                            [e, n],
                                            [i, n],
                                            [i, r],
                                            [e, r]
                                        ]
                                    }
                                }
                            },
                            {
                                key: "draw",
                                value: function () {
                                    i[f].fillStyle = this.m_szFillColor,
                                    i[f].strokeStyle = this.m_szDrawColor;
                                    var t = this.m_aPoint[0][0],
                                        e = this.m_aPoint[0][1],
                                        n = this.m_aPoint[2][0] - t,
                                        r = this.m_aPoint[2][1] - e;
                                    if (i[f].globalAlpha = this.m_iTranslucent, i[f].fillRect(t, e, n, r), i[f].globalAlpha = 1, i[f].fillText(this.m_szTips, (t + this.m_aPoint[2][0]) / 2, (e + this.m_aPoint[2][1]) / 2), this.m_bChoosed) {
                                            var o = Math.round(n / 2),
                                                a = Math.round(r / 2);
                                            if (0 === this.m_iEditType) for (var s = [t, t + o, t + n, t, t + n, t, t + o, t + n], u = [e, e, e, e + a, e + a, e + r, e + r, e + r], l = 0; l < 8; l++) i[f].beginPath(),
                                            i[f].arc(s[l], u[l], 3, 0, 360, !1),
                                            i[f].fillStyle = this.m_szDrawColor,
                                            i[f].closePath(),
                                            i[f].fill()
                                        }
                                    i[f].strokeRect(t, e, n, r)
                                }
                            },
                            {
                                key: "stretch",
                                value: function (e, n) {
                                    0 === this.m_iEditType && (0 === this.m_iIndexChoosePoint ? e < this.m_aPoint[2][0] && n < this.m_aPoint[2][1] && (this.m_aPoint[0][0] = e, this.m_aPoint[0][1] = n, this.m_aPoint[3][0] = e, this.m_aPoint[1][1] = n) : 1 === this.m_iIndexChoosePoint ? n < this.m_aPoint[2][1] && (this.m_aPoint[0][1] = n, this.m_aPoint[1][1] = n) : 2 === this.m_iIndexChoosePoint ? e > this.m_aPoint[3][0] && n < this.m_aPoint[3][1] && (this.m_aPoint[1][0] = e, this.m_aPoint[1][1] = n, this.m_aPoint[2][0] = e, this.m_aPoint[0][1] = n) : 3 === this.m_iIndexChoosePoint ? e < this.m_aPoint[2][0] && (this.m_aPoint[0][0] = e, this.m_aPoint[3][0] = e) : 4 === this.m_iIndexChoosePoint ? e > this.m_aPoint[0][0] && (this.m_aPoint[1][0] = e, this.m_aPoint[2][0] = e) : 5 === this.m_iIndexChoosePoint ? e < this.m_aPoint[1][0] && n > this.m_aPoint[1][1] && (this.m_aPoint[3][0] = e, this.m_aPoint[3][1] = n, this.m_aPoint[0][0] = e, this.m_aPoint[2][1] = n) : 6 === this.m_iIndexChoosePoint ? n > this.m_aPoint[1][1] && (this.m_aPoint[2][1] = n, this.m_aPoint[3][1] = n) : 7 === this.m_iIndexChoosePoint && e > this.m_aPoint[0][0] && n > this.m_aPoint[0][1] && (this.m_aPoint[2][0] = e, this.m_aPoint[2][1] = n, this.m_aPoint[1][0] = e, this.m_aPoint[3][1] = n), t())
                                }
                            },
                            {
                                key: "move",
                                value: function (e) {
                                    t(),
                                    this.m_bChoosed = !0;
                                    var n = e[0][0],
                                        i = e[0][1],
                                        r = e[1][0],
                                        o = e[1][1];
                                    this.setPointInfo([
                                            [n, i],
                                            [r, i],
                                            [r, o],
                                            [n, o]
                                        ]),
                                    this.draw()
                                }
                            },
                            {
                                key: "inArc",
                                value: function (t, e, n) {
                                    for (var i = this.m_aPoint[0][0], r = this.m_aPoint[0][1], o = this.m_aPoint[2][0] - i, a = this.m_aPoint[2][1] - r, s = Math.round(o / 2), u = Math.round(a / 2), l = [i, i + s, i + o, i, i + o, i, i + s, i + o], f = [r, r, r, r + u, r + u, r + a, r + a, r + a], c = 0; c < 8; c++) {
                                        var h = Math.sqrt((t - l[c]) * (t - l[c]) + (e - f[c]) * (e - f[c]));
                                        if (h < n) return this.m_iIndexChoosePoint = c,
                                        !0
                                    }
                                    return !1
                                }
                            }]),
                            n
                        }(b),
                        _ = function (e) {
                            function n(t, e) {
                                a(this, n);
                                var i = r(this, (n.__proto__ || Object.getPrototypeOf(n)).call(this));
                                return i.m_szType = "RectOSD",
                                i.m_szOSDType = "overlay-date",
                                i.m_szText = t || "",
                                i.m_szEnabled = e || "",
                                i.m_szDateStyle = "",
                                i.m_szClockType = "",
                                i.m_szDisplayWeek = "",
                                i.m_szId = "",
                                i
                            }
                            return o(n, e),
                            s(n, [{
                                key: "draw",
                                value: function () {
                                    if ("true" === this.m_szEnabled) {
                                        var t = this.m_aPoint[0][0],
                                            e = this.m_aPoint[0][1],
                                            n = this.m_aPoint[2][0] - t,
                                            r = this.m_aPoint[2][1] - e;
                                        i[f].beginPath(),
                                        i[f].strokeStyle = this.m_szDrawColor,
                                        i[f].globalAlpha = 1,
                                        i[f].rect(t, e, n, r),
                                        i[f].font = "15px serif",
                                        i[f].strokeText(this.m_szText, t, e + 15),
                                        i[f].stroke()
                                    }
                                }
                            },
                            {
                                key: "drag",
                                value: function (e, n) {
                                    var r = this.m_aPoint.length,
                                        o = 0;
                                    for (o = 0; o < r; o++) if (this.m_aPoint[o][1] + n - this.m_iDriftStartY > i.m_iCanvasHeight || this.m_aPoint[o][0] + e - this.m_iDriftStartX < 0 || this.m_aPoint[o][1] + n - this.m_iDriftStartY < 0) return this.m_iDriftStartX = e,
                                    void(this.m_iDriftStartY = n);
                                    for (o = 0; o < r; o++) this.m_aPoint[o][0] = this.m_aPoint[o][0] + e - this.m_iDriftStartX,
                                    this.m_aPoint[o][1] = this.m_aPoint[o][1] + n - this.m_iDriftStartY;
                                    this.m_iDriftStartX = e,
                                    this.m_iDriftStartY = n,
                                    this.setEdgePoints(this.m_aPoint),
                                    t()
                                }
                            },
                            {
                                key: "stretch",
                                value: function () {}
                            }]),
                            n
                        }(b),
                        P = function (t) {
                            function e() {
                                a(this, e);
                                var t = r(this, (e.__proto__ || Object.getPrototypeOf(e)).call(this));
                                return t.m_szType = "Grid",
                                t.m_iGridColNum = 22,
                                t.m_iGridRowNum = 18,
                                t.m_szGridMap = "",
                                t.m_aAddGridMap = [],
                                t
                            }
                            return o(e, t),
                            s(e, [{
                                key: "draw",
                                value: function () {
                                    for (var t = i.m_iCanvasWidth / this.m_iGridColNum, e = i.m_iCanvasHeight / this.m_iGridRowNum, n = "", r = 0; r < this.m_iGridRowNum; r++) {
                                        for (var o = this.m_szGridMap.substring(6 * r, 6 * r + 6), a = parseInt("f" + o, 16).toString(2).split("").slice(4), s = "", u = 0; u < this.m_iGridColNum; u++) {
                                            var l = "";
                                            "1" === a[u] ? (i[f].strokeStyle = this.m_szDrawColor, i[f].globalAlpha = 1, i[f].strokeRect(t * u, e * r, t, e), l = "1") : l = "0",
                                            this.m_aAddGridMap.length && 1 === this.m_aAddGridMap[r][u] && (i[f].strokeStyle = this.m_szDrawColor, i[f].strokeRect(t * u, e * r, t, e), l = "1"),
                                            s += l
                                        }
                                        n += parseInt("1111" + s + "00", 2).toString(16).substring(1)
                                    }
                                    this.m_szGridMap = n
                                }
                            },
                            {
                                key: "move",
                                value: function (t, e, n, r) {
                                    var o = i.m_iCanvasWidth / this.m_iGridColNum,
                                        a = i.m_iCanvasHeight / this.m_iGridRowNum,
                                        s = Math.floor(t / o),
                                        u = Math.floor(e / a),
                                        l = Math.floor(Math.abs(n - t) / o),
                                        f = Math.floor(Math.abs(r - e) / a),
                                        c = 1,
                                        h = 1;
                                    c = n - t > 0 ? 1 : -1,
                                    h = r - e > 0 ? 1 : -1;
                                    for (var d = [], p = 0; p < this.m_iGridRowNum; p++) {
                                            d[p] = [];
                                            for (var y = 0; y < this.m_iGridColNum; y++) 1 === c ? 1 === h ? p >= u && p <= u + f && y >= s && y <= s + l ? d[p][y] = 1 : d[p][y] = 0 : p <= u && p >= u - f && y >= s && y <= s + l ? d[p][y] = 1 : d[p][y] = 0 : 1 === h ? p >= u && p <= u + f && y <= s && y >= s - l ? d[p][y] = 1 : d[p][y] = 0 : p <= u && p >= u - f && y <= s && y >= s - l ? d[p][y] = 1 : d[p][y] = 0
                                        }
                                    this.m_aAddGridMap = d,
                                    this.draw()
                                }
                            }]),
                            e
                        }(b),
                        C = function (t) {
                            function e() {
                                a(this, e);
                                var t = r(this, (e.__proto__ || Object.getPrototypeOf(e)).call(this));
                                return t.m_szType = "Line",
                                t.m_iLineType = 0,
                                t.m_iDirection = 0,
                                t.m_iArrowType = 0,
                                t.m_aCrossArrowPoint = [],
                                t
                            }
                            return o(e, t),
                            s(e, [{
                                key: "draw",
                                value: function () {
                                    0 === this.m_iLineType ? this.drawNormalLine() : 1 === this.m_iLineType ? this.drawArrowLine() : 3 === this.m_iLineType ? this.drawCrossLine() : 4 === this.m_iLineType && this.drawLineCount()
                                }
                            },
                            {
                                key: "drawNormalLine",
                                value: function () {
                                    if (i[f].globalAlpha = 1, this.m_aPoint.length > 0) {
                                        i[f].beginPath(),
                                        i[f].strokeStyle = this.m_szDrawColor,
                                        i[f].lineWidth = 2,
                                        i[f].moveTo(this.m_aPoint[0][0], this.m_aPoint[0][1]);
                                        for (var t = 1, e = this.m_aPoint.length; t < e; t++) i[f].lineTo(this.m_aPoint[t][0], this.m_aPoint[t][1]);
                                        if (i[f].stroke(), this.m_bChoosed) for (var n = 0, r = this.m_aPoint.length; n < r; n++) i[f].beginPath(),
                                        i[f].fillStyle = this.m_szDrawColor,
                                        i[f].arc(this.m_aPoint[n][0], this.m_aPoint[n][1], 3, 0, 2 * Math.PI, !0),
                                        i[f].closePath(),
                                        i[f].fill();
                                        "" !== this.m_szTips && (i[f].strokeStyle = this.m_szDrawColor, i[f].fillText(this.m_szTips, this.m_aPoint[0][0] + 10, this.m_aPoint[0][1] + 4))
                                    }
                                }
                            },
                            {
                                key: "drawArrowLine",
                                value: function (t, e, n, r, o, a, s, u) {
                                    a = "undefined" != typeof a ? a : 30,
                                    s = "undefined" != typeof s ? s : 10,
                                    u = "undefined" != typeof u ? u : 1;
                                    var l = 180 * Math.atan2(n - o, e - r) / Math.PI,
                                        c = (l + a) * Math.PI / 180,
                                        h = (l - a) * Math.PI / 180,
                                        d = s * Math.cos(c),
                                        p = s * Math.sin(c),
                                        y = s * Math.cos(h),
                                        m = s * Math.sin(h);
                                    i[f].save(),
                                    i[f].beginPath();
                                    var v = e - d,
                                        g = n - p;
                                    i[f].moveTo(v, g),
                                    i[f].lineTo(e, n),
                                    v = e - y,
                                    g = n - m,
                                    i[f].lineTo(v, g),
                                    i[f].moveTo(e, n),
                                    i[f].lineTo(r, o),
                                    1 === t && (v = r + d, g = o + p, i[f].moveTo(v, g), i[f].lineTo(r, o), v = r + y, g = o + m, i[f].lineTo(v, g)),
                                    i[f].strokeStyle = this.m_szDrawColor,
                                    i[f].lineWidth = u,
                                    i[f].stroke(),
                                    i[f].restore()
                                }
                            },
                            {
                                key: "drawCrossLine",
                                value: function () {
                                    this.drawNormalLine();
                                    var t = (this.m_aPoint[0][0] + this.m_aPoint[1][0]) / 2,
                                        e = (this.m_aPoint[0][1] + this.m_aPoint[1][1]) / 2,
                                        n = 180 * Math.atan2(e - this.m_aPoint[0][1], t - this.m_aPoint[0][0]) / Math.PI,
                                        r = (n + 90) * Math.PI / 180,
                                        o = (n - 90) * Math.PI / 180,
                                        a = 25 * Math.cos(r),
                                        s = 25 * Math.sin(r),
                                        u = 25 * Math.cos(o),
                                        l = 25 * Math.sin(o),
                                        c = 0,
                                        h = 0;
                                    c = t - a,
                                    h = e - s;
                                    var d = 0,
                                        p = 0;
                                    0 === this.m_iDirection ? (d = -10, p = -15) : 1 === this.m_iDirection ? (d = 10, p = 10) : (d = 10, p = -15),
                                    0 !== this.m_iDirection && this.drawArrowLine(0, c, h, t, e),
                                    i[f].strokeStyle = this.m_szDrawColor,
                                    i[f].font = "8px",
                                    i[f].strokeText("A", c + d, h + 4),
                                    c = t - u,
                                    h = e - l,
                                    1 !== this.m_iDirection && this.drawArrowLine(0, c, h, t, e),
                                    i[f].strokeStyle = this.m_szDrawColor,
                                    i[f].font = "8px",
                                    i[f].strokeText("B", c + p, h + 4)
                                }
                            },
                            {
                                key: "drawLineCount",
                                value: function () {
                                    this.drawNormalLine();
                                    var t = (this.m_aPoint[0][0] + this.m_aPoint[1][0]) / 2,
                                        e = (this.m_aPoint[0][1] + this.m_aPoint[1][1]) / 2,
                                        n = 180 * Math.atan2(e - this.m_aPoint[0][1], t - this.m_aPoint[0][0]) / Math.PI,
                                        i = (n + 90) * Math.PI / 180,
                                        r = (n - 90) * Math.PI / 180,
                                        o = 25 * Math.cos(i),
                                        a = 25 * Math.sin(i),
                                        s = 25 * Math.cos(r),
                                        u = 25 * Math.sin(r),
                                        l = 0,
                                        f = 0;
                                    l = t - o,
                                    f = e - a,
                                    1 === this.m_iArrowType ? (l = t - s, f = e - u, this.drawArrowLine(0, l, f, t, e)) : 0 === this.m_iArrowType && this.drawArrowLine(0, l, f, t, e),
                                    this.m_aCrossArrowPoint = [
                                            [t, e],
                                            [l, f]
                                    ]
                                }
                            },
                            {
                                key: "inShape",
                                value: function (t, e) {
                                    for (var n = !1, i = 0, r = this.m_aPoint.length - 1; i < r; i++) {
                                        var o = Math.sqrt((this.m_aPoint[i + 1][0] - this.m_aPoint[i][0]) * (this.m_aPoint[i + 1][0] - this.m_aPoint[i][0]) + (this.m_aPoint[i + 1][1] - this.m_aPoint[i][1]) * (this.m_aPoint[i + 1][1] - this.m_aPoint[i][1])),
                                            a = Math.sqrt((t - this.m_aPoint[i][0]) * (t - this.m_aPoint[i][0]) + (e - this.m_aPoint[i][1]) * (e - this.m_aPoint[i][1])),
                                            s = Math.sqrt((t - this.m_aPoint[i + 1][0]) * (t - this.m_aPoint[i + 1][0]) + (e - this.m_aPoint[i + 1][1]) * (e - this.m_aPoint[i + 1][1]));
                                        a + s - o < 1 && (n = !0)
                                    }
                                    return n
                                }
                            }]),
                            e
                        }(b),
                        x = function (e) {
                            function n() {
                                a(this, n);
                                var t = r(this, (n.__proto__ || Object.getPrototypeOf(n)).call(this));
                                return t.m_szType = "Polygon",
                                t.m_iPolygonType = 1,
                                t
                            }
                            return o(n, e),
                            s(n, [{
                                key: "setPointInfo",
                                value: function (t) {
                                    if (null !== t && "undefined" != typeof t) {
                                        if (0 === this.m_iPolygonType) {
                                            for (var e = t[0][0], n = t[0][1], i = t[0][0], r = t[0][1], o = 0, a = t.length; o < a; o++) e > t[o][0] && (e = t[o][0]),
                                            n > t[o][1] && (n = t[o][1]),
                                            i < t[o][0] && (i = t[o][0]),
                                            r < t[o][1] && (r = t[o][1]);
                                            this.m_aPoint = [
                                                [e, n],
                                                [i, n],
                                                [i, r],
                                                [e, r]
                                            ]
                                        } else 1 === this.m_iPolygonType ? this.m_aPoint = t : this.m_aPoint = t;
                                        this.setEdgePoints(t)
                                    }
                                }
                            },
                            {
                                key: "draw",
                                value: function () {
                                    if (this.m_aPoint.length > 0) {
                                        i[f].fillStyle = this.m_szFillColor,
                                        i[f].strokeStyle = this.m_szDrawColor,
                                        i[f].globalAlpha = 1;
                                        var t = 0,
                                            e = 0;
                                        if (this.m_bChoosed) for (t = 0, e = this.m_aPoint.length; t < e; t++) i[f].beginPath(),
                                        i[f].arc(this.m_aPoint[t][0], this.m_aPoint[t][1], 3, 0, 360, !1),
                                        i[f].fillStyle = this.m_szDrawColor,
                                        i[f].closePath(),
                                        i[f].fill();
                                        for (i[f].beginPath(), i[f].moveTo(this.m_aPoint[0][0], this.m_aPoint[0][1]), t = 0, e = this.m_aPoint.length; t < e; t++) 0 !== t && i[f].lineTo(this.m_aPoint[t][0], this.m_aPoint[t][1]);
                                        i[f].stroke(),
                                        this.m_bClosed && (i[f].fillText(this.m_szTips, (this.m_oEdgePoints.left.x + this.m_oEdgePoints.right.x) / 2, (this.m_oEdgePoints.top.y + this.m_oEdgePoints.bottom.y) / 2), i[f].closePath(), i[f].stroke(), i[f].globalAlpha = this.m_iTranslucent, i[f].fill())
                                    }
                                }
                            },
                            {
                                key: "move",
                                value: function (t, e, n, r) {
                                    if (1 === this.m_iPolygonType) {
                                        if (this.m_aPoint.length < this.m_iMaxPointNum && this.m_aPoint.length > 0) {
                                            i[f].fillStyle = this.m_szFillColor,
                                            i[f].strokeStyle = this.m_szDrawColor,
                                            i[f].globalAlpha = 1;
                                            var o = 0,
                                                a = 0;
                                            for (o = 0, a = this.m_aPoint.length; o < a; o++) i[f].beginPath(),
                                            i[f].arc(this.m_aPoint[o][0], this.m_aPoint[o][1], 3, 0, 360, !1),
                                            i[f].fillStyle = this.m_szDrawColor,
                                            i[f].closePath(),
                                            i[f].fill();
                                            for (i[f].beginPath(), i[f].moveTo(this.m_aPoint[0][0], this.m_aPoint[0][1]), o = 0, a = this.m_aPoint.length; o < a; o++) 0 !== o && i[f].lineTo(this.m_aPoint[o][0], this.m_aPoint[o][1]);
                                            i[f].lineTo(t, e),
                                            i[f].closePath(),
                                            i[f].stroke()
                                        }
                                    } else if (0 === this.m_iPolygonType) {
                                        this.m_bChoosed = !0;
                                        var s = n,
                                            u = r,
                                            l = t,
                                            c = e;
                                        this.setPointInfo([
                                                [s, u],
                                                [l, u],
                                                [l, c],
                                                [s, c]
                                            ]),
                                        this.draw()
                                    }
                                }
                            },
                            {
                                key: "stretch",
                                value: function (e, n) {
                                    0 === this.m_iEditType && (1 === this.m_iPolygonType ? this.m_iIndexChoosePoint !== -1 && (this.m_aPoint[this.m_iIndexChoosePoint][0] = e, this.m_aPoint[this.m_iIndexChoosePoint][1] = n) : 0 === this.m_iIndexChoosePoint ? e < this.m_aPoint[2][0] && n < this.m_aPoint[2][1] && (this.m_aPoint[0][0] = e, this.m_aPoint[0][1] = n, this.m_aPoint[3][0] = e, this.m_aPoint[1][1] = n) : 1 === this.m_iIndexChoosePoint ? e > this.m_aPoint[3][0] && n < this.m_aPoint[3][1] && (this.m_aPoint[1][0] = e, this.m_aPoint[1][1] = n, this.m_aPoint[2][0] = e, this.m_aPoint[0][1] = n) : 2 === this.m_iIndexChoosePoint ? e > this.m_aPoint[0][0] && n > this.m_aPoint[0][1] && (this.m_aPoint[2][0] = e, this.m_aPoint[2][1] = n, this.m_aPoint[1][0] = e, this.m_aPoint[3][1] = n) : 3 === this.m_iIndexChoosePoint && e < this.m_aPoint[1][0] && n > this.m_aPoint[1][1] && (this.m_aPoint[3][0] = e, this.m_aPoint[3][1] = n, this.m_aPoint[0][0] = e, this.m_aPoint[2][1] = n), this.setPointInfo(this.m_aPoint), t())
                                }
                            }]),
                            n
                        }(b),
                        T = function (t) {
                            function e() {
                                a(this, e);
                                var t = r(this, (e.__proto__ || Object.getPrototypeOf(e)).call(this));
                                return t.m_szType = "Point",
                                t.m_szId = "",
                                t
                            }
                            return o(e, t),
                            s(e, [{
                                key: "draw",
                                value: function () {
                                    i[f].beginPath(),
                                    i[f].fillStyle = this.m_szDrawColor,
                                    i[f].globalAlpha = 1,
                                    i[f].arc(this.m_aPoint[0][0], this.m_aPoint[0][1], 10, 0, 2 * Math.PI, !0),
                                    i[f].closePath(),
                                    i[f].fill()
                                }
                            },
                            {
                                key: "drag",
                                value: function () {}
                            },
                            {
                                key: "stretch",
                                value: function () {}
                            }]),
                            e
                        }(b),
                        k = function () {
                            function r(t) {
                                a(this, r),
                                i = this,
                                this[u] = (0, l.
                            default)("#" + t),
                                this[f] = this[u][0].getContext("2d"),
                                this[c] = [],
                                this[h] = !1,
                                this[d] = "Rect",
                                this[p] = 10,
                                this[g] = !0,
                                this[v] = {},
                                this[S] = null,
                                this[y] = {
                                    szDrawColor: "#ff0000",
                                    szFillColor: "#343434",
                                    iTranslucent: .7
                                },
                                this[m] = !1,
                                this.m_iCanvasWidth = this[u].width(),
                                this.m_iCanvasHeight = this[u].height(),
                                this.m_iHorizontalResolution = 0,
                                this.m_iVerticalResolution = 0,
                                this.m_szDisplayMode = "",
                                this.m_szVideoFormat = "",
                                n(),
                                this[c].length = 0
                            }
                            return s(r, [{
                                key: "setDrawMutiShapeOneTime",
                                value: function (t) {
                                    this[g] = t
                                }
                            },
                            {
                                key: "setMaxShapeSupport",
                                value: function (t) {
                                    this[p] = t
                                }
                            },
                            {
                                key: "getMaxShapeSupport",
                                value: function () {
                                    return this[p]
                                }
                            },
                            {
                                key: "setDrawStatus",
                                value: function (t, e) {
                                    this[h] = t,
                                    e && t && (this[S] = e),
                                    t || (this[S] = null)
                                }
                            },
                            {
                                key: "setShapeType",
                                value: function (e) {
                                    this[d] = e,
                                    t()
                                }
                            },
                            {
                                key: "setCurrentShapeInfo",
                                value: function (t) {
                                    this[v] = t || {
                                        szId: "",
                                        szTips: "",
                                        iMinClosed: 3,
                                        iMaxPointNum: 11,
                                        iPolygonType: 1
                                    }
                                }
                            },
                            {
                                key: "getShapeType",
                                value: function () {
                                    return this[d]
                                }
                            },
                            {
                                key: "getAllShapesInfo",
                                value: function () {
                                    for (var t = [], e = 0, n = this[c].length; e < n; e++)"Grid" === this[c][e].m_szType ? t.push({
                                        szType: this[c][e].m_szType,
                                        szGridMap: this[c][e].m_szGridMap,
                                        iGridColNum: this[c][e].m_iGridColNum,
                                        iGridRowNum: this[c][e].m_iGridRowNum
                                    }) : "RectOSD" === this[c][e].m_szType ? t.push({
                                        szType: this[c][e].m_szType,
                                        szText: this[c][e].m_szText,
                                        szEnabled: this[c][e].m_szEnabled,
                                        szOSDType: this[c][e].m_szOSDType,
                                        iPositionX: this[c][e].m_aPoint[0][0],
                                        iPositionY: this[c][e].m_aPoint[0][1],
                                        szDateStyle: this[c][e].m_szDateStyle,
                                        szClockType: this[c][e].m_szClockType,
                                        szDisplayWeek: this[c][e].m_szDisplayWeek,
                                        szId: this[c][e].m_szId
                                    }) : t.push({
                                        szType: this[c][e].m_szType,
                                        aPoint: this[c][e].m_aPoint,
                                        szId: this[c][e].m_szId,
                                        bChoosed: this[c][e].m_bChoosed
                                    });
                                    return t
                                }
                            },
                            {
                                key: "getShapesInfoByType",
                                value: function (t) {
                                    for (var e = [], n = 0, i = this[c].length; n < i; n++) this[c][n].m_szType === t && ("Grid" === this[c][n].m_szType ? e.push({
                                        szType: this[c][n].m_szType,
                                        szGridMap: this[c][n].m_szGridMap,
                                        iGridColNum: this[c][n].m_iGridColNum,
                                        iGridRowNum: this[c][n].m_iGridRowNum
                                    }) : "RectOSD" === this[c][n].m_szType ? e.push({
                                        szType: this[c][n].m_szType,
                                        szText: this[c][n].m_szText,
                                        szEnabled: this[c][n].m_szEnabled,
                                        szOSDType: this[c][n].m_szOSDType,
                                        iPositionX: this[c][n].m_aPoint[0][0],
                                        iPositionY: this[c][n].m_aPoint[0][1],
                                        szDateStyle: this[c][n].m_szDateStyle,
                                        szClockType: this[c][n].m_szClockType,
                                        szDisplayWeek: this[c][n].m_szDisplayWeek,
                                        szId: this[c][n].m_szId
                                    }) : "Polygon" === t ? e.push({
                                        szType: this[c][n].m_szType,
                                        szId: this[c][n].m_szId,
                                        iPolygonType: this[c][n].m_iPolygonType,
                                        iMinClosed: this[c][n].m_iMinClosed,
                                        iMaxPointNum: this[c][n].m_iMaxPointNum,
                                        iEditType: this[c][n].m_iEditType,
                                        aPoint: this[c][n].m_aPoint,
                                        bClosed: this[c][n].m_bClosed,
                                        szTips: this[c][n].m_szTips,
                                        szDrawColor: this[c][n].m_szDrawColor,
                                        szFillColor: this[c][n].m_szFillColor,
                                        iTranslucent: this[c][n].m_iTranslucent
                                    }) : "Line" === t ? e.push({
                                        szType: this[c][n].m_szType,
                                        szId: this[c][n].m_szId,
                                        aPoint: this[c][n].m_aPoint,
                                        szTips: this[c][n].m_szTips,
                                        iLineType: this[c][n].m_iLineType,
                                        iDirection: this[c][n].m_iDirection,
                                        iArrowType: this[c][n].m_iArrowType,
                                        szDrawColor: this[c][n].m_szDrawColor,
                                        aCrossArrowPoint: this[c][n].m_aCrossArrowPoint
                                    }) : "Rect" === t ? e.push({
                                        szType: this[c][n].m_szType,
                                        iEditType: this[c][n].m_iEditType,
                                        aPoint: this[c][n].m_aPoint,
                                        szTips: this[c][n].m_szTips,
                                        szDrawColor: this[c][n].m_szDrawColor,
                                        szFillColor: this[c][n].m_szFillColor,
                                        iTranslucent: this[c][n].m_iTranslucent
                                    }) : e.push({
                                        szType: this[c][n].m_szType,
                                        aPoint: this[c][n].m_aPoint
                                    }));
                                    return e
                                }
                            },
                            {
                                key: "setShapesInfoByType",
                                value: function (n, i) {
                                    i || (i = []);
                                    var r = null;
                                    if ("Rect" === n || "Polygon" === n || "Line" === n || "Point" === n) for (var o = 0, a = i.length; o < a; o++)"Rect" === n ? (r = new w, r.m_iEditType = i[o].iEditType, r.m_szTips = i[o].szTips || "", r.m_szDrawColor = i[o].szDrawColor, r.m_szFillColor = i[o].szFillColor, r.m_iTranslucent = i[o].iTranslucent) : "Polygon" === n ? (r = new x, 0 === i[o].iPolygonType ? r.m_bClosed = !0 : r.m_bClosed = i[o].bClosed, r.m_szTips = i[o].szTips || "", r.m_szId = i[o].szId || "", r.m_iPolygonType = i[o].iPolygonType, r.m_iMinClosed = i[o].iMinClosed || 3, r.m_iMaxPointNum = i[o].iMaxPointNum || 11, r.m_iEditType = i[o].iEditType, r.m_szDrawColor = i[o].szDrawColor, r.m_szFillColor = i[o].szFillColor, r.m_iTranslucent = i[o].iTranslucent) : "Line" === n ? (r = new C, r.m_iLineType = i[o].iLineType, r.m_szTips = i[o].szTips || "", r.m_szId = i[o].szId, r.m_iDirection = i[o].iDirection, r.m_iArrowType = i[o].iArrowType, r.m_szDrawColor = i[o].szDrawColor, r.setPointInfo(i[o].aPoint)) : "Point" === n && (r = new T, r.m_szId = i[o].szId, r.m_szDrawColor = i[o].szDrawColor, r.setPointInfo(i[o].aPoint)),
                                    r.setPointInfo(i[o].aPoint),
                                    0 === o && (r.m_bChoosed = !0),
                                    e(r);
                                    else "Grid" === n && (r = new P, r.m_szGridMap = i[0].szGridMap || "", r.m_iGridColNum = i[0].iGridColNum || 22, r.m_iGridRowNum = i[0].iGridRowNum || 18, e(r));
                                    t()
                                }
                            },
                            {
                                key: "addOSDShape",
                                value: function (n, i, r, o, a) {
                                    r || o || (r = 0, o = 0),
                                    a || (a = {});
                                    var s = new _(n, i),
                                        u = 10 * n.length;
                                    s.m_aPoint = [
                                            [r, o],
                                            [u + r, o],
                                            [u + r, o + 20],
                                            [r, o + 20]
                                    ],
                                    s.m_szOSDType = a.szOSDType || "",
                                    s.m_szDateStyle = a.szDateStyle || "",
                                    s.m_szClockType = a.szClockType || "",
                                    s.m_szDisplayWeek = a.szDisplayWeek || "",
                                    s.m_szId = a.szId || "",
                                    e(s),
                                    t()
                                }
                            },
                            {
                                key: "selectShapeById",
                                value: function (e, n) {
                                    for (var r = 0, o = i[c].length; r < o; r++) e === i[c][r].m_szType && (n === i[c][r].m_szId ? i[c][r].m_bChoosed = !0 : i[c][r].m_bChoosed = !1);
                                    t()
                                }
                            },
                            {
                                key: "setCanvasSize",
                                value: function (e, n) {
                                    e > 0 && n > 0 && (this.m_iCanvasWidth = e, this.m_iCanvasHeight = n, t())
                                }
                            },
                            {
                                key: "setDrawStyle",
                                value: function (t, e, n) {
                                    this[y] = {
                                        szDrawColor: t,
                                        szFillColor: e,
                                        iTranslucent: n
                                    }
                                }
                            },
                            {
                                key: "clearAllShape",
                                value: function () {
                                    this[c].length = 0,
                                    t()
                                }
                            },
                            {
                                key: "clearShapeByType",
                                value: function (e) {
                                    for (var n = this[c].length, i = n; i > 0; i--) this[c][i - 1].m_szType === e && ("Grid" === e ? (this[c][i - 1].m_szGridMap = "", this[c][i - 1].m_aAddGridMap = []) : this[c].splice(i - 1, 1));
                                    t()
                                }
                            },
                            {
                                key: "deleteShape",
                                value: function (e) {
                                    this[c].length > e && this[c].splice(e, 1),
                                    t()
                                }
                            },
                            {
                                key: "updateCanvas",
                                value: function (t) {
                                    this[u] = (0, l.
                                default)("#" + t),
                                    this[f] = this[u][0].getContext("2d"),
                                    this.m_iCanvasWidth = this[u].width(),
                                    this.m_iCanvasHeight = this[u].height(),
                                    n()
                                }
                            },
                            {
                                key: "resizeCanvas",
                                value: function () {
                                    this.m_iCanvasWidth = this[u].width(),
                                    this.m_iCanvasHeight = this[u].height()
                                }
                            },
                            {
                                key: "canvasRedraw",
                                value: function () {
                                    t()
                                }
                            }]),
                            r
                        }();
                    return k
                }
            }();
        e.ESCanvas = f
    },
 
 
    function (t, e, n) {
        "use strict";
 
        function i(t) {
            return t && t.__esModule ? t : {
            default:
                t
            }
        }
        function r(t, e) {
            if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function")
        }
        Object.defineProperty(e, "__esModule", {
            value: !0
        }),
        e.StorageManager = void 0;
        var o = function () {
            function t(t, e) {
                for (var n = 0; n < e.length; n++) {
                    var i = e[n];
                    i.enumerable = i.enumerable || !1,
                    i.configurable = !0,
                    "value" in i && (i.writable = !0),
                    Object.defineProperty(t, i.key, i)
                }
            }
            return function (e, n, i) {
                return n && t(e.prototype, n),
                i && t(e, i),
                e
            }
        }(),
            a = n(2),
            s = i(a),
            u = n(5),
            l = "Web/RecordFiles/",
            f = "Web/PlaybackFiles/",
            c = 1e3,
            h = 1,
            d = 3001;
        window.requestFileSystem = window.requestFileSystem || window.webkitRequestFileSystem,
        window.URL = window.URL || window.webkitURL;
        var p = function () {
                function t(e, n, i, o) {
                    r(this, t),
                    this.szUUID = e,
                    this.szFileName = n,
                    this.iStreamType = i,
                    this.szPath = "",
                    this.bStart = !1,
                    this.aStreamList = [],
                    this.options = o
                }
                return o(t, [{
                    key: "init",
                    value: function () {
                        var t = this;
                        0 === this.iStreamType ? this.szPath = l : 1 === this.iStreamType && (this.szPath = f),
                        this.szPath += this.getDateDir();
                        var e = t.szPath.split("/"),
                            n = new Promise(function (n) {
                                window.requestFileSystem(window.TEMPORARY, t.options.iFileSize, function (i) {
                                    t.createDir(i.root, e, function () {
                                        n()
                                    })
                                }, t.errorHandler)
                            });
                        return n
                    }
                },
                {
                    key: "getDateDir",
                    value: function () {
                        return u.oTool.dateFormat(new Date, "yyyy-MM-dd")
                    }
                },
                {
                    key: "createDir",
                    value: function (t, e, n) {
                        var i = this;
                        e.length ? t.getDirectory(e[0], {
                            create: !0
                        }, function (t) {
                            i.createDir(t, e.slice(1), n)
                        }, i.errorHandler) : n()
                    }
                },
                {
                    key: "errorHandler",
                    value: function () {}
                },
                {
                    key: "writeFileHeader",
                    value: function (t) {
                        var e = this;
                        window.requestFileSystem(window.TEMPORARY, e.options.iFileSize, function (n) {
                            n.root.getFile(e.szPath + "/" + e.szFileName, {
                                create: !0
                            }, function (n) {
                                n.createWriter(function (n) {
                                    n.onwriteend = function () {
                                        e.bStart = !0,
                                        e.writeFile(n)
                                    },
                                    n.onerror = function () {},
                                    n.seek(n.length);
                                    var i = new Blob([t]);
                                    n.write(i)
                                }, e.errorHandler)
                            }, e.errorHandler)
                        }, e.errorHandler)
                    }
                },
                {
                    key: "writeFileContent",
                    value: function (t) {
                        this.aStreamList.push(t)
                    }
                },
                {
                    key: "writeFile",
                    value: function (t) {
                        var e = this;
                        if (this.bStart) if (this.aStreamList.length > 0) {
                            var n = this.aStreamList.shift();
                            if (t.seek(t.length), t.length >= this.options.iFileSize) return void(this.options.cbEventHandler && this.options.cbEventHandler(d, this.szUUID));
                            var i = new Blob([n]);
                            t.write(i)
                        } else setTimeout(function () {
                            e.writeFile(t)
                        }, c)
                    }
                },
                {
                    key: "stopWriteFile",
                    value: function () {
                        var t = this;
                        this.bStart = !1,
                        this.aStreamList.length = 0;
                        var e = new Promise(function (e) {
                            window.requestFileSystem(window.TEMPORARY, t.options.iFileSize, function (n) {
                                n.root.getFile(t.szPath + "/" + t.szFileName, {
                                    create: !1
                                }, function (t) {
                                    t.file(function (t) {
                                        e(),
                                        u.oTool.downloadFile(t, t.name)
                                    })
                                }, t.errorHandler)
                            }, t.errorHandler)
                        });
                        return e
                    }
                }]),
                t
            }(),
            y = function () {
                function t(e, n, i, o, a, s, u) {
                    r(this, t),
                    this.szBasePath = e,
                    this.szUUID = n,
                    this.szFileName = i,
                    this.aHeadBuf = new Uint8Array(o),
                    this.iPackType = a,
                    this.iStreamType = s,
                    this.oWorker = null,
                    this.oFileSystem = null,
                    this.options = u
                }
                return o(t, [{
                    key: "init",
                    value: function () {
                        var t = this,
                            e = new Promise(function (e, n) {
                                t.initFileSystem().then(function () {
                                    t.initWorker().then(function () {
                                        e(t.szUUID)
                                    }, function (t) {
                                        n(t)
                                    })
                                }, function (t) {
                                    n(t)
                                })
                            });
                        return e
                    }
                },
                {
                    key: "initFileSystem",
                    value: function () {
                        var t = this;
                        this.oFileSystem = new p(this.szUUID, this.szFileName, this.iStreamType, this.options);
                        var e = new Promise(function (e, n) {
                            t.oFileSystem.init().then(function () {
                                e()
                            }, function (t) {
                                n(t)
                            })
                        });
                        return e
                    }
                },
                {
                    key: "initWorker",
                    value: function () {
                        var t = this,
                            e = new Promise(function (e) {
                                t.oWorker = new Worker(t.szBasePath + "/systemTransform-worker.min.js"),
                                t.oWorker.onmessage = function (n) {
                                    var i = n.data;
                                    if ("loaded" === i.type) t.oWorker.postMessage({
                                        type: "create",
                                        buf: t.aHeadBuf.buffer,
                                        len: 40,
                                        packType: t.iPackType
                                    }, [t.aHeadBuf.buffer]);
                                    else if ("created" === i.type) e();
                                    else if ("outputData" === i.type) {
                                        var r = new Uint8Array(i.buf);
                                        h === i.dType ? t.oFileSystem.writeFileHeader(r) : t.oFileSystem.writeFileContent(r)
                                    }
                                }
                            });
                        return e
                    }
                },
                {
                    key: "inputData",
                    value: function (t) {
                        if (this.oWorker) {
                            var e = new Uint8Array(t);
                            this.oWorker.postMessage({
                                type: "inputData",
                                buf: e.buffer,
                                len: e.length
                            }, [e.buffer])
                        }
                    }
                },
                {
                    key: "stopRecord",
                    value: function () {
                        var t = this,
                            e = new Promise(function (e, n) {
                                t.oWorker ? t.oWorker.postMessage({
                                    type: "release"
                                }) : n(),
                                t.oFileSystem ? t.oFileSystem.stopWriteFile().then(function () {
                                    e()
                                }, function () {
                                    n()
                                }) : n()
                            });
                        return e
                    }
                }]),
                t
            }(),
            m = function () {
                if ("undefined" != typeof Symbol) {
                    var t = Symbol("STORAGELIST"),
                        e = function () {
                            function e(n, i) {
                                r(this, e),
                                this.szBasePath = n,
                                this[t] = {},
                                this.options = {
                                    iFileSize: 1073741824
                                },
                                Object.assign(this.options, i)
                            }
                            return o(e, [{
                                key: "startRecord",
                                value: function (e, n, i, r, o) {
                                    var a = this,
                                        u = s.
                                default.v4(),
                                        l = Object.assign({}, this.options, o),
                                        f = new y(this.szBasePath, u, e, n, i, r, l),
                                        c = new Promise(function (e, n) {
                                            f.init().then(function (n) {
                                                a[t][n] = f,
                                                e(n)
                                            }, function (t) {
                                                n(t)
                                            })
                                        });
                                    return c
                                }
                            },
                            {
                                key: "inputData",
                                value: function (e, n) {
                                    var i = this[t][e];
                                    i && i.inputData(n)
                                }
                            },
                            {
                                key: "stopRecord",
                                value: function (e) {
                                    var n = this,
                                        i = new Promise(function (i, r) {
                                            var o = n[t][e];
                                            o ? o.stopRecord().then(function () {
                                                delete n[t][e],
                                                i()
                                            }, function () {
                                                r()
                                            }) : r()
                                        });
                                    return i
                                }
                            }]),
                            e
                        }();
                    return e
                }
            }();
        e.StorageManager = m
    },
 
 
    function (t, e) {
        "use strict";
 
        function n(t, e) {
            if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function")
        }
        Object.defineProperty(e, "__esModule", {
            value: !0
        });
        var i = function () {
            function t(t, e) {
                for (var n = 0; n < e.length; n++) {
                    var i = e[n];
                    i.enumerable = i.enumerable || !1,
                    i.configurable = !0,
                    "value" in i && (i.writable = !0),
                    Object.defineProperty(t, i.key, i)
                }
            }
            return function (e, n, i) {
                return n && t(e.prototype, n),
                i && t(e, i),
                e
            }
        }(),
            r = 3001,
            o = 3002,
            a = 3003,
            s = function () {
                if ("undefined" != typeof Symbol) {
                    var t = function () {
                        function t() {
                            n(this, t)
                        }
                        return i(t, [{
                            key: "createClientObject",
                            value: function (t, e, n) {
                                return {
                                    socket: t,
                                    id: e,
                                    playURL: n,
                                    resolve: null,
                                    reject: null
                                }
                            }
                        },
                        {
                            key: "getMediaFromSdp",
                            value: function (t) {
                                for (var e = t.indexOf("MEDIAINFO=") + 10, n = t.slice(e, e + 80), i = [], r = 0, o = n.length / 2; r < o; r++) i[r] = parseInt(n.slice(2 * r, 2 * r + 2), 16);
                                return new Uint8Array(i)
                            }
                        },
                        {
                            key: "playCmd",
                            value: function (t) {
                                var e = {
                                    sequence: 0,
                                    cmd: "realplay",
                                    url: t
                                };
                                return JSON.stringify(e)
                            }
                        },
                        {
                            key: "playbackCmd",
                            value: function (t, e, n) {
                                var i = {
                                    sequence: 0,
                                    cmd: "playback",
                                    url: n,
                                    startTime: t,
                                    endTime: e
                                };
                                return JSON.stringify(i)
                            }
                        },
                        {
                            key: "playRateCmd",
                            value: function (t) {
                                var e = {
                                    sequence: 0,
                                    cmd: "speed",
                                    rate: t
                                };
                                return JSON.stringify(e)
                            }
                        },
                        {
                            key: "pauseCmd",
                            value: function () {
                                var t = {
                                    sequence: 0,
                                    cmd: "pause"
                                };
                                return JSON.stringify(t)
                            }
                        },
                        {
                            key: "resumeCmd",
                            value: function () {
                                var t = {
                                    sequence: 0,
                                    cmd: "resume"
                                };
                                return JSON.stringify(t)
                            }
                        },
                        {
                            key: "getError",
                            value: function (t) {
                                var e = r;
                                return t && (6 === parseInt(t.statusCode, 10) && "streamLimit" === t.subStatusCode ? e = o : 4 === parseInt(t.statusCode, 10) && "badAuthorization" === t.subStatusCode && (e = a)),
                                {
                                    iErrorNum: e,
                                    oError: t
                                }
                            }
                        }]),
                        t
                    }();
                    return t
                }
            }();
        e.DirectDevice = s
    },
 
 
    function (t, e) {
        "use strict";
 
        function n(t, e) {
            if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function")
        }
        Object.defineProperty(e, "__esModule", {
            value: !0
        });
        var i = function () {
            function t(t, e) {
                for (var n = 0; n < e.length; n++) {
                    var i = e[n];
                    i.enumerable = i.enumerable || !1,
                    i.configurable = !0,
                    "value" in i && (i.writable = !0),
                    Object.defineProperty(t, i.key, i)
                }
            }
            return function (e, n, i) {
                return n && t(e.prototype, n),
                i && t(e, i),
                e
            }
        }(),
            r = function () {
                if ("undefined" != typeof Symbol) {
                    var t = function () {
                        function t() {
                            n(this, t)
                        }
                        return i(t, [{
                            key: "createClientObject",
                            value: function (t, e, n, i) {
                                return {
                                    socket: t,
                                    id: e,
                                    iCurChannel: n,
                                    iCurStream: i,
                                    resolve: null,
                                    reject: null
                                }
                            }
                        },
                        {
                            key: "zeroPlayCmd",
                            value: function (t, e) {
                                var n = [0, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, t + 1, 0, 0, 0, e, 0, 0, 4, 0];
                                return new Uint8Array(n)
                            }
                        },
                        {
                            key: "playCmd",
                            value: function (t, e) {
                                var n = [0, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, t, 0, 0, 0, e, 0, 0, 4, 0];
                                return new Uint8Array(n)
                            }
                        },
                        {
                            key: "playbackCmd",
                            value: function (t, e, n, i) {
                                var r = t.split("T")[0],
                                    o = t.split("T")[1],
                                    a = "0" + parseInt(r.substring(0, 4), 10).toString(16),
                                    s = parseInt(r.substring(4, 6), 10),
                                    u = parseInt(r.substring(6), 10),
                                    l = parseInt(o.substring(0, 2), 10),
                                    f = parseInt(o.substring(2, 4), 10),
                                    c = parseInt(o.substring(4, 6), 10),
                                    h = e.split("T")[0],
                                    d = e.split("T")[1],
                                    p = "0" + parseInt(h.substring(0, 4), 10).toString(16),
                                    y = parseInt(h.substring(4, 6), 10),
                                    m = parseInt(d.substring(0, 2), 10),
                                    v = parseInt(d.substring(2, 4), 10),
                                    g = parseInt(d.substring(4, 6), 10),
                                    S = [0, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, n, 0, 0, parseInt(a.substring(0, 2), 16), parseInt(a.substring(2, 4), 16), 0, 0, 0, s, 0, 0, 0, u, 0, 0, 0, l, 0, 0, 0, f, 0, 0, 0, c, 0, 0, parseInt(p.substring(0, 2), 16), parseInt(p.substring(2, 4), 16), 0, 0, 0, y, 0, 0, 0, u, 0, 0, 0, m, 0, 0, 0, v, 0, 0, 0, g, 0, 0, 0, 0, 0, 0, 0, 0, i, 0, 0, 0];
                                return new Uint8Array(S)
                            }
                        },
                        {
                            key: "playRateCmd",
                            value: function (t) {
                                for (var e = (parseInt(t, 10) >>> 0).toString(16).toLocaleUpperCase().toString(16), n = e.length; n < 8; n++) e = "0" + e;
                                for (var i = [0, 0, 0, 0], r = 0, o = e.length; r < o; r += 2) i[Math.floor(r / 2)] = parseInt(e.substring(r, r + 2), 16);
                                var a = [0, 0, 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, i[0], i[1], i[2], i[3]];
                                return new Uint8Array(a)
                            }
                        },
                        {
                            key: "pauseCmd",
                            value: function () {
                                var t = [0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
                                return new Uint8Array(t)
                            }
                        },
                        {
                            key: "resumeCmd",
                            value: function () {
                                var t = [0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
                                return new Uint8Array(t)
                            }
                        }]),
                        t
                    }();
                    return t
                }
            }();
        e.DirectDeviceCustom = r
    },
 
 
    function (t, e, n) {
        "use strict";
 
        function i(t) {
            return t && t.__esModule ? t : {
            default:
                t
            }
        }
        function r(t, e) {
            if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function")
        }
        Object.defineProperty(e, "__esModule", {
            value: !0
        }),
        e.LiveMedia = void 0;
        var o = function () {
            function t(t, e) {
                for (var n = 0; n < e.length; n++) {
                    var i = e[n];
                    i.enumerable = i.enumerable || !1,
                    i.configurable = !0,
                    "value" in i && (i.writable = !0),
                    Object.defineProperty(t, i.key, i)
                }
            }
            return function (e, n, i) {
                return n && t(e.prototype, n),
                i && t(e, i),
                e
            }
        }(),
            a = n(18),
            s = i(a),
            u = n(17),
            l = i(u),
            f = function () {
                if ("undefined" != typeof Symbol) {
                    var t = function () {
                        function t() {
                            r(this, t)
                        }
                        return o(t, [{
                            key: "createClientObject",
                            value: function (t, e, n, i, r) {
                                var o = l.
                            default.AES.encrypt((new Date).getTime().toString(), l.
                            default.enc.Hex.parse("1234567891234567123456789123456712345678912345671234567891234567"), {
                                    mode: l.
                                default.mode.CBC,
                                    iv:
                                    l.
                                default.enc.Hex.parse("12345678912345671234567891234567"),
                                    padding:
                                    l.
                                default.pad.Pkcs7
                                }).ciphertext.toString();
                                o.length < 64 && (o += o);
                                var a = l.
                            default.AES.encrypt((new Date).getTime().toString(), l.
                            default.enc.Hex.parse("12345678912345671234567891234567"), {
                                    mode: l.
                                default.mode.CBC,
                                    iv:
                                    l.
                                default.enc.Hex.parse("12345678912345671234567891234567"),
                                    padding:
                                    l.
                                default.pad.Pkcs7
                                }).ciphertext.toString();
                                return {
                                    socket: t,
                                    id: e,
                                    PKD: n,
                                    rand: i,
                                    playURL: r.playURL || "",
                                    auth: r.auth || "",
                                    token: r.token || "",
                                    key: o,
                                    iv: a,
                                    resolve: null,
                                    reject: null
                                }
                            }
                        },
                        {
                            key: "playCmd",
                            value: function (t) {
                                var e = {
                                    sequence: 0,
                                    cmd: "realplay",
                                    url: t.playURL,
                                    key: s.
                                default.encrypt(t.iv + ":" + t.key, t.PKD).cipher.split("?")[0],
                                    authorization:
                                    l.
                                default.AES.encrypt(t.rand + ":" + t.auth, l.
                                default.enc.Hex.parse(t.key), {
                                        mode: l.
                                    default.mode.CBC,
                                        iv:
                                        l.
                                    default.enc.Hex.parse(t.iv),
                                        padding:
                                        l.
                                    default.pad.Pkcs7
                                    }).ciphertext.toString(),
                                    token:
                                    l.
                                default.AES.encrypt(t.token, l.
                                default.enc.Hex.parse(t.key), {
                                        mode: l.
                                    default.mode.CBC,
                                        iv:
                                        l.
                                    default.enc.Hex.parse(t.iv),
                                        padding:
                                        l.
                                    default.pad.Pkcs7
                                    }).ciphertext.toString()
                                };
                                return JSON.stringify(e)
                            }
                        },
                        {
                            key: "playbackCmd",
                            value: function (t, e, n) {
                                var i = {
                                    sequence: 0,
                                    cmd: "playback",
                                    url: t.playURL,
                                    key: s.
                                default.encrypt(t.iv + ":" + t.key, t.PKD).cipher.split("?")[0],
                                    authorization:
                                    l.
                                default.AES.encrypt(t.rand + ":" + t.auth, l.
                                default.enc.Hex.parse(t.key), {
                                        mode: l.
                                    default.mode.CBC,
                                        iv:
                                        l.
                                    default.enc.Hex.parse(t.iv),
                                        padding:
                                        l.
                                    default.pad.Pkcs7
                                    }).ciphertext.toString(),
                                    token:
                                    l.
                                default.AES.encrypt(t.token, l.
                                default.enc.Hex.parse(t.key), {
                                        mode: l.
                                    default.mode.CBC,
                                        iv:
                                        l.
                                    default.enc.Hex.parse(t.iv),
                                        padding:
                                        l.
                                    default.pad.Pkcs7
                                    }).ciphertext.toString(),
                                    startTime:
                                    e,
                                    endTime: n
                                };
                                return JSON.stringify(i)
                            }
                        },
                        {
                            key: "seekCmd",
                            value: function (t, e) {
                                var n = {
                                    sequence: 0,
                                    cmd: "seek",
                                    startTime: t,
                                    endTime: e
                                };
                                return JSON.stringify(n)
                            }
                        }]),
                        t
                    }();
                    return t
                }
            }();
        e.LiveMedia = f
    },
 
 
    function (t, e) {
        "use strict";
 
        function n(t, e) {
            if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function")
        }
        Object.defineProperty(e, "__esModule", {
            value: !0
        });
        var i = function () {
            function t(t, e) {
                for (var n = 0; n < e.length; n++) {
                    var i = e[n];
                    i.enumerable = i.enumerable || !1,
                    i.configurable = !0,
                    "value" in i && (i.writable = !0),
                    Object.defineProperty(t, i.key, i)
                }
            }
            return function (e, n, i) {
                return n && t(e.prototype, n),
                i && t(e, i),
                e
            }
        }(),
            r = function () {
                if ("undefined" != typeof Symbol) {
                    var t = function () {
                        function t() {
                            n(this, t)
                        }
                        return i(t, [{
                            key: "createClientObject",
                            value: function (t, e, n, i) {
                                return {
                                    socket: t,
                                    id: e,
                                    playURL: n,
                                    deviceSerial: i.deviceSerial || "",
                                    verificationCode: i.verificationCode || "",
                                    resolve: null,
                                    reject: null
                                }
                            }
                        },
                        {
                            key: "playCmd",
                            value: function (t) {
                                var e = {
                                    sequence: 0,
                                    cmd: "realplay",
                                    deviceSerial: t.deviceSerial,
                                    verificationCode: t.verificationCode,
                                    url: t.playURL
                                };
                                return JSON.stringify(e)
                            }
                        },
                        {
                            key: "playbackCmd",
                            value: function (t, e, n) {
                                var i = {
                                    sequence: 0,
                                    cmd: "playback",
                                    deviceSerial: t.deviceSerial,
                                    verificationCode: t.verificationCode,
                                    url: t.playURL,
                                    startTime: e,
                                    endTime: n
                                };
                                return JSON.stringify(i)
                            }
                        }]),
                        t
                    }();
                    return t
                }
            }();
        e.LocalService = r
    },
 
 
    function (t, e, n) {
        "use strict";
 
        function i(t) {
            return t && t.__esModule ? t : {
            default:
                t
            }
        }
        function r(t, e) {
            if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function")
        }
        Object.defineProperty(e, "__esModule", {
            value: !0
        }),
        e.StreamClient = void 0;
        var o = function () {
            function t(t, e) {
                for (var n = 0; n < e.length; n++) {
                    var i = e[n];
                    i.enumerable = i.enumerable || !1,
                    i.configurable = !0,
                    "value" in i && (i.writable = !0),
                    Object.defineProperty(t, i.key, i)
                }
            }
            return function (e, n, i) {
                return n && t(e.prototype, n),
                i && t(e, i),
                e
            }
        }(),
            a = n(2),
            s = i(a),
            u = n(12),
            l = n(11),
            f = n(13),
            c = n(14),
            h = function () {
                if ("undefined" != typeof Symbol) {
                    var t = Symbol("WEBSOCKET"),
                        e = Symbol("GETINDEX"),
                        n = Symbol("PROTOCOLVERSION"),
                        i = Symbol("CIPHERSUITES"),
                        a = new u.DirectDeviceCustom,
                        h = new l.DirectDevice,
                        d = new f.LiveMedia,
                        p = new c.LocalService,
                        y = function () {
                            function u() {
                                r(this, u),
                                this[n] = "0.1",
                                this[i] = 0,
                                this[t] = [],
                                this.ERRORS = {},
                                this[e] = function (e) {
                                    for (var n = -1, i = 0, r = this[t].length; i < r; i++) if (this[t][i].id === e) {
                                        n = i;
                                        break
                                    }
                                    return n
                                }
                            }
                            return o(u, [{
                                key: "openStream",
                                value: function (r, o, u, l) {
                                    var f = !1;
                                    r.indexOf("[") > -1 && (f = !0);
                                    var c = this,
                                        y = r.split("://"),
                                        m = y[0],
                                        v = "",
                                        g = 7681,
                                        S = 1,
                                        b = 0;
                                    f ? (v = y[1].split("]:")[0] + "]", g = Math.floor(y[1].split("]:")[1].split("/")[0]), S = Math.floor(y[1].split("]:")[1].split("/")[1] / 100), b = Math.floor(y[1].split("]:")[1].split("/")[1] % 100) - 1) : (v = y[1].split(":")[0], g = Math.floor(y[1].split(":")[1].split("/")[0]), S = Math.floor(y[1].split(":")[1].split("/")[1] / 100), b = Math.floor(y[1].split(":")[1].split("/")[1] % 100) - 1),
                                    0 === S && (b = 0),
                                    o = o || {};
                                    var w = o.sessionID || o.session || "",
                                        _ = new window.WebSocket(m + "://" + v + ":" + g + "?version=" + c[n] + "&cipherSuites=" + c[i] + "&sessionID=" + w);
                                    _.binaryType = "arraybuffer";
                                    var P = s.
                                default.v4(),
                                        C = new Promise(function (r, s) {
                                            _.onopen = function () {
                                                o.playURL || o.sessionID || o.deviceSerial || (c[t].push(a.createClientObject(_, P, S, b)), r(P))
                                            },
                                            _.onmessage = function (a) {
                                                if ("string" == typeof a.data) {
                                                    var l = JSON.parse(a.data),
                                                        f = c[e](P);
                                                    if (l && l.version && l.cipherSuite) {
                                                            if (c[n] = l.version, c[i] = parseInt(l.cipherSuite, 10), l && l.PKD && l.rand) c[t].push(d.createClientObject(_, P, l.PKD, l.rand, o));
                                                            else {
                                                                var y = "live://" + v + ":" + g + "/" + S + "/" + b;
                                                                c[i] === -1 ? c[t].push(p.createClientObject(_, P, y, o)) : c[t].push(h.createClientObject(_, P, y))
                                                            }
                                                            return void r(P)
                                                        }
                                                    if (l && l.sdp) {
                                                            var m = h.getMediaFromSdp(l.sdp);
                                                            u({
                                                                bHead: !0,
                                                                buf: m
                                                            })
                                                        }
                                                    if (l && l.cmd && "end" === l.cmd && u({
                                                            type: "exception",
                                                            cmd: l.cmd
                                                        }), l && l.statusString && ("ok" === l.statusString.toLowerCase() && c[t][f].resolve && c[t][f].resolve(l), "ok" !== l.statusString.toLowerCase())) {
                                                            var w = h.getError(l);
                                                            f > -1 ? c[t][f].reject && c[t][f].reject(w) : s(w)
                                                        }
                                                } else {
                                                    var C = {},
                                                        x = new Uint8Array(a.data);
                                                    if (64 === x.byteLength || 40 === x.byteLength) {
                                                            for (var T = -1, k = x.byteLength, D = 0; D < k; D++) if (73 === x[D] && 77 === x[D + 1] && 75 === x[D + 2] && 72 === x[D + 3]) {
                                                                T = D;
                                                                break
                                                            }
                                                            if (T !== -1) {
                                                                var M = x.slice(T, T + 40);
                                                                C = {
                                                                    bHead: !0,
                                                                    buf: M
                                                                }
                                                            } else C = {
                                                                bHead: !1,
                                                                buf: x
                                                            }
                                                        } else C = {
                                                            bHead: !1,
                                                            buf: x
                                                        };
                                                    u(C),
                                                    x = null,
                                                    C = null,
                                                    a = null
                                                }
                                            },
                                            _.onclose = function () {
                                                for (var e = 0, n = c[t].length; e < n; e++) if (c[t][e].id === P) {
                                                    c[t][e].resolve(),
                                                    c[t].splice(e, 1),
                                                    setTimeout(function () {
                                                        l()
                                                    }, 200);
                                                    break
                                                }
                                                s()
                                            }
                                        });
                                    return C
                                }
                            },
                            {
                                key: "startPlay",
                                value: function (r, o, s) {
                                    var u = this,
                                        l = this[e](r);
                                    o && s && "0.1" === u[n] && (o = o.replace(/-/g, "").replace(/:/g, ""), s = s.replace(/-/g, "").replace(/:/g, ""));
                                    var f = new Promise(function (e, r) {
                                            if (l > -1) {
                                                u[t][l].resolve = e,
                                                u[t][l].reject = r;
                                                var f = null;
                                                o && s ? "0.1" !== u[n] ? 0 === u[i] ? f = d.playbackCmd(u[t][l], o, s) : 1 === u[i] ? f = h.playbackCmd(o, s, u[t][l].playURL) : u[i] === -1 && (f = p.playbackCmd(u[t][l], o, s)) : f = a.playbackCmd(o, s, u[t][l].iCurChannel, u[t][l].iCurStream) : 0 === u[t][l].iCurChannel && "0.1" === u[n] ? f = a.zeroPlayCmd(u[t][l].iCurChannel, u[t][l].iCurStream) : "0.1" !== u[n] ? 0 === u[i] ? f = d.playCmd(u[t][l]) : 1 === u[i] ? f = h.playCmd(u[t][l].playURL) : u[i] === -1 && (f = p.playCmd(u[t][l])) : f = a.playCmd(u[t][l].iCurChannel, u[t][l].iCurStream),
                                                u[t][l].socket.send(f),
                                                "0.1" === u[n] && e()
                                            } else "0.1" === u[n] && r()
                                        });
                                    return f
                                }
                            },
                            {
                                key: "singleFrame",
                                value: function () {}
                            },
                            {
                                key: "setPlayRate",
                                value: function (e, i) {
                                    var r = this,
                                        o = new Promise(function (o, s) {
                                            for (var u = 0, l = r[t].length; u < l; u++) if (r[t][u].id === e) {
                                                if ("0.1" === r[n]) {
                                                    var f = a.playRateCmd(i);
                                                    r[t][u].socket.send(f),
                                                    o();
                                                    break
                                                }
                                                r[t][u].resolve = o,
                                                r[t][u].reject = s;
                                                var c = h.playRateCmd(i);
                                                r[t][u].socket.send(c)
                                            }
                                        });
                                    return o
                                }
                            },
                            {
                                key: "seek",
                                value: function (e, n, i) {
                                    var r = this,
                                        o = new Promise(function (o, a) {
                                            for (var s = 0, u = r[t].length; s < u; s++) if (r[t][s].id === e) {
                                                r[t][s].resolve = o,
                                                r[t][s].reject = a;
                                                var l = d.seekCmd(n, i);
                                                r[t][s].socket.send(l)
                                            }
                                        });
                                    return o
                                }
                            },
                            {
                                key: "pause",
                                value: function (e) {
                                    var i = this,
                                        r = new Promise(function (r, o) {
                                            for (var s = 0, u = i[t].length; s < u; s++) if (i[t][s].id === e) {
                                                if ("0.1" === i[n]) {
                                                    var l = a.pauseCmd();
                                                    i[t][s].socket.send(l),
                                                    r();
                                                    break
                                                }
                                                i[t][s].resolve = r,
                                                i[t][s].reject = o;
                                                var f = h.pauseCmd();
                                                i[t][s].socket.send(f)
                                            }
                                        });
                                    return r
                                }
                            },
                            {
                                key: "transmission",
                                value: function (e, n) {
                                    var i = this,
                                        r = new Promise(function (r, o) {
                                            for (var a = 0, s = i[t].length; a < s; a++) i[t][a].id === e && (i[t][a].resolve = r, i[t][a].reject = o, i[t][a].socket.send(n))
                                        });
                                    return r
                                }
                            },
                            {
                                key: "resume",
                                value: function (e) {
                                    var i = this,
                                        r = new Promise(function (r, o) {
                                            for (var s = 0, u = i[t].length; s < u; s++) if (i[t][s].id === e) {
                                                if ("0.1" === i[n]) {
                                                    var l = a.resumeCmd();
                                                    i[t][s].socket.send(l),
                                                    r();
                                                    break
                                                }
                                                i[t][s].resolve = r,
                                                i[t][s].reject = o;
                                                var f = h.resumeCmd();
                                                i[t][s].socket.send(f)
                                            }
                                        });
                                    return r
                                }
                            },
                            {
                                key: "stop",
                                value: function (e) {
                                    var n = this,
                                        i = new Promise(function (i, r) {
                                            if (e) {
                                                for (var o = -1, a = 0, s = n[t].length; a < s; a++) if (n[t][a].id === e) {
                                                    o = a,
                                                    n[t][a].resolve = i,
                                                    n[t][a].socket.close(1e3, "CLOSE");
                                                    break
                                                }
                                                o === -1 && r()
                                            } else r()
                                        });
                                    return i
                                }
                            },
                            {
                                key: "stopAll",
                                value: function () {
                                    for (var e = this, n = 0, i = e[t].length; n < i; n++) e[t][n].socket.close(1e3, "CLOSE")
                                }
                            }]),
                            u
                        }();
                    return y
                }
            }();
        e.StreamClient = h
    },
 
 
    function (t, e) {
        "use strict";
 
        function n(t, e) {
            if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function")
        }
        Object.defineProperty(e, "__esModule", {
            value: !0
        });
        var i = function () {
            function t(t, e) {
                for (var n = 0; n < e.length; n++) {
                    var i = e[n];
                    i.enumerable = i.enumerable || !1,
                    i.configurable = !0,
                    "value" in i && (i.writable = !0),
                    Object.defineProperty(t, i.key, i)
                }
            }
            return function (e, n, i) {
                return n && t(e.prototype, n),
                i && t(e, i),
                e
            }
        }(),
            r = 0,
            o = 1,
            a = 2,
            s = 11,
            u = 16,
            l = 31,
            f = 60,
            c = 61,
            h = 63,
            d = {
                AUDIO_G711_U: 28944,
                AUDIO_G711_A: 28945,
                AUDIO_G722_1: 29217,
                AUDIO_G726_U: 29280,
                AUDIO_G726_A: 29281,
                AUDIO_G726_2: 29282,
                AUDIO_AACLC: 8193,
                AUDIO_NULL: 0
            },
            p = 0,
            y = 1,
            m = 0,
            v = 1,
            g = 0,
            S = 1,
            b = 15,
            w = 8,
            _ = 1,
            P = 25,
            C = 20,
            x = 5,
            T = 5242880,
            k = 5e3,
            D = !1,
            M = !1,
            R = {
                id: null,
                cmd: null,
                data: null,
                errorCode: 0,
                status: null
            };
        e.JSPlayCtrl = function () {
                function t(e, i, c) {
                    if (n(this, t), null == e || void 0 === e || "string" != typeof e) return o;
                    if (this.szBasePath = e, !i || "function" != typeof i) return o;
                    this.fnCallBack = i,
                    this.decodeWorker = null,
                    this.streamOpenMode = null,
                    this.bOpenStream = !1,
                    this.audioRenderer = null,
                    this.aAudioBuffer = [],
                    this.iAudioBufferSize = 0,
                    this.oSuperRender = null,
                    this.aVideoFrameBuffer = [],
                    this.YUVBufferSize = _,
                    this.szOSDTime = null,
                    this.bPlaySound = !1,
                    this.bPlay = !1,
                    this.bPause = !1,
                    this.bOnebyOne = !1,
                    this.bPlayRateChange = !1,
                    this.bAudioTypeSupport = !0,
                    this.dataCallBackFun = null,
                    this.YUVBufSizeCBFun = null,
                    this.nWidth = 0,
                    this.nHeight = 0,
                    this.sCanvasId = null,
                    this.aDisplayBuf = null,
                    this.bVisibility = !0,
                    this.nDecFrameType = g,
                    this.iCanvasWidth = 0,
                    this.iCanvasHeight = 0,
                    this.iZoomNum = 0,
                    this.iRatio_x = 1,
                    this.iRatio_y = 1,
                    this.stDisplayRect = {
                        top: 0,
                        left: 0,
                        right: 0,
                        bottom: 0
                    },
                    this.stYUVRect = {
                        top: 0,
                        left: 0,
                        right: 0,
                        bottom: 0
                    },
                    this.aInputDataLens = [],
                    this.aInputDataBuffer = [],
                    this.bIsGetYUV = !1,
                    this.bIsFirstFrame = !0,
                    this.iInputMaxBufSize = T,
                    this.bIsInput = !1,
                    this.bIsInputBufOver = !1,
                    this.iInputDataLen = k;
                    var h = this;
                    if (this.setCallBack = function (t, e, n, i, r) {
                        var o = R;
                        o.id = c,
                        o.cmd = e,
                        o.data = n,
                        o.errorCode = i,
                        o.status = r,
                        t.fnCallBack(o)
                    }, !D) {
                        D = !0;
                        var p = document.createElement("script");
                        p.type = "text/javascript",
                        p.src = h.szBasePath + "AudioRenderer.js";
                        var y = document.getElementsByTagName("head")[0];
                        y.appendChild(p),
                        p.onload = p.onreadystatechange = function () {
                            !this.readyState || "loaded" === this.readyState || "complete" === this.readyState
                        }
                    }
                    if (!M) {
                        M = !0;
                        var m = document.createElement("script");
                        m.type = "text/javascript",
                        m.src = h.szBasePath + "SuperRender_10.js";
                        var v = document.getElementsByTagName("head")[0];
                        v.appendChild(m),
                        m.onload = m.onreadystatechange = function () {
                            !this.readyState || "loaded" === this.readyState || "complete" === this.readyState
                        }
                    }
                    this.convertErrorCode = function (t) {
                        switch (t) {
                        case 1:
                            return r;
                        case 98:
                            return o;
                        default:
                            return t
                        }
                    },
                    this.arrayBufferCopy = function (t) {
                        var e = t.byteLength,
                            n = new Uint8Array(e),
                            i = new Uint8Array(t),
                            r = 0;
                        for (r = 0; r < e; r++) n[r] = i[r];
                        return n
                    },
                    this.inputDataFun = function () {
                        var t, e = 0;
                        if (h.bIsGetYUV = !1, h.bIsInputBufOver) t = new Uint8Array(1);
                        else {
                            for (; h.aInputDataLens.length > 0 && (e += h.aInputDataLens.shift(), !(e > h.iInputDataLen)););
                            t = h.aInputDataBuffer.splice(0, e)
                        }
                        var n = new Uint8Array(t),
                            i = {
                                command: "InputData",
                                data: n.buffer,
                                dataSize: e
                            };
                        h.bPlay && (h.bPause ? h.bOnebyOne && h.decodeWorker.postMessage(i, [i.data]) : h.decodeWorker.postMessage(i, [i.data])),
                        t = null,
                        n = null
                    },
                    this.getPic = function (t, e) {
                        if (null == this.decodeWorker || null == this.oSuperRender) return a;
                        if (!this.bPlay) return a;
                        if (!t || "function" != typeof t) return o;
                        if (this.dataCallBackFun = t, 0 === this.iZoomNum) this.stYUVRect.left = 0,
                        this.stYUVRect.top = 0,
                        this.stYUVRect.right = 0,
                        this.stYUVRect.bottom = 0;
                        else {
                            if (0 === this.iCanvasWidth || 0 === this.iCanvasHeight) this.stYUVRect.left = 0,
                            this.stYUVRect.top = 0,
                            this.stYUVRect.right = 0,
                            this.stYUVRect.bottom = 0;
                            else {
                                var n = this.nWidth / this.iCanvasWidth,
                                    i = this.nHeight / this.iCanvasHeight;
                                this.stYUVRect.left = Math.round(this.stDisplayRect.left * n),
                                this.stYUVRect.top = Math.round(this.stDisplayRect.top * i),
                                this.stYUVRect.right = Math.round(this.stDisplayRect.right * n),
                                this.stYUVRect.bottom = Math.round(this.stDisplayRect.bottom * i)
                            }
                            if (this.stYUVRect.right - this.stYUVRect.left < 32 || this.stYUVRect.bottom - this.stYUVRect.top < 32) return o
                        }
                        if (null == this.aDisplayBuf) return a;
                        var s = this.arrayBufferCopy(this.aDisplayBuf),
                            u = {
                                command: e,
                                data: s.buffer,
                                width: this.nWidth,
                                height: this.nHeight,
                                rect: this.stYUVRect
                            };
                        return this.decodeWorker.postMessage(u, [u.data]),
                        r
                    },
                    this.createWorker = function (t) {
                        if (window.Worker) {
                            if (null == this.decodeWorker && (this.decodeWorker = new Worker(h.szBasePath + "DecodeWorker.js"), null == this.decodeWorker)) return f;
                            this.decodeWorker.onmessage = function (e) {
                                var n = null,
                                    i = e.data;
                                switch (i.
                                    function) {
                                    case "loaded":
                                        n = "loaded",
                                        t.setCallBack(t, "loaded", 0, 0, !0);
                                        break;
                                    case "SetStreamOpenMode":
                                        n = "SetStreamOpenMode";
                                        break;
                                    case "OpenStream":
                                        if (n = "OpenStream", 1 === i.errorCode) return void(h.bOpenStream = !0);
                                        break;
                                    case "InputData":
                                        n = "InputData",
                                        i.errorCode === s && (h.bIsInputBufOver = !0, h.inputDataFun()),
                                        i.errorCode === l && (h.bIsInputBufOver = !1);
                                        break;
                                    case "GetFrameData":
                                        if (n = "GetFrameData", !h.bIsFirstFrame && i.errorCode === l) {
                                            h.bIsInputBufOver = !1,
                                            setTimeout(h.inputDataFun(), 5);
                                            break
                                        }
                                        if (h.bIsInputBufOver ? h.inputDataFun() : "videoType" === i.type && (h.aInputDataLens.length > 0 && h.bIsInput ? (h.inputDataFun(), h.bIsInput = !1) : h.bIsGetYUV = !0, h.bIsFirstFrame = !1), h.bVisibility) switch (i.type) {
                                        case "videoType":
                                            if (null == i.data || null == i.frameInfo) return o;
                                            h.bIsFirstFrame = !1,
                                            t.nWidth = i.frameInfo.width,
                                            t.nHeight = i.frameInfo.height;
                                            var r = new Object;
                                            r.data = i.data,
                                            r.osdTime = i.osd,
                                            t.aVideoFrameBuffer.push(r),
                                            r = null;
                                            var a = t.aVideoFrameBuffer.length;
                                            if (a > C && (t.bOnebyOne || t.aVideoFrameBuffer.splice(0, x)), t.bOnebyOne && t.aVideoFrameBuffer.length >= b) {
                                                t.setCallBack(t, "OnebyOne", 0, 0, !1),
                                                t.bIsFirstFrame = !0;
                                                break
                                            }
                                            break;
                                        case "audioType":
                                            if (t.bPlaySound && !t.bPlayRateChange) {
                                                for (var f = new Uint8Array(i.data), c = t.aAudioBuffer.length, d = 0, p = f.length; d < p; d++) t.aAudioBuffer[c + d] = f[d];
                                                t.iAudioBufferSize++,
                                                f = null,
                                                t.iAudioBufferSize >= P && (t.audioRenderer.Play(t.aAudioBuffer, t.aAudioBuffer.length, i.frameInfo), t.aAudioBuffer.splice(0, t.aAudioBuffer.length), t.aAudioBuffer.length = 0, t.iAudioBufferSize = 0)
                                            }
                                            break;
                                        case "privateType":
                                        }
                                        break;
                                    case "PlaySound":
                                        n = "PlaySound";
                                        break;
                                    case "GetJPEG":
                                        n = "GetJPEG";
                                        var y = i.data;
                                        t.dataCallBackFun(y);
                                        break;
                                    case "GetBMP":
                                        n = "GetBMP";
                                        var m = i.data;
                                        t.dataCallBackFun(m)
                                    }
                                "GetFrameData" !== n ? t.setCallBack(t, n, 0, t.convertErrorCode(i.errorCode), !0) : u === i.errorCode && t.setCallBack(t, n, 0, t.convertErrorCode(i.errorCode), !0)
                            }
                        }
                    },
                    this.createWorker(h),
                    this.draw = function () {
                        if (h.bPlay) {
                            h.bPause || requestAnimationFrame(h.draw);
                            var t = h.aVideoFrameBuffer.length;
                            if (null != h.YUVBufSizeCBFun && h.YUVBufSizeCBFun(t), h.bOnebyOne && t <= w && h.setCallBack(h, "OnebyOne", 0, l, !0), t > h.YUVBufferSize) {
                                var e = h.aVideoFrameBuffer.shift();
                                h.aDisplayBuf = e.data;
                                var n = new Uint8Array(h.aDisplayBuf);
                                h.oSuperRender.SR_DisplayFrameData(h.nWidth, h.nHeight, n),
                                n = null,
                                h.szOSDTime = e.osdTime,
                                e = null
                            }
                        } else h.bPlay || (h.aVideoFrameBuffer.splice(0, h.aVideoFrameBuffer.length), h.aAudioBuffer.splice(0, h.aAudioBuffer.length))
                    },
                    this.checkAudioType = function (t) {
                        var e = function (t, e) {
                            var n = 255 & t[e] | (255 & t[e + 1]) << 8 | (255 & t[e + 2]) << 16 | (255 & t[e + 3]) << 24;
                            return n
                        },
                            n = [t[12], t[13], 0, 0],
                            i = e(n, 0);
                        switch (i) {
                            case d.AUDIO_G711_A:
                            case d.AUDIO_G711_U:
                            case d.AUDIO_G722_1:
                            case d.AUDIO_G726_2:
                            case d.AUDIO_G726_A:
                            case d.AUDIO_G726_U:
                            case d.AUDIO_AACLC:
                                return r;
                            default:
                                return u
                            }
                    }
                }
                return i(t, [{
                    key: "PlayM4_SetStreamOpenMode",
                    value: function (t) {
                        return null == t || void 0 === t ? o : t !== m && t !== v ? o : (this.streamOpenMode = t, r)
                    }
                },
                {
                    key: "PlayM4_OpenStream",
                    value: function (t, e, n) {
                        return null == this.decodeWorker ? a : null == t || e <= 0 || n <= 0 ? o : (this.bPlay = !1, this.bPause = !1, this.bOnebyOne = !1, this.bIsFirstFrame = !0, this.bIsGetYUV = !1, this.bIsInput = !1, r !== this.checkAudioType(t) && (this.bAudioTypeSupport = !1), this.decodeWorker.postMessage({
                            command: "SetStreamOpenMode",
                            data: this.streamOpenMode
                        }), this.decodeWorker.postMessage({
                            command: "OpenStream",
                            data: t,
                            dataSize: e,
                            bufPoolSize: n
                        }), r)
                    }
                },
                {
                    key: "PlayM4_CloseStream",
                    value: function () {
                        return null === this.decodeWorker || this.bOpenStream === !1 ? a : (this.PlayM4_Stop(), this.decodeWorker.postMessage({
                            command: "CloseStream"
                        }), null !== this.oSuperRender && (this.oSuperRender.SR_Destroy(), this.oSuperRender = null), null !== this.audioRenderer && (this.audioRenderer.Stop(), this.audioRenderer = null), this.aAudioBuffer.splice(0, this.aAudioBuffer.length), this.aVideoFrameBuffer.splice(0, this.aVideoFrameBuffer.length), this.aInputDataBuffer.splice(0, this.aInputDataBuffer.length), this.aInputDataLens.splice(0, this.aInputDataLens.length), this.bOpenStream = !1, this.iAudioBufferSize = 0, r)
                    }
                },
                {
                    key: "PlayM4_Destroy",
                    value: function () {
                        return null === this.decodeWorker ? r : (this.PlayM4_CloseStream(), this.decodeWorker.terminate(), this.decodeWorker = null, r)
                    }
                },
                {
                    key: "PlayM4_InputData",
                    value: function (t, e) {
                        if (null === this.decodeWorker || this.bOpenStream === !1) return a;
                        var n = this.aInputDataBuffer.length;
                        if (4 === e) {
                            var i = new Uint8Array(t.buffer);
                            if (1 === i[0] && 2 === i[1] && 3 === i[2] && 4 === i[3]) return this.bIsFirstFrame ? this.inputDataFun() : this.bIsGetYUV ? this.inputDataFun() : this.bIsInput = !0,
                            i = null,
                            r
                        }
                        if (n > this.iInputMaxBufSize) return s;
                        var o = null,
                            l = e;
                        switch (this.streamOpenMode) {
                            case v:
                                o = new Uint8Array(t.buffer),
                                this.aInputDataLens.push(e);
                                break;
                            case m:
                                l = e + 4;
                                var f = new Uint32Array([e]),
                                    c = new Uint8Array(f.buffer);
                                o = new Uint8Array(l),
                                o.set(c, 0),
                                o.set(t, 4),
                                f = null,
                                c = null,
                                this.aInputDataLens.push(e + 4);
                                break;
                            default:
                                return u
                            }
                        for (var h = 0; h < l; h++) this.aInputDataBuffer[n + h] = o[h];
                        return o = null,
                        this.bIsFirstFrame ? this.inputDataFun() : this.bIsGetYUV ? this.inputDataFun() : this.bIsInput = !0,
                        r
                    }
                },
                {
                    key: "PlayM4_Play",
                    value: function (t) {
                        return null === this.decodeWorker ? a : null !== t && "string" != typeof t ? o : (this.bOnebyOne && (this.bPlayRateChange = !1, this.bOnebyOne = !1, this.bPause = !1, this.draw()), this.bPlay ? r : null == this.oSuperRender && (this.oSuperRender = new SuperRender(t, this.szBasePath), null == this.oSuperRender) ? c : null == this.audioRenderer && (this.audioRenderer = new AudioRenderer, null == this.audioRenderer) ? c : (this.sCanvasId = t, this.bPlay = !0, this.bPause = !1, this.bOnebyOne = !1, this.bPlaySound = !1, this.bPlayRateChange = !1, this.draw(), r))
                    }
                },
                {
                    key: "PlayM4_Stop",
                    value: function () {
                        return null == this.decodeWorker || null == this.oSuperRender ? a : this.bPlay ? (this.bPlaySound && (this.PlayM4_StopSound(), this.bPlaySound = !0), this.bPlay = !1, this.bOnebyOne = !1, this.bPause = !1, this.oSuperRender.SR_SetDisplayRect(null), this.iZoomNum = 0, this.oSuperRender.SR_DisplayFrameData(this.nWidth, this.nHeight, null), r) : a
                    }
                },
                {
                    key: "PlayM4_PlayRate",
                    value: function (t) {
                        return null == this.decodeWorker ? a : (1 === t ? this.bPlayRateChange = !1 : this.bPlayRateChange = !0, t < 1 && (t = 1), this.iInputDataLen = t * k, r)
                    }
                },
                {
                    key: "PlayM4_Pause",
                    value: function (t) {
                        return null == this.decodeWorker || null == this.oSuperRender ? a : this.bPlay ? this.bOnebyOne ? a : "boolean" != typeof t ? o : (this.bPause = t, this.bIsFirstFrame = !0, t ? this.bPlaySound && (this.PlayM4_StopSound(), this.bPlaySound = !0) : (this.bPlaySound && this.PlayM4_PlaySound(), this.draw()), r) : a
                    }
                },
                {
                    key: "PlayM4_OneByOne",
                    value: function () {
                        return null == this.decodeWorker || null == this.oSuperRender ? a : this.bPlay ? (this.iInputDataLen = k, this.bPause = !0, this.bOnebyOne = !0, this.bPlayRateChange = !0, this.draw(), r) : a
                    }
                },
                {
                    key: "PlayM4_PlaySound",
                    value: function (t) {
                        return null === this.decodeWorker || this.bOpenStream === !1 ? a : this.bAudioTypeSupport ? t < 0 || t > 16 ? o : null == this.audioRenderer && (this.audioRenderer = new AudioRenderer, null == this.audioRenderer) ? c : (this.audioRenderer.SetWndNum(t), this.bPlaySound = !0, r) : u
                    }
                },
                {
                    key: "PlayM4_StopSound",
                    value: function () {
                        return null == this.decodeWorker || null == this.audioRenderer ? a : this.bPlaySound ? (this.bPlaySound = !1, r) : a
                    }
                },
                {
                    key: "PlayM4_SetDisplayBuf",
                    value: function (t) {
                        return null == this.decodeWorker ? a : t <= 0 ? o : (this.YUVBufferSize = t, r)
                    }
                },
                {
                    key: "PlayM4_SetSecretKey",
                    value: function (t, e, n) {
                        console.log("解码库接收解密——PlayM4_SetSecretKey",t, e, n,this)
                        console.log('测试判断逻辑',(null == this.decodeWorker || this.bOpenStream === !1))  // 返回true 执行 return a
                        // if (null == this.decodeWorker || this.bOpenStream === !1) return a;
                        // if (null == e) return o;
                        // if (y === t) {
                        //     if (128 !== n) return o;
                        //     if (null == e || void 0 === e) return o
                        // } else if (p !== t) return o;
                        // console.log("解码库开始执行解密——PlayM4_SetSecretKey",t, e, n) // 此处始终未执行
                        return this.decodeWorker.postMessage({
                            command: "SetSecretKey",
                            data: e,
                            nKeyType: t,
                            nKeyLen: n
                        }),
                        r
                    }
                },
                {
                    key: "PlayM4_SetDecodeFrameType",
                    value: function (t) {
                        return null == this.decodeWorker || null == this.oSuperRender ? a : t !== g && t !== S ? o : (this.nDecFrameType = t, this.decodeWorker.postMessage({
                            command: "SetDecodeFrameType",
                            data: t
                        }), r)
                    }
                },
                {
                    key: "PlayM4_SetIFrameDecInterval",
                    value: function (t) {
                        return this.nDecFrameType !== S ? a : t < 0 ? o : (this.decodeWorker.postMessage({
                            command: "SetIFrameDecInterval",
                            data: t
                        }), r)
                    }
                },
                {
                    key: "PlayM4_SetDisplayRegion",
                    value: function (t, e) {
                        if (null === this.decodeWorker || this.bPlay === !1 || null === this.oSuperRender) return a;
                        if (null === this.canvasId) return a;
                        if (e === !0) {
                            if (null === t || void 0 === t) return o;
                            if ("number" != typeof t.left || "number" != typeof t.top || "number" != typeof t.right || "number" != typeof t.bottom) return o;
                            if (t.right < 0 || t.left < 0 || t.top < 0 || t.bottom < 0) return o;
                            var n = t.left,
                                i = t.right,
                                s = t.top,
                                u = t.bottom;
                            if (i - n < 16 || u - s < 16 || i - n > this.nWidth || u - s > this.nHeight) return o;
                            var l = document.getElementById(this.sCanvasId).getBoundingClientRect();
                            this.iCanvasWidth = l.width,
                            this.iCanvasHeight = l.height,
                            0 !== this.iZoomNum && (n = Math.round(n / this.iRatio_x) + this.stDisplayRect.left, s = Math.round(s / this.iRatio_y) + this.stDisplayRect.top, i = Math.round(i / this.iRatio_x) + this.stDisplayRect.left, u = Math.round(u / this.iRatio_y) + this.stDisplayRect.top),
                            this.stDisplayRect = {
                                    top: s,
                                    left: n,
                                    right: i,
                                    bottom: u
                                },
                            this.oSuperRender.SR_SetDisplayRect(this.stDisplayRect);
                            var f = i - n,
                                c = u - s;
                            this.iRatio_x = this.iCanvasWidth / f,
                            this.iRatio_y = this.iCanvasHeight / c,
                            this.iZoomNum++
                        } else this.oSuperRender.SR_SetDisplayRect(null),
                        this.iZoomNum = 0;
                        return (this.bPause || this.bOnebyOne || this.bPlayRateChange) && this.oSuperRender.SR_DisplayFrameData(this.nWidth, this.nHeight, new Uint8Array(this.aDisplayBuf)),
                        r
                    }
                },
                {
                    key: "PlayM4_GetBMP",
                    value: function (t) {
                        return this.getPic(t, "GetBMP")
                    }
                },
                {
                    key: "PlayM4_GetJPEG",
                    value: function (t) {
                        return this.getPic(t, "GetJPEG")
                    }
                },
                {
                    key: "PlayM4_SetVolume",
                    value: function (t) {
                        return null == this.decodeWorker ? a : null == this.audioRenderer ? a : t < 0 || t > 100 ? o : (this.audioRenderer.SetVolume(t / 100), r)
                    }
                },
                {
                    key: "PlayM4_GetVolume",
                    value: function (t) {
                        if (null == this.decodeWorker) return a;
                        if (null == this.audioRenderer) return a;
                        if (t && "function" == typeof t) {
                            var e = this.audioRenderer.GetVolume();
                            return null === e ? h : (t(10 * Math.round(10 * e)), r)
                        }
                        return o
                    }
                },
                {
                    key: "PlayM4_GetOSDTime",
                    value: function (t) {
                        return null == this.decodeWorker ? a : this.bPlay ? t && "function" == typeof t ? (t(this.szOSDTime), r) : o : a
                    }
                },
                {
                    key: "PlayM4_IsVisible",
                    value: function (t) {
                        return this.bVisibility = t,
                        r
                    }
                },
                {
                    key: "PlayM4_GetSdkVersion",
                    value: function () {
                        return "07020117"
                    }
                },
                {
                    key: "PlayM4_GetInputBufSize",
                    value: function () {
                        return this.aInputDataBuffer.length
                    }
                },
                {
                    key: "PlayM4_SetInputBufSize",
                    value: function (t) {
                        return t > 0 ? (this.iInputMaxBufSize = t, r) : o
                    }
                },
                {
                    key: "PlayM4_GetYUVBufSize",
                    value: function () {
                        return this.aVideoFrameBuffer.length
                    }
                },
                {
                    key: "PlayM4_RegisterYUVBufSizeCB",
                    value: function (t) {
                        return t && "function" == typeof t ? (this.YUVBufSizeCBFun = t, r) : o
                    }
                },
                {
                    key: "PlayM4_UnRegisterYUVBufSizeCB",
                    value: function () {
                        return null != this.YUVBufSizeCBFun && (this.YUVBufSizeCBFun = null),
                        r
                    }
                },
                {
                    key: "PlayM4_ClearCanvas",
                    value: function () {
                        return null == this.oSuperRender ? a : (this.oSuperRender.SR_DisplayFrameData(this.nWidth, this.nHeight, null), r)
                    }
                },
                {
                    key: "PlayM4_ReleaseInputBuffer",
                    value: function () {
                        return null === this.aInputDataBuffer ? a : (this.aInputDataBuffer.splice(0, this.aInputDataBuffer.length), this.aInputDataLens.splice(0, this.aInputDataLens.length), r)
                    }
                },
                {
                    key: "PlayM4_GetDecodeFrameType",
                    value: function () {
                        return this.nDecFrameType
                    }
                }]),
                t
            }()
    },
 
 
    function (t, e) {
        "use strict";
        Object.defineProperty(e, "__esModule", {
            value: !0
        });
        var n = n ||
        function (t, e) {
            var n = {},
                i = n.lib = {},
                r = function () {},
                o = i.Base = {
                    extend: function (t) {
                        r.prototype = this;
                        var e = new r;
                        return t && e.mixIn(t),
                        e.hasOwnProperty("init") || (e.init = function () {
                            e.$super.init.apply(this, arguments)
                        }),
                        e.init.prototype = e,
                        e.$super = this,
                        e
                    },
                    create: function () {
                        var t = this.extend();
                        return t.init.apply(t, arguments),
                        t
                    },
                    init: function () {},
                    mixIn: function (t) {
                        for (var e in t) t.hasOwnProperty(e) && (this[e] = t[e]);
                        t.hasOwnProperty("toString") && (this.toString = t.toString)
                    },
                    clone: function () {
                        return this.init.prototype.extend(this)
                    }
                },
                a = i.WordArray = o.extend({
                    init: function (t, n) {
                        t = this.words = t || [],
                        this.sigBytes = n != e ? n : 4 * t.length
                    },
                    toString: function (t) {
                        return (t || u).stringify(this)
                    },
                    concat: function (t) {
                        var e = this.words,
                            n = t.words,
                            i = this.sigBytes;
                        if (t = t.sigBytes, this.clamp(), i % 4) for (var r = 0; r < t; r++) e[i + r >>> 2] |= (n[r >>> 2] >>> 24 - 8 * (r % 4) & 255) << 24 - 8 * ((i + r) % 4);
                        else if (65535 < n.length) for (r = 0; r < t; r += 4) e[i + r >>> 2] = n[r >>> 2];
                        else e.push.apply(e, n);
                        return this.sigBytes += t,
                        this
                    },
                    clamp: function () {
                        var e = this.words,
                            n = this.sigBytes;
                        e[n >>> 2] &= 4294967295 << 32 - 8 * (n % 4),
                        e.length = t.ceil(n / 4)
                    },
                    clone: function () {
                        var t = o.clone.call(this);
                        return t.words = this.words.slice(0),
                        t
                    },
                    random: function (e) {
                        for (var n = [], i = 0; i < e; i += 4) n.push(4294967296 * t.random() | 0);
                        return new a.init(n, e)
                    }
                }),
                s = n.enc = {},
                u = s.Hex = {
                    stringify: function (t) {
                        var e = t.words;
                        t = t.sigBytes;
                        for (var n = [], i = 0; i < t; i++) {
                            var r = e[i >>> 2] >>> 24 - 8 * (i % 4) & 255;
                            n.push((r >>> 4).toString(16)),
                            n.push((15 & r).toString(16))
                        }
                        return n.join("")
                    },
                    parse: function (t) {
                        for (var e = t.length, n = [], i = 0; i < e; i += 2) n[i >>> 3] |= parseInt(t.substr(i, 2), 16) << 24 - 4 * (i % 8);
                        return new a.init(n, e / 2)
                    }
                },
                l = s.Latin1 = {
                    stringify: function (t) {
                        var e = t.words;
                        t = t.sigBytes;
                        for (var n = [], i = 0; i < t; i++) n.push(String.fromCharCode(e[i >>> 2] >>> 24 - 8 * (i % 4) & 255));
                        return n.join("")
                    },
                    parse: function (t) {
                        for (var e = t.length, n = [], i = 0; i < e; i++) n[i >>> 2] |= (255 & t.charCodeAt(i)) << 24 - 8 * (i % 4);
                        return new a.init(n, e)
                    }
                },
                f = s.Utf8 = {
                    stringify: function (t) {
                        try {
                            return decodeURIComponent(escape(l.stringify(t)))
                        } catch (t) {
                            throw Error("Malformed UTF-8 data")
                        }
                    },
                    parse: function (t) {
                        return l.parse(unescape(encodeURIComponent(t)))
                    }
                },
                c = i.BufferedBlockAlgorithm = o.extend({
                    reset: function () {
                        this._data = new a.init,
                        this._nDataBytes = 0
                    },
                    _append: function (t) {
                        "string" == typeof t && (t = f.parse(t)),
                        this._data.concat(t),
                        this._nDataBytes += t.sigBytes
                    },
                    _process: function (e) {
                        var n = this._data,
                            i = n.words,
                            r = n.sigBytes,
                            o = this.blockSize,
                            s = r / (4 * o),
                            s = e ? t.ceil(s) : t.max((0 | s) - this._minBufferSize, 0);
                        if (e = s * o, r = t.min(4 * e, r), e) {
                                for (var u = 0; u < e; u += o) this._doProcessBlock(i, u);
                                u = i.splice(0, e),
                                n.sigBytes -= r
                            }
                        return new a.init(u, r)
                    },
                    clone: function () {
                        var t = o.clone.call(this);
                        return t._data = this._data.clone(),
                        t
                    },
                    _minBufferSize: 0
                });
            i.Hasher = c.extend({
                    cfg: o.extend(),
                    init: function (t) {
                        this.cfg = this.cfg.extend(t),
                        this.reset()
                    },
                    reset: function () {
                        c.reset.call(this),
                        this._doReset()
                    },
                    update: function (t) {
                        return this._append(t),
                        this._process(),
                        this
                    },
                    finalize: function (t) {
                        return t && this._append(t),
                        this._doFinalize()
                    },
                    blockSize: 16,
                    _createHelper: function (t) {
                        return function (e, n) {
                            return new t.init(n).finalize(e)
                        }
                    },
                    _createHmacHelper: function (t) {
                        return function (e, n) {
                            return new h.HMAC.init(t, n).finalize(e)
                        }
                    }
                });
            var h = n.algo = {};
            return n
        }(Math);
        !
        function () {
            var t = n,
                e = t.lib.WordArray;
            t.enc.Base64 = {
                    stringify: function (t) {
                        var e = t.words,
                            n = t.sigBytes,
                            i = this._map;
                        t.clamp(),
                        t = [];
                        for (var r = 0; r < n; r += 3) for (var o = (e[r >>> 2] >>> 24 - 8 * (r % 4) & 255) << 16 | (e[r + 1 >>> 2] >>> 24 - 8 * ((r + 1) % 4) & 255) << 8 | e[r + 2 >>> 2] >>> 24 - 8 * ((r + 2) % 4) & 255, a = 0; 4 > a && r + .75 * a < n; a++) t.push(i.charAt(o >>> 6 * (3 - a) & 63));
                        if (e = i.charAt(64)) for (; t.length % 4;) t.push(e);
                        return t.join("")
                    },
                    parse: function (t) {
                        var n = t.length,
                            i = this._map,
                            r = i.charAt(64);
                        r && (r = t.indexOf(r), -1 != r && (n = r));
                        for (var r = [], o = 0, a = 0; a < n; a++) if (a % 4) {
                                var s = i.indexOf(t.charAt(a - 1)) << 2 * (a % 4),
                                    u = i.indexOf(t.charAt(a)) >>> 6 - 2 * (a % 4);
                                r[o >>> 2] |= (s | u) << 24 - 8 * (o % 4),
                                o++
                            }
                        return e.create(r, o)
                    },
                    _map: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="
                }
        }(),
 
 
        function (t) {
            function e(t, e, n, i, r, o, a) {
                return t = t + (e & n | ~e & i) + r + a,
                (t << o | t >>> 32 - o) + e
            }
            function i(t, e, n, i, r, o, a) {
                return t = t + (e & i | n & ~i) + r + a,
                (t << o | t >>> 32 - o) + e
            }
            function r(t, e, n, i, r, o, a) {
                return t = t + (e ^ n ^ i) + r + a,
                (t << o | t >>> 32 - o) + e
            }
            function o(t, e, n, i, r, o, a) {
                return t = t + (n ^ (e | ~i)) + r + a,
                (t << o | t >>> 32 - o) + e
            }
            for (var a = n, s = a.lib, u = s.WordArray, l = s.Hasher, s = a.algo, f = [], c = 0; 64 > c; c++) f[c] = 4294967296 * t.abs(t.sin(c + 1)) | 0;
            s = s.MD5 = l.extend({
                _doReset: function () {
                    this._hash = new u.init([1732584193, 4023233417, 2562383102, 271733878])
                },
                _doProcessBlock: function (t, n) {
                    for (var a = 0; 16 > a; a++) {
                        var s = n + a,
                            u = t[s];
                        t[s] = 16711935 & (u << 8 | u >>> 24) | 4278255360 & (u << 24 | u >>> 8)
                    }
                    var a = this._hash.words,
                        s = t[n + 0],
                        u = t[n + 1],
                        l = t[n + 2],
                        c = t[n + 3],
                        h = t[n + 4],
                        d = t[n + 5],
                        p = t[n + 6],
                        y = t[n + 7],
                        m = t[n + 8],
                        v = t[n + 9],
                        g = t[n + 10],
                        S = t[n + 11],
                        b = t[n + 12],
                        w = t[n + 13],
                        _ = t[n + 14],
                        P = t[n + 15],
                        C = a[0],
                        x = a[1],
                        T = a[2],
                        k = a[3],
                        C = e(C, x, T, k, s, 7, f[0]),
                        k = e(k, C, x, T, u, 12, f[1]),
                        T = e(T, k, C, x, l, 17, f[2]),
                        x = e(x, T, k, C, c, 22, f[3]),
                        C = e(C, x, T, k, h, 7, f[4]),
                        k = e(k, C, x, T, d, 12, f[5]),
                        T = e(T, k, C, x, p, 17, f[6]),
                        x = e(x, T, k, C, y, 22, f[7]),
                        C = e(C, x, T, k, m, 7, f[8]),
                        k = e(k, C, x, T, v, 12, f[9]),
                        T = e(T, k, C, x, g, 17, f[10]),
                        x = e(x, T, k, C, S, 22, f[11]),
                        C = e(C, x, T, k, b, 7, f[12]),
                        k = e(k, C, x, T, w, 12, f[13]),
                        T = e(T, k, C, x, _, 17, f[14]),
                        x = e(x, T, k, C, P, 22, f[15]),
                        C = i(C, x, T, k, u, 5, f[16]),
                        k = i(k, C, x, T, p, 9, f[17]),
                        T = i(T, k, C, x, S, 14, f[18]),
                        x = i(x, T, k, C, s, 20, f[19]),
                        C = i(C, x, T, k, d, 5, f[20]),
                        k = i(k, C, x, T, g, 9, f[21]),
                        T = i(T, k, C, x, P, 14, f[22]),
                        x = i(x, T, k, C, h, 20, f[23]),
                        C = i(C, x, T, k, v, 5, f[24]),
                        k = i(k, C, x, T, _, 9, f[25]),
                        T = i(T, k, C, x, c, 14, f[26]),
                        x = i(x, T, k, C, m, 20, f[27]),
                        C = i(C, x, T, k, w, 5, f[28]),
                        k = i(k, C, x, T, l, 9, f[29]),
                        T = i(T, k, C, x, y, 14, f[30]),
                        x = i(x, T, k, C, b, 20, f[31]),
                        C = r(C, x, T, k, d, 4, f[32]),
                        k = r(k, C, x, T, m, 11, f[33]),
                        T = r(T, k, C, x, S, 16, f[34]),
                        x = r(x, T, k, C, _, 23, f[35]),
                        C = r(C, x, T, k, u, 4, f[36]),
                        k = r(k, C, x, T, h, 11, f[37]),
                        T = r(T, k, C, x, y, 16, f[38]),
                        x = r(x, T, k, C, g, 23, f[39]),
                        C = r(C, x, T, k, w, 4, f[40]),
                        k = r(k, C, x, T, s, 11, f[41]),
                        T = r(T, k, C, x, c, 16, f[42]),
                        x = r(x, T, k, C, p, 23, f[43]),
                        C = r(C, x, T, k, v, 4, f[44]),
                        k = r(k, C, x, T, b, 11, f[45]),
                        T = r(T, k, C, x, P, 16, f[46]),
                        x = r(x, T, k, C, l, 23, f[47]),
                        C = o(C, x, T, k, s, 6, f[48]),
                        k = o(k, C, x, T, y, 10, f[49]),
                        T = o(T, k, C, x, _, 15, f[50]),
                        x = o(x, T, k, C, d, 21, f[51]),
                        C = o(C, x, T, k, b, 6, f[52]),
                        k = o(k, C, x, T, c, 10, f[53]),
                        T = o(T, k, C, x, g, 15, f[54]),
                        x = o(x, T, k, C, u, 21, f[55]),
                        C = o(C, x, T, k, m, 6, f[56]),
                        k = o(k, C, x, T, P, 10, f[57]),
                        T = o(T, k, C, x, p, 15, f[58]),
                        x = o(x, T, k, C, w, 21, f[59]),
                        C = o(C, x, T, k, h, 6, f[60]),
                        k = o(k, C, x, T, S, 10, f[61]),
                        T = o(T, k, C, x, l, 15, f[62]),
                        x = o(x, T, k, C, v, 21, f[63]);
                    a[0] = a[0] + C | 0,
                    a[1] = a[1] + x | 0,
                    a[2] = a[2] + T | 0,
                    a[3] = a[3] + k | 0
                },
                _doFinalize: function () {
                    var e = this._data,
                        n = e.words,
                        i = 8 * this._nDataBytes,
                        r = 8 * e.sigBytes;
                    n[r >>> 5] |= 128 << 24 - r % 32;
                    var o = t.floor(i / 4294967296);
                    for (n[(r + 64 >>> 9 << 4) + 15] = 16711935 & (o << 8 | o >>> 24) | 4278255360 & (o << 24 | o >>> 8), n[(r + 64 >>> 9 << 4) + 14] = 16711935 & (i << 8 | i >>> 24) | 4278255360 & (i << 24 | i >>> 8), e.sigBytes = 4 * (n.length + 1), this._process(), e = this._hash, n = e.words, i = 0; 4 > i; i++) r = n[i],
                    n[i] = 16711935 & (r << 8 | r >>> 24) | 4278255360 & (r << 24 | r >>> 8);
                    return e
                },
                clone: function () {
                    var t = l.clone.call(this);
                    return t._hash = this._hash.clone(),
                    t
                }
            }),
            a.MD5 = l._createHelper(s),
            a.HmacMD5 = l._createHmacHelper(s)
        }(Math),
 
 
        function () {
            var t = n,
                e = t.lib,
                i = e.Base,
                r = e.WordArray,
                e = t.algo,
                o = e.EvpKDF = i.extend({
                    cfg: i.extend({
                        keySize: 4,
                        hasher: e.MD5,
                        iterations: 1
                    }),
                    init: function (t) {
                        this.cfg = this.cfg.extend(t)
                    },
                    compute: function (t, e) {
                        for (var n = this.cfg, i = n.hasher.create(), o = r.create(), a = o.words, s = n.keySize, n = n.iterations; a.length < s;) {
                            u && i.update(u);
                            var u = i.update(t).finalize(e);
                            i.reset();
                            for (var l = 1; l < n; l++) u = i.finalize(u),
                            i.reset();
                            o.concat(u)
                        }
                        return o.sigBytes = 4 * s,
                        o
                    }
                });
            t.EvpKDF = function (t, e, n) {
                    return o.create(n).compute(t, e)
                }
        }(),
        n.lib.Cipher ||
        function (t) {
            var e = n,
                i = e.lib,
                r = i.Base,
                o = i.WordArray,
                a = i.BufferedBlockAlgorithm,
                s = e.enc.Base64,
                u = e.algo.EvpKDF,
                l = i.Cipher = a.extend({
                    cfg: r.extend(),
                    createEncryptor: function (t, e) {
                        return this.create(this._ENC_XFORM_MODE, t, e)
                    },
                    createDecryptor: function (t, e) {
                        return this.create(this._DEC_XFORM_MODE, t, e)
                    },
                    init: function (t, e, n) {
                        this.cfg = this.cfg.extend(n),
                        this._xformMode = t,
                        this._key = e,
                        this.reset()
                    },
                    reset: function () {
                        a.reset.call(this),
                        this._doReset()
                    },
                    process: function (t) {
                        return this._append(t),
                        this._process()
                    },
                    finalize: function (t) {
                        return t && this._append(t),
                        this._doFinalize()
                    },
                    keySize: 4,
                    ivSize: 4,
                    _ENC_XFORM_MODE: 1,
                    _DEC_XFORM_MODE: 2,
                    _createHelper: function (t) {
                        return {
                            encrypt: function (e, n, i) {
                                return ("string" == typeof n ? y : p).encrypt(t, e, n, i)
                            },
                            decrypt: function (e, n, i) {
                                return ("string" == typeof n ? y : p).decrypt(t, e, n, i)
                            }
                        }
                    }
                });
            i.StreamCipher = l.extend({
                    _doFinalize: function () {
                        return this._process(!0)
                    },
                    blockSize: 1
                });
            var f = e.mode = {},
                c = function (e, n, i) {
                    var r = this._iv;
                    r ? this._iv = t : r = this._prevBlock;
                    for (var o = 0; o < i; o++) e[n + o] ^= r[o]
                },
                h = (i.BlockCipherMode = r.extend({
                    createEncryptor: function (t, e) {
                        return this.Encryptor.create(t, e)
                    },
                    createDecryptor: function (t, e) {
                        return this.Decryptor.create(t, e)
                    },
                    init: function (t, e) {
                        this._cipher = t,
                        this._iv = e
                    }
                })).extend();
            h.Encryptor = h.extend({
                    processBlock: function (t, e) {
                        var n = this._cipher,
                            i = n.blockSize;
                        c.call(this, t, e, i),
                        n.encryptBlock(t, e),
                        this._prevBlock = t.slice(e, e + i)
                    }
                }),
            h.Decryptor = h.extend({
                    processBlock: function (t, e) {
                        var n = this._cipher,
                            i = n.blockSize,
                            r = t.slice(e, e + i);
                        n.decryptBlock(t, e),
                        c.call(this, t, e, i),
                        this._prevBlock = r
                    }
                }),
            f = f.CBC = h,
            h = (e.pad = {}).Pkcs7 = {
                    pad: function (t, e) {
                        for (var n = 4 * e, n = n - t.sigBytes % n, i = n << 24 | n << 16 | n << 8 | n, r = [], a = 0; a < n; a += 4) r.push(i);
                        n = o.create(r, n),
                        t.concat(n)
                    },
                    unpad: function (t) {
                        t.sigBytes -= 255 & t.words[t.sigBytes - 1 >>> 2]
                    }
                },
            i.BlockCipher = l.extend({
                    cfg: l.cfg.extend({
                        mode: f,
                        padding: h
                    }),
                    reset: function () {
                        l.reset.call(this);
                        var t = this.cfg,
                            e = t.iv,
                            t = t.mode;
                        if (this._xformMode == this._ENC_XFORM_MODE) var n = t.createEncryptor;
                        else n = t.createDecryptor,
                        this._minBufferSize = 1;
                        this._mode = n.call(t, this, e && e.words)
                    },
                    _doProcessBlock: function (t, e) {
                        this._mode.processBlock(t, e)
                    },
                    _doFinalize: function () {
                        var t = this.cfg.padding;
                        if (this._xformMode == this._ENC_XFORM_MODE) {
                            t.pad(this._data, this.blockSize);
                            var e = this._process(!0)
                        } else e = this._process(!0),
                        t.unpad(e);
                        return e
                    },
                    blockSize: 4
                });
            var d = i.CipherParams = r.extend({
                    init: function (t) {
                        this.mixIn(t)
                    },
                    toString: function (t) {
                        return (t || this.formatter).stringify(this)
                    }
                }),
                f = (e.format = {}).OpenSSL = {
                    stringify: function (t) {
                        var e = t.ciphertext;
                        return t = t.salt,
                        (t ? o.create([1398893684, 1701076831]).concat(t).concat(e) : e).toString(s)
                    },
                    parse: function (t) {
                        t = s.parse(t);
                        var e = t.words;
                        if (1398893684 == e[0] && 1701076831 == e[1]) {
                            var n = o.create(e.slice(2, 4));
                            e.splice(0, 4),
                            t.sigBytes -= 16
                        }
                        return d.create({
                            ciphertext: t,
                            salt: n
                        })
                    }
                },
                p = i.SerializableCipher = r.extend({
                    cfg: r.extend({
                        format: f
                    }),
                    encrypt: function (t, e, n, i) {
                        i = this.cfg.extend(i);
                        var r = t.createEncryptor(n, i);
                        return e = r.finalize(e),
                        r = r.cfg,
                        d.create({
                            ciphertext: e,
                            key: n,
                            iv: r.iv,
                            algorithm: t,
                            mode: r.mode,
                            padding: r.padding,
                            blockSize: t.blockSize,
                            formatter: i.format
                        })
                    },
                    decrypt: function (t, e, n, i) {
                        return i = this.cfg.extend(i),
                        e = this._parse(e, i.format),
                        t.createDecryptor(n, i).finalize(e.ciphertext)
                    },
                    _parse: function (t, e) {
                        return "string" == typeof t ? e.parse(t, this) : t
                    }
                }),
                e = (e.kdf = {}).OpenSSL = {
                    execute: function (t, e, n, i) {
                        return i || (i = o.random(8)),
                        t = u.create({
                            keySize: e + n
                        }).compute(t, i),
                        n = o.create(t.words.slice(e), 4 * n),
                        t.sigBytes = 4 * e,
                        d.create({
                            key: t,
                            iv: n,
                            salt: i
                        })
                    }
                },
                y = i.PasswordBasedCipher = p.extend({
                    cfg: p.cfg.extend({
                        kdf: e
                    }),
                    encrypt: function (t, e, n, i) {
                        return i = this.cfg.extend(i),
                        n = i.kdf.execute(n, t.keySize, t.ivSize),
                        i.iv = n.iv,
                        t = p.encrypt.call(this, t, e, n.key, i),
                        t.mixIn(n),
                        t
                    },
                    decrypt: function (t, e, n, i) {
                        return i = this.cfg.extend(i),
                        e = this._parse(e, i.format),
                        n = i.kdf.execute(n, t.keySize, t.ivSize, e.salt),
                        i.iv = n.iv,
                        p.decrypt.call(this, t, e, n.key, i)
                    }
                })
        }(),
 
 
        function () {
            for (var t = n, e = t.lib.BlockCipher, i = t.algo, r = [], o = [], a = [], s = [], u = [], l = [], f = [], c = [], h = [], d = [], p = [], y = 0; 256 > y; y++) p[y] = 128 > y ? y << 1 : y << 1 ^ 283;
            for (var m = 0, v = 0, y = 0; 256 > y; y++) {
                var g = v ^ v << 1 ^ v << 2 ^ v << 3 ^ v << 4,
                    g = g >>> 8 ^ 255 & g ^ 99;
                r[m] = g,
                o[g] = m;
                var S = p[m],
                    b = p[S],
                    w = p[b],
                    _ = 257 * p[g] ^ 16843008 * g;
                a[m] = _ << 24 | _ >>> 8,
                s[m] = _ << 16 | _ >>> 16,
                u[m] = _ << 8 | _ >>> 24,
                l[m] = _,
                _ = 16843009 * w ^ 65537 * b ^ 257 * S ^ 16843008 * m,
                f[g] = _ << 24 | _ >>> 8,
                c[g] = _ << 16 | _ >>> 16,
                h[g] = _ << 8 | _ >>> 24,
                d[g] = _,
                m ? (m = S ^ p[p[p[w ^ S]]], v ^= p[p[v]]) : m = v = 1
            }
            var P = [0, 1, 2, 4, 8, 16, 32, 64, 128, 27, 54],
                i = i.AES = e.extend({
                    _doReset: function () {
                        for (var t = this._key, e = t.words, n = t.sigBytes / 4, t = 4 * ((this._nRounds = n + 6) + 1), i = this._keySchedule = [], o = 0; o < t; o++) if (o < n) i[o] = e[o];
                        else {
                            var a = i[o - 1];
                            o % n ? 6 < n && 4 == o % n && (a = r[a >>> 24] << 24 | r[a >>> 16 & 255] << 16 | r[a >>> 8 & 255] << 8 | r[255 & a]) : (a = a << 8 | a >>> 24, a = r[a >>> 24] << 24 | r[a >>> 16 & 255] << 16 | r[a >>> 8 & 255] << 8 | r[255 & a], a ^= P[o / n | 0] << 24),
                            i[o] = i[o - n] ^ a
                        }
                        for (e = this._invKeySchedule = [], n = 0; n < t; n++) o = t - n,
                        a = n % 4 ? i[o] : i[o - 4],
                        e[n] = 4 > n || 4 >= o ? a : f[r[a >>> 24]] ^ c[r[a >>> 16 & 255]] ^ h[r[a >>> 8 & 255]] ^ d[r[255 & a]]
                    },
                    encryptBlock: function (t, e) {
                        this._doCryptBlock(t, e, this._keySchedule, a, s, u, l, r)
                    },
                    decryptBlock: function (t, e) {
                        var n = t[e + 1];
                        t[e + 1] = t[e + 3],
                        t[e + 3] = n,
                        this._doCryptBlock(t, e, this._invKeySchedule, f, c, h, d, o),
                        n = t[e + 1],
                        t[e + 1] = t[e + 3],
                        t[e + 3] = n
                    },
                    _doCryptBlock: function (t, e, n, i, r, o, a, s) {
                        for (var u = this._nRounds, l = t[e] ^ n[0], f = t[e + 1] ^ n[1], c = t[e + 2] ^ n[2], h = t[e + 3] ^ n[3], d = 4, p = 1; p < u; p++) var y = i[l >>> 24] ^ r[f >>> 16 & 255] ^ o[c >>> 8 & 255] ^ a[255 & h] ^ n[d++],
                            m = i[f >>> 24] ^ r[c >>> 16 & 255] ^ o[h >>> 8 & 255] ^ a[255 & l] ^ n[d++],
                            v = i[c >>> 24] ^ r[h >>> 16 & 255] ^ o[l >>> 8 & 255] ^ a[255 & f] ^ n[d++],
                            h = i[h >>> 24] ^ r[l >>> 16 & 255] ^ o[f >>> 8 & 255] ^ a[255 & c] ^ n[d++],
                            l = y,
                            f = m,
                            c = v;
                        y = (s[l >>> 24] << 24 | s[f >>> 16 & 255] << 16 | s[c >>> 8 & 255] << 8 | s[255 & h]) ^ n[d++],
                        m = (s[f >>> 24] << 24 | s[c >>> 16 & 255] << 16 | s[h >>> 8 & 255] << 8 | s[255 & l]) ^ n[d++],
                        v = (s[c >>> 24] << 24 | s[h >>> 16 & 255] << 16 | s[l >>> 8 & 255] << 8 | s[255 & f]) ^ n[d++],
                        h = (s[h >>> 24] << 24 | s[l >>> 16 & 255] << 16 | s[f >>> 8 & 255] << 8 | s[255 & c]) ^ n[d++],
                        t[e] = y,
                        t[e + 1] = m,
                        t[e + 2] = v,
                        t[e + 3] = h
                    },
                    keySize: 8
                });
            t.AES = e._createHelper(i)
        }(),
        e.
    default = n
    },
 
 
    function (t, e) {
        "use strict";
 
        function n(t, e, n) {
            null != t && ("number" == typeof t ? this.fromNumber(t, e, n) : null == e && "string" != typeof t ? this.fromString(t, 256) : this.fromString(t, e))
        }
        function r() {
            return new n(null)
        }
        function o(t, e, n, i, r, o) {
            for (; --o >= 0;) {
                var a = e * this[t++] + n[i] + r,
                    r = Math.floor(a / 67108864);
                n[i++] = 67108863 & a
            }
            return r
        }
        function a(t, e, n, i, r, o) {
            var a = 32767 & e;
            for (e >>= 15; --o >= 0;) {
                var s = 32767 & this[t],
                    u = this[t++] >> 15,
                    l = e * s + u * a,
                    s = a * s + ((32767 & l) << 15) + n[i] + (1073741823 & r),
                    r = (s >>> 30) + (l >>> 15) + e * u + (r >>> 30);
                n[i++] = 1073741823 & s
            }
            return r
        }
        function s(t, e, n, i, r, o) {
            var a = 16383 & e;
            for (e >>= 14; --o >= 0;) {
                var s = 16383 & this[t],
                    u = this[t++] >> 14,
                    l = e * s + u * a,
                    s = a * s + ((16383 & l) << 14) + n[i] + r,
                    r = (s >> 28) + (l >> 14) + e * u;
                n[i++] = 268435455 & s
            }
            return r
        }
        function u(t) {
            return Ge.charAt(t)
        }
        function l(t, e) {
            var n = Ve[t.charCodeAt(e)];
            return null == n ? -1 : n
        }
        function f(t) {
            for (var e = this.t - 1; e >= 0; --e) t[e] = this[e];
            t.t = this.t,
            t.s = this.s
        }
        function c(t) {
            this.t = 1,
            this.s = t < 0 ? -1 : 0,
            t > 0 ? this[0] = t : t < -1 ? this[0] = t + DV : this.t = 0
        }
        function h(t) {
            var e = r();
            return e.fromInt(t),
            e
        }
        function d(t, e) {
            var i;
            if (16 == e) i = 4;
            else if (8 == e) i = 3;
            else if (256 == e) i = 8;
            else if (2 == e) i = 1;
            else if (32 == e) i = 5;
            else {
                if (4 != e) return void this.fromRadix(t, e);
                i = 2
            }
            this.s = this.t = 0;
            for (var r = t.length, o = !1, a = 0; --r >= 0;) {
                var s = 8 == i ? 255 & t[r] : l(t, r);
                s < 0 ? "-" == t.charAt(r) && (o = !0) : (o = !1, 0 == a ? this[this.t++] = s : a + i > this.DB ? (this[this.t - 1] |= (s & (1 << this.DB - a) - 1) << a, this[this.t++] = s >> this.DB - a) : this[this.t - 1] |= s << a, a += i, a >= this.DB && (a -= this.DB))
            }
            8 == i && 0 != (128 & t[0]) && (this.s = -1, a > 0 && (this[this.t - 1] |= (1 << this.DB - a) - 1 << a)),
            this.clamp(),
            o && n.ZERO.subTo(this, this)
        }
        function p() {
            for (var t = this.s & this.DM; this.t > 0 && this[this.t - 1] == t;)--this.t
        }
        function y(t) {
            if (this.s < 0) return "-" + this.negate().toString(t);
            if (16 == t) t = 4;
            else if (8 == t) t = 3;
            else if (2 == t) t = 1;
            else if (32 == t) t = 5;
            else if (64 == t) t = 6;
            else {
                if (4 != t) return this.toRadix(t);
                t = 2
            }
            var e, n = (1 << t) - 1,
                i = !1,
                r = "",
                o = this.t,
                a = this.DB - o * this.DB % t;
            if (o-- > 0) for (a < this.DB && (e = this[o] >> a) > 0 && (i = !0, r = u(e)); o >= 0;) a < t ? (e = (this[o] & (1 << a) - 1) << t - a, e |= this[--o] >> (a += this.DB - t)) : (e = this[o] >> (a -= t) & n, a <= 0 && (a += this.DB, --o)),
            e > 0 && (i = !0),
            i && (r += u(e));
            return i ? r : "0"
        }
        function m() {
            var t = r();
            return n.ZERO.subTo(this, t),
            t
        }
        function g() {
            return this.s < 0 ? this.negate() : this
        }
        function S(t) {
            var e = this.s - t.s;
            if (0 != e) return e;
            var n = this.t,
                e = n - t.t;
            if (0 != e) return e;
            for (; --n >= 0;) if (0 != (e = this[n] - t[n])) return e;
            return 0
        }
        function b(t) {
            var e, n = 1;
            return 0 != (e = t >>> 16) && (t = e, n += 16),
            0 != (e = t >> 8) && (t = e, n += 8),
            0 != (e = t >> 4) && (t = e, n += 4),
            0 != (e = t >> 2) && (t = e, n += 2),
            t >> 1 != 0 && (n += 1),
            n
        }
        function w() {
            return this.t <= 0 ? 0 : this.DB * (this.t - 1) + b(this[this.t - 1] ^ this.s & this.DM)
        }
        function _(t, e) {
            var n;
            for (n = this.t - 1; n >= 0; --n) e[n + t] = this[n];
            for (n = t - 1; n >= 0; --n) e[n] = 0;
            e.t = this.t + t,
            e.s = this.s
        }
        function P(t, e) {
            for (var n = t; n < this.t; ++n) e[n - t] = this[n];
            e.t = Math.max(this.t - t, 0),
            e.s = this.s
        }
        function C(t, e) {
            var n, i = t % this.DB,
                r = this.DB - i,
                o = (1 << r) - 1,
                a = Math.floor(t / this.DB),
                s = this.s << i & this.DM;
            for (n = this.t - 1; n >= 0; --n) e[n + a + 1] = this[n] >> r | s,
            s = (this[n] & o) << i;
            for (n = a - 1; n >= 0; --n) e[n] = 0;
            e[a] = s,
            e.t = this.t + a + 1,
            e.s = this.s,
            e.clamp()
        }
        function x(t, e) {
            e.s = this.s;
            var n = Math.floor(t / this.DB);
            if (n >= this.t) e.t = 0;
            else {
                var i = t % this.DB,
                    r = this.DB - i,
                    o = (1 << i) - 1;
                e[0] = this[n] >> i;
                for (var a = n + 1; a < this.t; ++a) e[a - n - 1] |= (this[a] & o) << r,
                e[a - n] = this[a] >> i;
                i > 0 && (e[this.t - n - 1] |= (this.s & o) << r),
                e.t = this.t - n,
                e.clamp()
            }
        }
        function T(t, e) {
            for (var n = 0, i = 0, r = Math.min(t.t, this.t); n < r;) i += this[n] - t[n],
            e[n++] = i & this.DM,
            i >>= this.DB;
            if (t.t < this.t) {
                for (i -= t.s; n < this.t;) i += this[n],
                e[n++] = i & this.DM,
                i >>= this.DB;
                i += this.s
            } else {
                for (i += this.s; n < t.t;) i -= t[n],
                e[n++] = i & this.DM,
                i >>= this.DB;
                i -= t.s
            }
            e.s = i < 0 ? -1 : 0,
            i < -1 ? e[n++] = this.DV + i : i > 0 && (e[n++] = i),
            e.t = n,
            e.clamp()
        }
        function k(t, e) {
            var i = this.abs(),
                r = t.abs(),
                o = i.t;
            for (e.t = o + r.t; --o >= 0;) e[o] = 0;
            for (o = 0; o < r.t; ++o) e[o + i.t] = i.am(0, r[o], e, o, 0, i.t);
            e.s = 0,
            e.clamp(),
            this.s != t.s && n.ZERO.subTo(e, e)
        }
        function D(t) {
            for (var e = this.abs(), n = t.t = 2 * e.t; --n >= 0;) t[n] = 0;
            for (n = 0; n < e.t - 1; ++n) {
                var i = e.am(n, e[n], t, 2 * n, 0, 1);
                (t[n + e.t] += e.am(n + 1, 2 * e[n], t, 2 * n + 1, i, e.t - n - 1)) >= e.DV && (t[n + e.t] -= e.DV, t[n + e.t + 1] = 1)
            }
            t.t > 0 && (t[t.t - 1] += e.am(n, e[n], t, 2 * n, 0, 1)),
            t.s = 0,
            t.clamp()
        }
        function M(t, e, i) {
            var o = t.abs();
            if (!(o.t <= 0)) {
                var a = this.abs();
                if (a.t < o.t) null != e && e.fromInt(0),
                null != i && this.copyTo(i);
                else {
                    null == i && (i = r());
                    var s = r(),
                        u = this.s,
                        t = t.s,
                        l = this.DB - b(o[o.t - 1]);
                    if (l > 0 ? (o.lShiftTo(l, s), a.lShiftTo(l, i)) : (o.copyTo(s), a.copyTo(i)), o = s.t, a = s[o - 1], 0 != a) {
                            var f = a * (1 << this.F1) + (o > 1 ? s[o - 2] >> this.F2 : 0),
                                c = this.FV / f,
                                f = (1 << this.F1) / f,
                                h = 1 << this.F2,
                                d = i.t,
                                p = d - o,
                                y = null == e ? r() : e;
                            for (s.dlShiftTo(p, y), i.compareTo(y) >= 0 && (i[i.t++] = 1, i.subTo(y, i)), n.ONE.dlShiftTo(o, y), y.subTo(s, s); s.t < o;) s[s.t++] = 0;
                            for (; --p >= 0;) {
                                    var m = i[--d] == a ? this.DM : Math.floor(i[d] * c + (i[d - 1] + h) * f);
                                    if ((i[d] += s.am(0, m, i, p, 0, o)) < m) for (s.dlShiftTo(p, y), i.subTo(y, i); i[d] < --m;) i.subTo(y, i)
                                }
                            null != e && (i.drShiftTo(o, e), u != t && n.ZERO.subTo(e, e)),
                            i.t = o,
                            i.clamp(),
                            l > 0 && i.rShiftTo(l, i),
                            u < 0 && n.ZERO.subTo(i, i)
                        }
                }
            }
        }
        function R(t) {
            var e = r();
            return this.abs().divRemTo(t, null, e),
            this.s < 0 && e.compareTo(n.ZERO) > 0 && t.subTo(e, e),
            e
        }
        function E(t) {
            this.m = t
        }
        function I(t) {
            return t.s < 0 || t.compareTo(this.m) >= 0 ? t.mod(this.m) : t
        }
        function z(t) {
            return t
        }
        function A(t) {
            t.divRemTo(this.m, null, t)
        }
        function F(t, e, n) {
            t.multiplyTo(e, n),
            this.reduce(n)
        }
        function O(t, e) {
            t.squareTo(e),
            this.reduce(e)
        }
        function B() {
            if (this.t < 1) return 0;
            var t = this[0];
            if (0 == (1 & t)) return 0;
            var e = 3 & t,
                e = e * (2 - (15 & t) * e) & 15,
                e = e * (2 - (255 & t) * e) & 255,
                e = e * (2 - ((65535 & t) * e & 65535)) & 65535,
                e = e * (2 - t * e % this.DV) % this.DV;
            return e > 0 ? this.DV - e : -e
        }
        function L(t) {
            this.m = t,
            this.mp = t.invDigit(),
            this.mpl = 32767 & this.mp,
            this.mph = this.mp >> 15,
            this.um = (1 << t.DB - 15) - 1,
            this.mt2 = 2 * t.t
        }
        function q(t) {
            var e = r();
            return t.abs().dlShiftTo(this.m.t, e),
            e.divRemTo(this.m, null, e),
            t.s < 0 && e.compareTo(n.ZERO) > 0 && this.m.subTo(e, e),
            e
        }
        function N(t) {
            var e = r();
            return t.copyTo(e),
            this.reduce(e),
            e
        }
        function H(t) {
            for (; t.t <= this.mt2;) t[t.t++] = 0;
            for (var e = 0; e < this.m.t; ++e) {
                var n = 32767 & t[e],
                    i = n * this.mpl + ((n * this.mph + (t[e] >> 15) * this.mpl & this.um) << 15) & t.DM,
                    n = e + this.m.t;
                for (t[n] += this.m.am(0, i, t, e, 0, this.m.t); t[n] >= t.DV;) t[n] -= t.DV,
                t[++n]++
            }
            t.clamp(),
            t.drShiftTo(this.m.t, t),
            t.compareTo(this.m) >= 0 && t.subTo(this.m, t)
        }
        function j(t, e) {
            t.squareTo(e),
            this.reduce(e)
        }
        function W(t, e, n) {
            t.multiplyTo(e, n),
            this.reduce(n)
        }
        function U() {
            return 0 == (this.t > 0 ? 1 & this[0] : this.s)
        }
        function G(t, e) {
            if (t > 4294967295 || t < 1) return n.ONE;
            var i = r(),
                o = r(),
                a = e.convert(this),
                s = b(t) - 1;
            for (a.copyTo(i); --s >= 0;) if (e.sqrTo(i, o), (t & 1 << s) > 0) e.mulTo(o, a, i);
            else var u = i,
                i = o,
                o = u;
            return e.revert(i)
        }
        function V(t, e) {
            var n;
            return n = t < 256 || e.isEven() ? new E(e) : new L(e),
            this.exp(t, n)
        }
        function Y() {
            var t = r();
            return this.copyTo(t),
            t
        }
        function X() {
            if (this.s < 0) {
                if (1 == this.t) return this[0] - this.DV;
                if (0 == this.t) return -1
            } else {
                if (1 == this.t) return this[0];
                if (0 == this.t) return 0
            }
            return (this[1] & (1 << 32 - this.DB) - 1) << this.DB | this[0]
        }
        function J() {
            return 0 == this.t ? this.s : this[0] << 24 >> 24
        }
        function $() {
            return 0 == this.t ? this.s : this[0] << 16 >> 16
        }
        function K(t) {
            return Math.floor(Math.LN2 * this.DB / Math.log(t))
        }
        function Z() {
            return this.s < 0 ? -1 : this.t <= 0 || 1 == this.t && this[0] <= 0 ? 0 : 1
        }
        function Q(t) {
            if (null == t && (t = 10), 0 == this.signum() || t < 2 || t > 36) return "0";
            var e = this.chunkSize(t),
                e = Math.pow(t, e),
                n = h(e),
                i = r(),
                o = r(),
                a = "";
            for (this.divRemTo(n, i, o); i.signum() > 0;) a = (e + o.intValue()).toString(t).substr(1) + a,
            i.divRemTo(n, i, o);
            return o.intValue().toString(t) + a
        }
        function tt(t, e) {
            this.fromInt(0),
            null == e && (e = 10);
            for (var i = this.chunkSize(e), r = Math.pow(e, i), o = !1, a = 0, s = 0, u = 0; u < t.length; ++u) {
                var f = l(t, u);
                f < 0 ? "-" == t.charAt(u) && 0 == this.signum() && (o = !0) : (s = e * s + f, ++a >= i && (this.dMultiply(r), this.dAddOffset(s, 0), s = a = 0))
            }
            a > 0 && (this.dMultiply(Math.pow(e, a)), this.dAddOffset(s, 0)),
            o && n.ZERO.subTo(this, this)
        }
        function et(t, e, i) {
            if ("number" == typeof e) if (t < 2) this.fromInt(1);
            else for (this.fromNumber(t, i), this.testBit(t - 1) || this.bitwiseTo(n.ONE.shiftLeft(t - 1), lt, this), this.isEven() && this.dAddOffset(1, 0); !this.isProbablePrime(e);) this.dAddOffset(2, 0),
            this.bitLength() > t && this.subTo(n.ONE.shiftLeft(t - 1), this);
            else {
                var i = [],
                    r = 7 & t;
                i.length = (t >> 3) + 1,
                e.nextBytes(i),
                r > 0 ? i[0] &= (1 << r) - 1 : i[0] = 0,
                this.fromString(i, 256)
            }
        }
        function nt() {
            var t = this.t,
                e = [];
            e[0] = this.s;
            var n, i = this.DB - t * this.DB % 8,
                r = 0;
            if (t-- > 0) for (i < this.DB && (n = this[t] >> i) != (this.s & this.DM) >> i && (e[r++] = n | this.s << this.DB - i); t >= 0;) i < 8 ? (n = (this[t] & (1 << i) - 1) << 8 - i, n |= this[--t] >> (i += this.DB - 8)) : (n = this[t] >> (i -= 8) & 255, i <= 0 && (i += this.DB, --t)),
            0 != (128 & n) && (n |= -256),
            0 == r && (128 & this.s) != (128 & n) && ++r,
            (r > 0 || n != this.s) && (e[r++] = n);
            return e
        }
        function it(t) {
            return 0 == this.compareTo(t)
        }
        function rt(t) {
            return this.compareTo(t) < 0 ? this : t
        }
        function ot(t) {
            return this.compareTo(t) > 0 ? this : t
        }
        function at(t, e, n) {
            var i, r, o = Math.min(t.t, this.t);
            for (i = 0; i < o; ++i) n[i] = e(this[i], t[i]);
            if (t.t < this.t) {
                for (r = t.s & this.DM, i = o; i < this.t; ++i) n[i] = e(this[i], r);
                n.t = this.t
            } else {
                for (r = this.s & this.DM, i = o; i < t.t; ++i) n[i] = e(r, t[i]);
                n.t = t.t
            }
            n.s = e(this.s, t.s),
            n.clamp()
        }
        function st(t, e) {
            return t & e
        }
        function ut(t) {
            var e = r();
            return this.bitwiseTo(t, st, e),
            e
        }
        function lt(t, e) {
            return t | e
        }
        function ft(t) {
            var e = r();
            return this.bitwiseTo(t, lt, e),
            e
        }
        function ct(t, e) {
            return t ^ e
        }
        function ht(t) {
            var e = r();
            return this.bitwiseTo(t, ct, e),
            e
        }
        function dt(t, e) {
            return t & ~e
        }
        function pt(t) {
            var e = r();
            return this.bitwiseTo(t, dt, e),
            e
        }
        function yt() {
            for (var t = r(), e = 0; e < this.t; ++e) t[e] = this.DM & ~this[e];
            return t.t = this.t,
            t.s = ~this.s,
            t
        }
        function mt(t) {
            var e = r();
            return t < 0 ? this.rShiftTo(-t, e) : this.lShiftTo(t, e),
            e
        }
        function vt(t) {
            var e = r();
            return t < 0 ? this.lShiftTo(-t, e) : this.rShiftTo(t, e),
            e
        }
        function gt(t) {
            if (0 == t) return -1;
            var e = 0;
            return 0 == (65535 & t) && (t >>= 16, e += 16),
            0 == (255 & t) && (t >>= 8, e += 8),
            0 == (15 & t) && (t >>= 4, e += 4),
            0 == (3 & t) && (t >>= 2, e += 2),
            0 == (1 & t) && ++e,
            e
        }
        function St() {
            for (var t = 0; t < this.t; ++t) if (0 != this[t]) return t * this.DB + gt(this[t]);
            return this.s < 0 ? this.t * this.DB : -1
        }
        function bt(t) {
            for (var e = 0; 0 != t;) t &= t - 1,
            ++e;
            return e
        }
        function wt() {
            for (var t = 0, e = this.s & this.DM, n = 0; n < this.t; ++n) t += bt(this[n] ^ e);
            return t
        }
        function _t(t) {
            var e = Math.floor(t / this.DB);
            return e >= this.t ? 0 != this.s : 0 != (this[e] & 1 << t % this.DB)
        }
        function Pt(t, e) {
            var i = n.ONE.shiftLeft(t);
            return this.bitwiseTo(i, e, i),
            i
        }
        function Ct(t) {
            return this.changeBit(t, lt)
        }
        function xt(t) {
            return this.changeBit(t, dt)
        }
        function Tt(t) {
            return this.changeBit(t, ct)
        }
        function kt(t, e) {
            for (var n = 0, i = 0, r = Math.min(t.t, this.t); n < r;) i += this[n] + t[n],
            e[n++] = i & this.DM,
            i >>= this.DB;
            if (t.t < this.t) {
                for (i += t.s; n < this.t;) i += this[n],
                e[n++] = i & this.DM,
                i >>= this.DB;
                i += this.s
            } else {
                for (i += this.s; n < t.t;) i += t[n],
                e[n++] = i & this.DM,
                i >>= this.DB;
                i += t.s
            }
            e.s = i < 0 ? -1 : 0,
            i > 0 ? e[n++] = i : i < -1 && (e[n++] = this.DV + i),
            e.t = n,
            e.clamp()
        }
        function Dt(t) {
            var e = r();
            return this.addTo(t, e),
            e
        }
        function Mt(t) {
            var e = r();
            return this.subTo(t, e),
            e
        }
        function Rt(t) {
            var e = r();
            return this.multiplyTo(t, e),
            e
        }
        function Et() {
            var t = r();
            return this.squareTo(t),
            t
        }
        function It(t) {
            var e = r();
            return this.divRemTo(t, e, null),
            e
        }
        function zt(t) {
            var e = r();
            return this.divRemTo(t, null, e),
            e
        }
        function At(t) {
            var e = r(),
                n = r();
            return this.divRemTo(t, e, n),
            [e, n]
        }
        function Ft(t) {
            this[this.t] = this.am(0, t - 1, this, 0, 0, this.t),
            ++this.t,
            this.clamp()
        }
        function Ot(t, e) {
            if (0 != t) {
                for (; this.t <= e;) this[this.t++] = 0;
                for (this[e] += t; this[e] >= this.DV;) this[e] -= this.DV,
                ++e >= this.t && (this[this.t++] = 0),
                ++this[e]
            }
        }
        function Bt() {}
        function Lt(t) {
            return t
        }
        function qt(t, e, n) {
            t.multiplyTo(e, n)
        }
        function Nt(t, e) {
            t.squareTo(e)
        }
        function Ht(t) {
            return this.exp(t, new Bt)
        }
        function jt(t, e, n) {
            var i = Math.min(this.t + t.t, e);
            for (n.s = 0, n.t = i; i > 0;) n[--i] = 0;
            var r;
            for (r = n.t - this.t; i < r; ++i) n[i + this.t] = this.am(0, t[i], n, i, 0, this.t);
            for (r = Math.min(t.t, e); i < r; ++i) this.am(0, t[i], n, i, 0, e - i);
            n.clamp()
        }
        function Wt(t, e, n) {
            --e;
            var i = n.t = this.t + t.t - e;
            for (n.s = 0; --i >= 0;) n[i] = 0;
            for (i = Math.max(e - this.t, 0); i < t.t; ++i) n[this.t + i - e] = this.am(e - i, t[i], n, 0, 0, this.t + i - e);
            n.clamp(),
            n.drShiftTo(1, n)
        }
        function Ut(t) {
            this.r2 = r(),
            this.q3 = r(),
            n.ONE.dlShiftTo(2 * t.t, this.r2),
            this.mu = this.r2.divide(t),
            this.m = t
        }
        function Gt(t) {
            if (t.s < 0 || t.t > 2 * this.m.t) return t.mod(this.m);
            if (t.compareTo(this.m) < 0) return t;
            var e = r();
            return t.copyTo(e),
            this.reduce(e),
            e
        }
        function Vt(t) {
            return t
        }
        function Yt(t) {
            for (t.drShiftTo(this.m.t - 1, this.r2), t.t > this.m.t + 1 && (t.t = this.m.t + 1, t.clamp()), this.mu.multiplyUpperTo(this.r2, this.m.t + 1, this.q3), this.m.multiplyLowerTo(this.q3, this.m.t + 1, this.r2); t.compareTo(this.r2) < 0;) t.dAddOffset(1, this.m.t + 1);
            for (t.subTo(this.r2, t); t.compareTo(this.m) >= 0;) t.subTo(this.m, t)
        }
        function Xt(t, e) {
            t.squareTo(e),
            this.reduce(e)
        }
        function Jt(t, e, n) {
            t.multiplyTo(e, n),
            this.reduce(n)
        }
        function $t(t, e) {
            var n, i, o = t.bitLength(),
                a = h(1);
            if (o <= 0) return a;
            n = o < 18 ? 1 : o < 48 ? 3 : o < 144 ? 4 : o < 768 ? 5 : 6,
            i = o < 8 ? new E(e) : e.isEven() ? new Ut(e) : new L(e);
            var s = [],
                u = 3,
                l = n - 1,
                f = (1 << n) - 1;
            if (s[1] = i.convert(this), n > 1) for (o = r(), i.sqrTo(s[1], o); u <= f;) s[u] = r(),
            i.mulTo(o, s[u - 2], s[u]),
            u += 2;
            for (var c, d = t.t - 1, p = !0, y = r(), o = b(t[d]) - 1; d >= 0;) {
                    for (o >= l ? c = t[d] >> o - l & f : (c = (t[d] & (1 << o + 1) - 1) << l - o, d > 0 && (c |= t[d - 1] >> this.DB + o - l)), u = n; 0 == (1 & c);) c >>= 1,
                    --u;
                    if ((o -= u) < 0 && (o += this.DB, --d), p) s[c].copyTo(a),
                    p = !1;
                    else {
                        for (; u > 1;) i.sqrTo(a, y),
                        i.sqrTo(y, a),
                        u -= 2;
                        u > 0 ? i.sqrTo(a, y) : (u = a, a = y, y = u),
                        i.mulTo(y, s[c], a)
                    }
                    for (; d >= 0 && 0 == (t[d] & 1 << o);) i.sqrTo(a, y),
                    u = a,
                    a = y,
                    y = u,
                    --o < 0 && (o = this.DB - 1, --d)
                }
            return i.revert(a)
        }
        function Kt(t) {
            var e = this.s < 0 ? this.negate() : this.clone(),
                t = t.s < 0 ? t.negate() : t.clone();
            if (e.compareTo(t) < 0) var n = e,
                e = t,
                t = n;
            var n = e.getLowestSetBit(),
                i = t.getLowestSetBit();
            if (i < 0) return e;
            for (n < i && (i = n), i > 0 && (e.rShiftTo(i, e), t.rShiftTo(i, t)); e.signum() > 0;)(n = e.getLowestSetBit()) > 0 && e.rShiftTo(n, e),
            (n = t.getLowestSetBit()) > 0 && t.rShiftTo(n, t),
            e.compareTo(t) >= 0 ? (e.subTo(t, e), e.rShiftTo(1, e)) : (t.subTo(e, t), t.rShiftTo(1, t));
            return i > 0 && t.lShiftTo(i, t),
            t
        }
        function Zt(t) {
            if (t <= 0) return 0;
            var e = this.DV % t,
                n = this.s < 0 ? t - 1 : 0;
            if (this.t > 0) if (0 == e) n = this[0] % t;
            else for (var i = this.t - 1; i >= 0; --i) n = (e * n + this[i]) % t;
            return n
        }
        function Qt(t) {
            var e = t.isEven();
            if (this.isEven() && e || 0 == t.signum()) return n.ZERO;
            for (var i = t.clone(), r = this.clone(), o = h(1), a = h(0), s = h(0), u = h(1); 0 != i.signum();) {
                for (; i.isEven();) i.rShiftTo(1, i),
                e ? (o.isEven() && a.isEven() || (o.addTo(this, o), a.subTo(t, a)), o.rShiftTo(1, o)) : a.isEven() || a.subTo(t, a),
                a.rShiftTo(1, a);
                for (; r.isEven();) r.rShiftTo(1, r),
                e ? (s.isEven() && u.isEven() || (s.addTo(this, s), u.subTo(t, u)), s.rShiftTo(1, s)) : u.isEven() || u.subTo(t, u),
                u.rShiftTo(1, u);
                i.compareTo(r) >= 0 ? (i.subTo(r, i), e && o.subTo(s, o), a.subTo(u, a)) : (r.subTo(i, r), e && s.subTo(o, s), u.subTo(a, u))
            }
            return 0 != r.compareTo(n.ONE) ? n.ZERO : u.compareTo(t) >= 0 ? u.subtract(t) : u.signum() < 0 ? (u.addTo(t, u), u.signum() < 0 ? u.add(t) : u) : u
        }
        function te(t) {
            var e, n = this.abs();
            if (1 == n.t && n[0] <= Ye[Ye.length - 1]) {
                for (e = 0; e < Ye.length; ++e) if (n[0] == Ye[e]) return !0;
                return !1
            }
            if (n.isEven()) return !1;
            for (e = 1; e < Ye.length;) {
                for (var i = Ye[e], r = e + 1; r < Ye.length && i < Xe;) i *= Ye[r++];
                for (i = n.modInt(i); e < r;) if (i % Ye[e++] == 0) return !1
            }
            return n.millerRabin(t)
        }
        function ee(t) {
            var e = this.subtract(n.ONE),
                i = e.getLowestSetBit();
            if (i <= 0) return !1;
            var o = e.shiftRight(i),
                t = t + 1 >> 1;
            t > Ye.length && (t = Ye.length);
            for (var a = r(), s = 0; s < t; ++s) {
                    a.fromInt(Ye[Math.floor(Math.random() * Ye.length)]);
                    var u = a.modPow(o, this);
                    if (0 != u.compareTo(n.ONE) && 0 != u.compareTo(e)) {
                        for (var l = 1; l++ < i && 0 != u.compareTo(e);) if (u = u.modPowInt(2, this), 0 == u.compareTo(n.ONE)) return !1;
                        if (0 != u.compareTo(e)) return !1
                    }
                }
            return !0
        }
        function ne() {}
        function ie(t) {
            var e;
            for (e = 0; e < t.length; e++) t[e] = Math.floor(256 * Math.random())
        }
        function re() {
            this.j = this.i = 0,
            this.S = []
        }
        function oe(t) {
            var e, n, i;
            for (e = 0; e < 256; ++e) this.S[e] = e;
            for (e = n = 0; e < 256; ++e) n = n + this.S[e] + t[e % t.length] & 255,
            i = this.S[e],
            this.S[e] = this.S[n],
            this.S[n] = i;
            this.j = this.i = 0
        }
        function ae() {
            var t;
            return this.i = this.i + 1 & 255,
            this.j = this.j + this.S[this.i] & 255,
            t = this.S[this.i],
            this.S[this.i] = this.S[this.j],
            this.S[this.j] = t,
            this.S[t + this.S[this.i] & 255]
        }
        function se() {
            return new re
        }
        function ue(t) {
            $e[Ke++] ^= 255 & t,
            $e[Ke++] ^= t >> 8 & 255,
            $e[Ke++] ^= t >> 16 & 255,
            $e[Ke++] ^= t >> 24 & 255,
            Ke >= Ze && (Ke -= Ze)
        }
        function le() {
            ue((new Date).getTime())
        }
        function fe() {
            if (null == Je) {
                for (le(), Je = se(), Je.init($e), Ke = 0; Ke < $e.length; ++Ke) $e[Ke] = 0;
                Ke = 0
            }
            return Je.next()
        }
        function ce(t) {
            var e;
            for (e = 0; e < t.length; ++e) t[e] = fe()
        }
        function he() {}
        function de(t) {
            function e(t, e) {
                var n = (65535 & t) + (65535 & e);
                return (t >> 16) + (e >> 16) + (n >> 16) << 16 | 65535 & n
            }
            function n(t, e) {
                return t >>> e | t << 32 - e
            }
            return t = function (t) {
                for (var t = t.replace(/\r\n/g, "\n"), e = "", n = 0; n < t.length; n++) {
                    var i = t.charCodeAt(n);
                    i < 128 ? e += String.fromCharCode(i) : (i > 127 && i < 2048 ? e += String.fromCharCode(i >> 6 | 192) : (e += String.fromCharCode(i >> 12 | 224), e += String.fromCharCode(i >> 6 & 63 | 128)), e += String.fromCharCode(63 & i | 128))
                }
                return e
            }(t),
 
 
            function (t) {
                for (var e = "", n = 0; n < 4 * t.length; n++) e += "0123456789abcdef".charAt(t[n >> 2] >> 8 * (3 - n % 4) + 4 & 15) + "0123456789abcdef".charAt(t[n >> 2] >> 8 * (3 - n % 4) & 15);
                return e
            }(function (t, i) {
                var r, o, a, s, u, l, f, c, h, d, p, y, m = [1116352408, 1899447441, 3049323471, 3921009573, 961987163, 1508970993, 2453635748, 2870763221, 3624381080, 310598401, 607225278, 1426881987, 1925078388, 2162078206, 2614888103, 3248222580, 3835390401, 4022224774, 264347078, 604807628, 770255983, 1249150122, 1555081692, 1996064986, 2554220882, 2821834349, 2952996808, 3210313671, 3336571891, 3584528711, 113926993, 338241895, 666307205, 773529912, 1294757372, 1396182291, 1695183700, 1986661051, 2177026350, 2456956037, 2730485921, 2820302411, 3259730800, 3345764771, 3516065817, 3600352804, 4094571909, 275423344, 430227734, 506948616, 659060556, 883997877, 958139571, 1322822218, 1537002063, 1747873779, 1955562222, 2024104815, 2227730452, 2361852424, 2428436474, 2756734187, 3204031479, 3329325298],
                    v = [1779033703, 3144134277, 1013904242, 2773480762, 1359893119, 2600822924, 528734635, 1541459225],
                    g = Array(64);
                for (t[i >> 5] |= 128 << 24 - i % 32, t[(i + 64 >> 9 << 4) + 15] = i, h = 0; h < t.length; h += 16) {
                        for (r = v[0], o = v[1], a = v[2], s = v[3], u = v[4], l = v[5], f = v[6], c = v[7], d = 0; d < 64; d++) g[d] = d < 16 ? t[d + h] : e(e(e(n(g[d - 2], 17) ^ n(g[d - 2], 19) ^ g[d - 2] >>> 10, g[d - 7]), n(g[d - 15], 7) ^ n(g[d - 15], 18) ^ g[d - 15] >>> 3), g[d - 16]),
                        p = e(e(e(e(c, n(u, 6) ^ n(u, 11) ^ n(u, 25)), u & l ^ ~u & f), m[d]), g[d]),
                        y = e(n(r, 2) ^ n(r, 13) ^ n(r, 22), r & o ^ r & a ^ o & a),
                        c = f,
                        f = l,
                        l = u,
                        u = e(s, p),
                        s = a,
                        a = o,
                        o = r,
                        r = e(p, y);
                        v[0] = e(r, v[0]),
                        v[1] = e(o, v[1]),
                        v[2] = e(a, v[2]),
                        v[3] = e(s, v[3]),
                        v[4] = e(u, v[4]),
                        v[5] = e(l, v[5]),
                        v[6] = e(f, v[6]),
                        v[7] = e(c, v[7])
                    }
                return v
            }(function (t) {
                for (var e = [], n = 0; n < 8 * t.length; n += 8) e[n >> 5] |= (255 & t.charCodeAt(n / 8)) << 24 - n % 32;
                return e
            }(t), 8 * t.length))
        }
        function pe(t) {
            function e(t, e) {
                return t << e | t >>> 32 - e
            }
            function n(t) {
                var e, n, i = "";
                for (e = 7; e >= 0; e--) n = t >>> 4 * e & 15,
                i += n.toString(16);
                return i
            }
            var i, r, o, a, s, u, l, f = Array(80),
                c = 1732584193,
                h = 4023233417,
                d = 2562383102,
                p = 271733878,
                y = 3285377520,
                t = function (t) {
                    for (var t = t.replace(/\r\n/g, "\n"), e = "", n = 0; n < t.length; n++) {
                        var i = t.charCodeAt(n);
                        i < 128 ? e += String.fromCharCode(i) : (i > 127 && i < 2048 ? e += String.fromCharCode(i >> 6 | 192) : (e += String.fromCharCode(i >> 12 | 224), e += String.fromCharCode(i >> 6 & 63 | 128)), e += String.fromCharCode(63 & i | 128))
                    }
                    return e
                }(t);
            o = t.length;
            var m = [];
            for (i = 0; i < o - 3; i += 4) r = t.charCodeAt(i) << 24 | t.charCodeAt(i + 1) << 16 | t.charCodeAt(i + 2) << 8 | t.charCodeAt(i + 3),
            m.push(r);
            switch (o % 4) {
                case 0:
                    i = 2147483648;
                    break;
                case 1:
                    i = t.charCodeAt(o - 1) << 24 | 8388608;
                    break;
                case 2:
                    i = t.charCodeAt(o - 2) << 24 | t.charCodeAt(o - 1) << 16 | 32768;
                    break;
                case 3:
                    i = t.charCodeAt(o - 3) << 24 | t.charCodeAt(o - 2) << 16 | t.charCodeAt(o - 1) << 8 | 128
                }
            for (m.push(i); m.length % 16 != 14;) m.push(0);
            for (m.push(o >>> 29), m.push(o << 3 & 4294967295), t = 0; t < m.length; t += 16) {
                    for (i = 0; i < 16; i++) f[i] = m[t + i];
                    for (i = 16; i <= 79; i++) f[i] = e(f[i - 3] ^ f[i - 8] ^ f[i - 14] ^ f[i - 16], 1);
                    for (r = c, o = h, a = d, s = p, u = y, i = 0; i <= 19; i++) l = e(r, 5) + (o & a | ~o & s) + u + f[i] + 1518500249 & 4294967295,
                    u = s,
                    s = a,
                    a = e(o, 30),
                    o = r,
                    r = l;
                    for (i = 20; i <= 39; i++) l = e(r, 5) + (o ^ a ^ s) + u + f[i] + 1859775393 & 4294967295,
                    u = s,
                    s = a,
                    a = e(o, 30),
                    o = r,
                    r = l;
                    for (i = 40; i <= 59; i++) l = e(r, 5) + (o & a | o & s | a & s) + u + f[i] + 2400959708 & 4294967295,
                    u = s,
                    s = a,
                    a = e(o, 30),
                    o = r,
                    r = l;
                    for (i = 60; i <= 79; i++) l = e(r, 5) + (o ^ a ^ s) + u + f[i] + 3395469782 & 4294967295,
                    u = s,
                    s = a,
                    a = e(o, 30),
                    o = r,
                    r = l;
                    c = c + r & 4294967295,
                    h = h + o & 4294967295,
                    d = d + a & 4294967295,
                    p = p + s & 4294967295,
                    y = y + u & 4294967295
                }
            return l = n(c) + n(h) + n(d) + n(p) + n(y),
            l.toLowerCase()
        }
        function ye(t, e) {
            return new n(t, e)
        }
        function me(t, e) {
            if (e < t.length + 11) throw "Message too long for RSA (n=" + e + ", l=" + t.length + ")";
            for (var i = [], r = t.length - 1; r >= 0 && e > 0;) {
                var o = t.charCodeAt(r--);
                o < 128 ? i[--e] = o : o > 127 && o < 2048 ? (i[--e] = 63 & o | 128, i[--e] = o >> 6 | 192) : (i[--e] = 63 & o | 128, i[--e] = o >> 6 & 63 | 128, i[--e] = o >> 12 | 224)
            }
            for (i[--e] = 0, r = new he, o = []; e > 2;) {
                for (o[0] = 0; 0 == o[0];) r.nextBytes(o);
                i[--e] = o[0]
            }
            return i[--e] = 2,
            i[--e] = 0,
            new n(i)
        }
        function ve() {
            this.n = null,
            this.e = 0,
            this.coeff = this.dmq1 = this.dmp1 = this.q = this.p = this.d = null
        }
        function ge(t, e) {
            null != t && null != e && t.length > 0 && e.length > 0 ? (this.n = ye(t, 16), this.e = parseInt(e, 16)) : alert("Invalid RSA public key")
        }
        function Se(t) {
            return t.modPowInt(this.e, this.n)
        }
        function be(t) {
            return t = me(t, this.n.bitLength() + 7 >> 3),
            null == t ? null : (t = this.doPublic(t), null == t ? null : (t = t.toString(16), 0 == (1 & t.length) ? t : "0" + t))
        }
        function we(t, e) {
            for (var n = t.toByteArray(), i = 0; i < n.length && 0 == n[i];)++i;
            if (n.length - i != e - 1 || 2 != n[i]) return null;
            for (++i; 0 != n[i];) if (++i >= n.length) return null;
            for (var r = ""; ++i < n.length;) {
                var o = 255 & n[i];
                o < 128 ? r += String.fromCharCode(o) : o > 191 && o < 224 ? (r += String.fromCharCode((31 & o) << 6 | 63 & n[i + 1]), ++i) : (r += String.fromCharCode((15 & o) << 12 | (63 & n[i + 1]) << 6 | 63 & n[i + 2]), i += 2)
            }
            return r
        }
        function _e(t, e, n) {
            null != t && null != e && t.length > 0 && e.length > 0 ? (this.n = ye(t, 16), this.e = parseInt(e, 16), this.d = ye(n, 16)) : alert("Invalid RSA private key")
        }
        function Pe(t, e, n, i, r, o, a, s) {
            null != t && null != e && t.length > 0 && e.length > 0 ? (this.n = ye(t, 16), this.e = parseInt(e, 16), this.d = ye(n, 16), this.p = ye(i, 16), this.q = ye(r, 16), this.dmp1 = ye(o, 16), this.dmq1 = ye(a, 16), this.coeff = ye(s, 16)) : alert("Invalid RSA private key")
        }
        function Ce(t, e) {
            var i = new ne,
                r = t >> 1;
            this.e = parseInt(e, 16);
            for (var o = new n(e, 16);;) {
                    for (; this.p = new n(t - r, 1, i), 0 != this.p.subtract(n.ONE).gcd(o).compareTo(n.ONE) || !this.p.isProbablePrime(10););
                    for (; this.q = new n(r, 1, i), 0 != this.q.subtract(n.ONE).gcd(o).compareTo(n.ONE) || !this.q.isProbablePrime(10););
                    if (this.p.compareTo(this.q) <= 0) {
                        var a = this.p;
                        this.p = this.q,
                        this.q = a
                    }
                    var a = this.p.subtract(n.ONE),
                        s = this.q.subtract(n.ONE),
                        u = a.multiply(s);
                    if (0 == u.gcd(o).compareTo(n.ONE)) {
                            this.n = this.p.multiply(this.q),
                            this.d = o.modInverse(u),
                            this.dmp1 = this.d.mod(a),
                            this.dmq1 = this.d.mod(s),
                            this.coeff = this.q.modInverse(this.p);
                            break
                        }
                }
        }
        function xe(t) {
            if (null == this.p || null == this.q) return t.modPow(this.d, this.n);
            for (var e = t.mod(this.p).modPow(this.dmp1, this.p), t = t.mod(this.q).modPow(this.dmq1, this.q); e.compareTo(t) < 0;) e = e.add(this.p);
            return e.subtract(t).multiply(this.coeff).mod(this.p).multiply(this.q).add(t)
        }
        function Te(t) {
            return t = this.doPrivate(ye(t, 16)),
            null == t ? null : we(t, this.n.bitLength() + 7 >> 3)
        }
        function ke(t, e, n) {
            e /= 4;
            for (var t = (0, an[n])(t), n = "00" + on[n] + t, t = "", e = e - 4 - n.length, i = 0; i < e; i += 2) t += "ff";
            return sPaddedMessageHex = "0001" + t + n
        }
        function De(t, e) {
            var n = ke(t, this.n.bitLength(), e);
            return this.doPrivate(ye(n, 16)).toString(16)
        }
        function Me(t) {
            return t = ke(t, this.n.bitLength(), "sha1"),
            this.doPrivate(ye(t, 16)).toString(16)
        }
        function Re(t) {
            return t = ke(t, this.n.bitLength(), "sha256"),
            this.doPrivate(ye(t, 16)).toString(16)
        }
        function Ee(t, e, n) {
            var i = new ve;
            return i.setPublic(e, n),
            i.doPublic(t)
        }
        function Ie(t, e, n) {
            return Ee(t, e, n).toString(16).replace(/^1f+00/, "")
        }
        function ze(t) {
            for (var e in on) {
                var n = on[e],
                    i = n.length;
                if (t.substring(0, i) == n) return [e, t.substring(i)]
            }
            return []
        }
        function Ae(t, e, n, i) {
            return e = Ie(e, n, i),
            n = ze(e),
            0 != n.length && (e = n[1], t = (0, an[n[0]])(t), e == t)
        }
        function Fe(t, e) {
            var n = ye(t, 16);
            return Ae(e, n, this.n.toString(16), this.e.toString(16))
        }
        function Oe(t, e) {
            var e = e.replace(/[ \n]+/g, ""),
                n = this.doPublic(ye(e, 16)).toString(16).replace(/^1f+00/, ""),
                i = ze(n);
            return 0 != i.length && (n = i[1], i = (0, an[i[0]])(t), n == i)
        }
        var Be, Le = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ?
        function (t) {
            return typeof t
        } : function (t) {
            return t && "function" == typeof Symbol && t.constructor === Symbol && t !== Symbol.prototype ? "symbol" : typeof t
        },
            qe = {
                appName: "Netscape",
                appVersion: 40
            },
            Ne = 0xdeadbeefcafe,
            He = 15715070 == (16777215 & Ne);
        He && "Microsoft Internet Explorer" == qe.appName ? (n.prototype.am = a, Be = 30) : He && "Netscape" != qe.appName ? (n.prototype.am = o, Be = 26) : (n.prototype.am = s, Be = 28),
        n.prototype.DB = Be,
        n.prototype.DM = (1 << Be) - 1,
        n.prototype.DV = 1 << Be;
        var je = 52;
        n.prototype.FV = Math.pow(2, je),
        n.prototype.F1 = je - Be,
        n.prototype.F2 = 2 * Be - je;
        var We, Ue, Ge = "0123456789abcdefghijklmnopqrstuvwxyz",
            Ve = [];
        for (We = "0".charCodeAt(0), Ue = 0; Ue <= 9; ++Ue) Ve[We++] = Ue;
        for (We = "a".charCodeAt(0), Ue = 10; Ue < 36; ++Ue) Ve[We++] = Ue;
        for (We = "A".charCodeAt(0), Ue = 10; Ue < 36; ++Ue) Ve[We++] = Ue;
        E.prototype.convert = I,
        E.prototype.revert = z,
        E.prototype.reduce = A,
        E.prototype.mulTo = F,
        E.prototype.sqrTo = O,
        L.prototype.convert = q,
        L.prototype.revert = N,
        L.prototype.reduce = H,
        L.prototype.mulTo = W,
        L.prototype.sqrTo = j,
        n.prototype.copyTo = f,
        n.prototype.fromInt = c,
        n.prototype.fromString = d,
        n.prototype.clamp = p,
        n.prototype.dlShiftTo = _,
        n.prototype.drShiftTo = P,
        n.prototype.lShiftTo = C,
        n.prototype.rShiftTo = x,
        n.prototype.subTo = T,
        n.prototype.multiplyTo = k,
        n.prototype.squareTo = D,
        n.prototype.divRemTo = M,
        n.prototype.invDigit = B,
        n.prototype.isEven = U,
        n.prototype.exp = G,
        n.prototype.toString = y,
        n.prototype.negate = m,
        n.prototype.abs = g,
        n.prototype.compareTo = S,
        n.prototype.bitLength = w,
        n.prototype.mod = R,
        n.prototype.modPowInt = V,
        n.ZERO = h(0),
        n.ONE = h(1),
        Bt.prototype.convert = Lt,
        Bt.prototype.revert = Lt,
        Bt.prototype.mulTo = qt,
        Bt.prototype.sqrTo = Nt,
        Ut.prototype.convert = Gt,
        Ut.prototype.revert = Vt,
        Ut.prototype.reduce = Yt,
        Ut.prototype.mulTo = Jt,
        Ut.prototype.sqrTo = Xt;
        var Ye = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233, 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317, 331, 337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419, 421, 431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503, 509, 521, 523, 541, 547, 557, 563, 569, 571, 577, 587, 593, 599, 601, 607, 613, 617, 619, 631, 641, 643, 647, 653, 659, 661, 673, 677, 683, 691, 701, 709, 719, 727, 733, 739, 743, 751, 757, 761, 769, 773, 787, 797, 809, 811, 821, 823, 827, 829, 839, 853, 857, 859, 863, 877, 881, 883, 887, 907, 911, 919, 929, 937, 941, 947, 953, 967, 971, 977, 983, 991, 997],
            Xe = 67108864 / Ye[Ye.length - 1];
        n.prototype.chunkSize = K,
        n.prototype.toRadix = Q,
        n.prototype.fromRadix = tt,
        n.prototype.fromNumber = et,
        n.prototype.bitwiseTo = at,
        n.prototype.changeBit = Pt,
        n.prototype.addTo = kt,
        n.prototype.dMultiply = Ft,
        n.prototype.dAddOffset = Ot,
        n.prototype.multiplyLowerTo = jt,
        n.prototype.multiplyUpperTo = Wt,
        n.prototype.modInt = Zt,
        n.prototype.millerRabin = ee,
        n.prototype.clone = Y,
        n.prototype.intValue = X,
        n.prototype.byteValue = J,
        n.prototype.shortValue = $,
        n.prototype.signum = Z,
        n.prototype.toByteArray = nt,
        n.prototype.equals = it,
        n.prototype.min = rt,
        n.prototype.max = ot,
        n.prototype.and = ut,
        n.prototype.or = ft,
        n.prototype.xor = ht,
        n.prototype.andNot = pt,
        n.prototype.not = yt,
        n.prototype.shiftLeft = mt,
        n.prototype.shiftRight = vt,
        n.prototype.getLowestSetBit = St,
        n.prototype.bitCount = wt,
        n.prototype.testBit = _t,
        n.prototype.setBit = Ct,
        n.prototype.clearBit = xt,
        n.prototype.flipBit = Tt,
        n.prototype.add = Dt,
        n.prototype.subtract = Mt,
        n.prototype.multiply = Rt,
        n.prototype.divide = It,
        n.prototype.remainder = zt,
        n.prototype.divideAndRemainder = At,
        n.prototype.modPow = $t,
        n.prototype.modInverse = Qt,
        n.prototype.pow = Ht,
        n.prototype.gcd = Kt,
        n.prototype.isProbablePrime = te,
        n.prototype.square = Et,
 
 
        function (t, e, n, i, r, o, a) {
                function s(t) {
                    var e, i, r = this,
                        o = t.length,
                        a = 0,
                        s = r.i = r.j = r.m = 0;
                    for (r.S = [], r.c = [], o || (t = [o++]); a < n;) r.S[a] = a++;
                    for (a = 0; a < n; a++) e = r.S[a],
                    s = s + e + t[a % o] & n - 1,
                    i = r.S[s],
                    r.S[a] = i,
                    r.S[s] = e;
                    r.g = function (t) {
                            var e = r.S,
                                i = r.i + 1 & n - 1,
                                o = e[i],
                                a = r.j + o & n - 1,
                                s = e[a];
                            e[i] = s,
                            e[a] = o;
                            for (var u = e[o + s & n - 1]; --t;) i = i + 1 & n - 1,
                            o = e[i],
                            a = a + o & n - 1,
                            s = e[a],
                            e[i] = s,
                            e[a] = o,
                            u = u * n + e[o + s & n - 1];
                            return r.i = i,
                            r.j = a,
                            u
                        },
                    r.g(n)
                }
                function u(t, e, n, i, r) {
                    if (n = [], r = "undefined" == typeof t ? "undefined" : Le(t), e && "object" == r) for (i in t) if (i.indexOf("S") < 5) try {
                        n.push(u(t[i], e - 1))
                    } catch (t) {}
                    return n.length ? n : t + ("string" != r ? "\0" : "")
                }
                function l(t, e, i, r) {
                    for (t += "", r = i = 0; r < t.length; r++) {
                        var o = e,
                            a = r & n - 1,
                            s = (i ^= 19 * e[r & n - 1]) + t.charCodeAt(r);
                        o[a] = s & n - 1
                    }
                    t = "";
                    for (r in e) t += String.fromCharCode(e[r]);
                    return t
                }
                e.seedrandom = function (f, c) {
                    var h, d = [],
                        f = l(u(c ? [f, t] : arguments.length ? f : [(new Date).getTime(), t, window], 3), d);
                    return h = new s(d),
                    l(h.S, t),
                    e.random = function () {
                            for (var t = h.g(i), e = a, s = 0; t < r;) t = (t + s) * n,
                            e *= n,
                            s = h.g(1);
                            for (; t >= o;) t /= 2,
                            e /= 2,
                            s >>>= 1;
                            return (t + s) / e
                        },
                    f
                },
                a = e.pow(n, i),
                r = e.pow(2, r),
                o = 2 * r,
                l(e.random(), t)
            }([], Math, 256, 6, 52),
        ne.prototype.nextBytes = ie,
        re.prototype.init = oe,
        re.prototype.next = ae;
        var Je, $e, Ke, Ze = 256;
        if (null == $e) {
                $e = [],
                Ke = 0;
                var Qe;
                if ("Netscape" == qe.appName && qe.appVersion < "5" && window.crypto) {
                    var tn = window.crypto.random(32);
                    for (Qe = 0; Qe < tn.length; ++Qe) $e[Ke++] = 255 & tn.charCodeAt(Qe)
                }
                for (; Ke < Ze;) Qe = Math.floor(65536 * Math.random()),
                $e[Ke++] = Qe >>> 8,
                $e[Ke++] = 255 & Qe;
                Ke = 0,
                le()
            }
        he.prototype.nextBytes = ce;
        var en = {
                hex: function (t) {
                    return de(t)
                }
            },
            nn = {
                hex: function (t) {
                    return pe(t)
                }
            },
            rn = function (t) {
                function e(t, e) {
                    var n, i, r, o, a;
                    return r = 2147483648 & t,
                    o = 2147483648 & e,
                    n = 1073741824 & t,
                    i = 1073741824 & e,
                    a = (1073741823 & t) + (1073741823 & e),
                    n & i ? 2147483648 ^ a ^ r ^ o : n | i ? 1073741824 & a ? 3221225472 ^ a ^ r ^ o : 1073741824 ^ a ^ r ^ o : a ^ r ^ o
                }
                function n(t, n, i, r, o, a, s) {
                    return t = e(t, e(e(n & i | ~n & r, o), s)),
                    e(t << a | t >>> 32 - a, n)
                }
                function i(t, n, i, r, o, a, s) {
                    return t = e(t, e(e(n & r | i & ~r, o), s)),
                    e(t << a | t >>> 32 - a, n)
                }
                function r(t, n, i, r, o, a, s) {
                    return t = e(t, e(e(n ^ i ^ r, o), s)),
                    e(t << a | t >>> 32 - a, n)
                }
                function o(t, n, i, r, o, a, s) {
                    return t = e(t, e(e(i ^ (n | ~r), o), s)),
                    e(t << a | t >>> 32 - a, n)
                }
                function a(t) {
                    var e, n = "",
                        i = "";
                    for (e = 0; e <= 3; e++) i = t >>> 8 * e & 255,
                    i = "0" + i.toString(16),
                    n += i.substr(i.length - 2, 2);
                    return n
                }
                var s, u, l, f, c, h, d, p, y = [],
                    t = function (t) {
                        for (var t = t.replace(/\r\n/g, "\n"), e = "", n = 0; n < t.length; n++) {
                            var i = t.charCodeAt(n);
                            i < 128 ? e += String.fromCharCode(i) : (i > 127 && i < 2048 ? e += String.fromCharCode(i >> 6 | 192) : (e += String.fromCharCode(i >> 12 | 224), e += String.fromCharCode(i >> 6 & 63 | 128)), e += String.fromCharCode(63 & i | 128))
                        }
                        return e
                    }(t),
                    y = function (t) {
                        var e, n = t.length;
                        e = n + 8;
                        for (var i = 16 * ((e - e % 64) / 64 + 1), r = Array(i - 1), o = 0, a = 0; a < n;) e = (a - a % 4) / 4,
                        o = a % 4 * 8,
                        r[e] |= t.charCodeAt(a) << o,
                        a++;
                        return r[(a - a % 4) / 4] |= 128 << a % 4 * 8,
                        r[i - 2] = n << 3,
                        r[i - 1] = n >>> 29,
                        r
                    }(t);
                for (c = 1732584193, h = 4023233417, d = 2562383102, p = 271733878, t = 0; t < y.length; t += 16) s = c,
                u = h,
                l = d,
                f = p,
                c = n(c, h, d, p, y[t + 0], 7, 3614090360),
                p = n(p, c, h, d, y[t + 1], 12, 3905402710),
                d = n(d, p, c, h, y[t + 2], 17, 606105819),
                h = n(h, d, p, c, y[t + 3], 22, 3250441966),
                c = n(c, h, d, p, y[t + 4], 7, 4118548399),
                p = n(p, c, h, d, y[t + 5], 12, 1200080426),
                d = n(d, p, c, h, y[t + 6], 17, 2821735955),
                h = n(h, d, p, c, y[t + 7], 22, 4249261313),
                c = n(c, h, d, p, y[t + 8], 7, 1770035416),
                p = n(p, c, h, d, y[t + 9], 12, 2336552879),
                d = n(d, p, c, h, y[t + 10], 17, 4294925233),
                h = n(h, d, p, c, y[t + 11], 22, 2304563134),
                c = n(c, h, d, p, y[t + 12], 7, 1804603682),
                p = n(p, c, h, d, y[t + 13], 12, 4254626195),
                d = n(d, p, c, h, y[t + 14], 17, 2792965006),
                h = n(h, d, p, c, y[t + 15], 22, 1236535329),
                c = i(c, h, d, p, y[t + 1], 5, 4129170786),
                p = i(p, c, h, d, y[t + 6], 9, 3225465664),
                d = i(d, p, c, h, y[t + 11], 14, 643717713),
                h = i(h, d, p, c, y[t + 0], 20, 3921069994),
                c = i(c, h, d, p, y[t + 5], 5, 3593408605),
                p = i(p, c, h, d, y[t + 10], 9, 38016083),
                d = i(d, p, c, h, y[t + 15], 14, 3634488961),
                h = i(h, d, p, c, y[t + 4], 20, 3889429448),
                c = i(c, h, d, p, y[t + 9], 5, 568446438),
                p = i(p, c, h, d, y[t + 14], 9, 3275163606),
                d = i(d, p, c, h, y[t + 3], 14, 4107603335),
                h = i(h, d, p, c, y[t + 8], 20, 1163531501),
                c = i(c, h, d, p, y[t + 13], 5, 2850285829),
                p = i(p, c, h, d, y[t + 2], 9, 4243563512),
                d = i(d, p, c, h, y[t + 7], 14, 1735328473),
                h = i(h, d, p, c, y[t + 12], 20, 2368359562),
                c = r(c, h, d, p, y[t + 5], 4, 4294588738),
                p = r(p, c, h, d, y[t + 8], 11, 2272392833),
                d = r(d, p, c, h, y[t + 11], 16, 1839030562),
                h = r(h, d, p, c, y[t + 14], 23, 4259657740),
                c = r(c, h, d, p, y[t + 1], 4, 2763975236),
                p = r(p, c, h, d, y[t + 4], 11, 1272893353),
                d = r(d, p, c, h, y[t + 7], 16, 4139469664),
                h = r(h, d, p, c, y[t + 10], 23, 3200236656),
                c = r(c, h, d, p, y[t + 13], 4, 681279174),
                p = r(p, c, h, d, y[t + 0], 11, 3936430074),
                d = r(d, p, c, h, y[t + 3], 16, 3572445317),
                h = r(h, d, p, c, y[t + 6], 23, 76029189),
                c = r(c, h, d, p, y[t + 9], 4, 3654602809),
                p = r(p, c, h, d, y[t + 12], 11, 3873151461),
                d = r(d, p, c, h, y[t + 15], 16, 530742520),
                h = r(h, d, p, c, y[t + 2], 23, 3299628645),
                c = o(c, h, d, p, y[t + 0], 6, 4096336452),
                p = o(p, c, h, d, y[t + 7], 10, 1126891415),
                d = o(d, p, c, h, y[t + 14], 15, 2878612391),
                h = o(h, d, p, c, y[t + 5], 21, 4237533241),
                c = o(c, h, d, p, y[t + 12], 6, 1700485571),
                p = o(p, c, h, d, y[t + 3], 10, 2399980690),
                d = o(d, p, c, h, y[t + 10], 15, 4293915773),
                h = o(h, d, p, c, y[t + 1], 21, 2240044497),
                c = o(c, h, d, p, y[t + 8], 6, 1873313359),
                p = o(p, c, h, d, y[t + 15], 10, 4264355552),
                d = o(d, p, c, h, y[t + 6], 15, 2734768916),
                h = o(h, d, p, c, y[t + 13], 21, 1309151649),
                c = o(c, h, d, p, y[t + 4], 6, 4149444226),
                p = o(p, c, h, d, y[t + 11], 10, 3174756917),
                d = o(d, p, c, h, y[t + 2], 15, 718787259),
                h = o(h, d, p, c, y[t + 9], 21, 3951481745),
                c = e(c, s),
                h = e(h, u),
                d = e(d, l),
                p = e(p, f);
                return (a(c) + a(h) + a(d) + a(p)).toLowerCase()
            };
        ve.prototype.doPublic = Se,
        ve.prototype.setPublic = ge,
        ve.prototype.encrypt = be,
        ve.prototype.doPrivate = xe,
        ve.prototype.setPrivate = _e,
        ve.prototype.setPrivateEx = Pe,
        ve.prototype.generate = Ce,
        ve.prototype.decrypt = Te;
        var on = [];
        on.sha1 = "3021300906052b0e03021a05000414",
        on.sha256 = "3031300d060960864801650304020105000420";
        var an = [];
        an.sha1 = nn.hex,
        an.sha256 = en.hex,
        ve.prototype.signString = De,
        ve.prototype.signStringWithSHA1 = Me,
        ve.prototype.signStringWithSHA256 = Re,
        ve.prototype.verifyString = Oe,
        ve.prototype.verifyHexSignatureForMessage = Fe;
        var sn = function () {
                var t = {
                    Sbox: [99, 124, 119, 123, 242, 107, 111, 197, 48, 1, 103, 43, 254, 215, 171, 118, 202, 130, 201, 125, 250, 89, 71, 240, 173, 212, 162, 175, 156, 164, 114, 192, 183, 253, 147, 38, 54, 63, 247, 204, 52, 165, 229, 241, 113, 216, 49, 21, 4, 199, 35, 195, 24, 150, 5, 154, 7, 18, 128, 226, 235, 39, 178, 117, 9, 131, 44, 26, 27, 110, 90, 160, 82, 59, 214, 179, 41, 227, 47, 132, 83, 209, 0, 237, 32, 252, 177, 91, 106, 203, 190, 57, 74, 76, 88, 207, 208, 239, 170, 251, 67, 77, 51, 133, 69, 249, 2, 127, 80, 60, 159, 168, 81, 163, 64, 143, 146, 157, 56, 245, 188, 182, 218, 33, 16, 255, 243, 210, 205, 12, 19, 236, 95, 151, 68, 23, 196, 167, 126, 61, 100, 93, 25, 115, 96, 129, 79, 220, 34, 42, 144, 136, 70, 238, 184, 20, 222, 94, 11, 219, 224, 50, 58, 10, 73, 6, 36, 92, 194, 211, 172, 98, 145, 149, 228, 121, 231, 200, 55, 109, 141, 213, 78, 169, 108, 86, 244, 234, 101, 122, 174, 8, 186, 120, 37, 46, 28, 166, 180, 198, 232, 221, 116, 31, 75, 189, 139, 138, 112, 62, 181, 102, 72, 3, 246, 14, 97, 53, 87, 185, 134, 193, 29, 158, 225, 248, 152, 17, 105, 217, 142, 148, 155, 30, 135, 233, 206, 85, 40, 223, 140, 161, 137, 13, 191, 230, 66, 104, 65, 153, 45, 15, 176, 84, 187, 22],
                    ShiftRowTab: [0, 5, 10, 15, 4, 9, 14, 3, 8, 13, 2, 7, 12, 1, 6, 11]
                };
                return t.Init = function () {
                    t.Sbox_Inv = Array(256);
                    for (var e = 0; e < 256; e++) t.Sbox_Inv[t.Sbox[e]] = e;
                    for (t.ShiftRowTab_Inv = Array(16), e = 0; e < 16; e++) t.ShiftRowTab_Inv[t.ShiftRowTab[e]] = e;
                    for (t.xtime = Array(256), e = 0; e < 128; e++) t.xtime[e] = e << 1,
                    t.xtime[128 + e] = e << 1 ^ 27
                },
                t.Done = function () {
                    delete t.Sbox_Inv,
                    delete t.ShiftRowTab_Inv,
                    delete t.xtime
                },
                t.ExpandKey = function (e) {
                    var n, i = e.length,
                        r = 1;
                    switch (i) {
                        case 16:
                            n = 176;
                            break;
                        case 24:
                            n = 208;
                            break;
                        case 32:
                            n = 240;
                            break;
                        default:
                            alert("my.ExpandKey: Only key lengths of 16, 24 or 32 bytes allowed!")
                        }
                    for (var o = i; o < n; o += 4) {
                            var a = e.slice(o - 4, o);
                            o % i == 0 ? (a = [t.Sbox[a[1]] ^ r, t.Sbox[a[2]], t.Sbox[a[3]], t.Sbox[a[0]]], (r <<= 1) >= 256 && (r ^= 283)) : i > 24 && o % i == 16 && (a = [t.Sbox[a[0]], t.Sbox[a[1]], t.Sbox[a[2]], t.Sbox[a[3]]]);
                            for (var s = 0; s < 4; s++) e[o + s] = e[o + s - i] ^ a[s]
                        }
                },
                t.Encrypt = function (e, n) {
                    var i = n.length;
                    t.AddRoundKey(e, n.slice(0, 16));
                    for (var r = 16; r < i - 16; r += 16) t.SubBytes(e, t.Sbox),
                    t.ShiftRows(e, t.ShiftRowTab),
                    t.MixColumns(e),
                    t.AddRoundKey(e, n.slice(r, r + 16));
                    t.SubBytes(e, t.Sbox),
                    t.ShiftRows(e, t.ShiftRowTab),
                    t.AddRoundKey(e, n.slice(r, i))
                },
                t.Decrypt = function (e, n) {
                    var i = n.length;
                    for (t.AddRoundKey(e, n.slice(i - 16, i)), t.ShiftRows(e, t.ShiftRowTab_Inv), t.SubBytes(e, t.Sbox_Inv), i -= 32; i >= 16; i -= 16) t.AddRoundKey(e, n.slice(i, i + 16)),
                    t.MixColumns_Inv(e),
                    t.ShiftRows(e, t.ShiftRowTab_Inv),
                    t.SubBytes(e, t.Sbox_Inv);
                    t.AddRoundKey(e, n.slice(0, 16))
                },
                t.SubBytes = function (t, e) {
                    for (var n = 0; n < 16; n++) t[n] = e[t[n]]
                },
                t.AddRoundKey = function (t, e) {
                    for (var n = 0; n < 16; n++) t[n] ^= e[n]
                },
                t.ShiftRows = function (t, e) {
                    for (var n = [].concat(t), i = 0; i < 16; i++) t[i] = n[e[i]]
                },
                t.MixColumns = function (e) {
                    for (var n = 0; n < 16; n += 4) {
                        var i = e[n + 0],
                            r = e[n + 1],
                            o = e[n + 2],
                            a = e[n + 3],
                            s = i ^ r ^ o ^ a;
                        e[n + 0] ^= s ^ t.xtime[i ^ r],
                        e[n + 1] ^= s ^ t.xtime[r ^ o],
                        e[n + 2] ^= s ^ t.xtime[o ^ a],
                        e[n + 3] ^= s ^ t.xtime[a ^ i]
                    }
                },
                t.MixColumns_Inv = function (e) {
                    for (var n = 0; n < 16; n += 4) {
                        var i = e[n + 0],
                            r = e[n + 1],
                            o = e[n + 2],
                            a = e[n + 3],
                            s = i ^ r ^ o ^ a,
                            u = t.xtime[s],
                            l = t.xtime[t.xtime[u ^ i ^ o]] ^ s;
                        s ^= t.xtime[t.xtime[u ^ r ^ a]],
                        e[n + 0] ^= l ^ t.xtime[i ^ r],
                        e[n + 1] ^= s ^ t.xtime[r ^ o],
                        e[n + 2] ^= l ^ t.xtime[o ^ a],
                        e[n + 3] ^= s ^ t.xtime[a ^ i]
                    }
                },
                t
            }(),
            un = function () {
                var t = {};
                return sn.Init(),
                t.b256to64 = function (t) {
                    var e, n, i, r = "",
                        o = 0,
                        a = 0,
                        s = t.length;
                    for (i = 0; i < s; i++) n = t.charCodeAt(i),
                    0 == a ? (r += "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".charAt(n >> 2 & 63), e = (3 & n) << 4) : 1 == a ? (r += "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".charAt(e | n >> 4 & 15), e = (15 & n) << 2) : 2 == a && (r += "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".charAt(e | n >> 6 & 3), o += 1, r += "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".charAt(63 & n)),
                    o += 1,
                    a += 1,
                    3 == a && (a = 0);
                    return a > 0 && (r += "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".charAt(e), r += "="),
                    1 == a && (r += "="),
                    r
                },
                t.b64to256 = function (t) {
                    var e, n, i = "",
                        r = 0,
                        o = 0,
                        a = t.length;
                    for (n = 0; n < a; n++) e = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".indexOf(t.charAt(n)),
                    e >= 0 && (r && (i += String.fromCharCode(o | e >> 6 - r & 255)), r = r + 2 & 7, o = e << r & 255);
                    return i
                },
                t.b16to64 = function (t) {
                    var e, n, i = "";
                    for (t.length % 2 == 1 && (t = "0" + t), e = 0; e + 3 <= t.length; e += 3) n = parseInt(t.substring(e, e + 3), 16),
                    i += "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".charAt(n >> 6) + "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".charAt(63 & n);
                    for (e + 1 == t.length ? (n = parseInt(t.substring(e, e + 1), 16), i += "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".charAt(n << 2)) : e + 2 == t.length && (n = parseInt(t.substring(e, e + 2), 16), i += "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".charAt(n >> 2) + "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".charAt((3 & n) << 4));
                    (3 & i.length) > 0;) i += "=";
                    return i
                },
                t.b64to16 = function (t) {
                    var e, n, i = "",
                        r = 0;
                    for (e = 0; e < t.length && "=" != t.charAt(e); ++e) v = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".indexOf(t.charAt(e)),
                    v < 0 || (0 == r ? (i += u(v >> 2), n = 3 & v, r = 1) : 1 == r ? (i += u(n << 2 | v >> 4), n = 15 & v, r = 2) : 2 == r ? (i += u(n), i += u(v >> 2), n = 3 & v, r = 3) : (i += u(n << 2 | v >> 4), i += u(15 & v), r = 0));
                    return 1 == r && (i += u(n << 2)),
                    i
                },
                t.string2bytes = function (t) {
                    for (var e = [], n = 0; n < t.length; n++) e.push(t.charCodeAt(n));
                    return e
                },
                t.bytes2string = function (t) {
                    for (var e = "", n = 0; n < t.length; n++) e += String.fromCharCode(t[n]);
                    return e
                },
                t.blockXOR = function (t, e) {
                    for (var n = Array(16), i = 0; i < 16; i++) n[i] = t[i] ^ e[i];
                    return n
                },
                t.blockIV = function () {
                    var t = new he,
                        e = Array(16);
                    return t.nextBytes(e),
                    e
                },
                t.pad16 = function (t) {
                    var e = t.slice(0),
                        n = (16 - t.length % 16) % 16;
                    for (i = t.length; i < t.length + n; i++) e.push(0);
                    return e
                },
                t.depad = function (t) {
                    for (t = t.slice(0); 0 == t[t.length - 1];) t = t.slice(0, t.length - 1);
                    return t
                },
                t.encryptAESCBC = function (e, n) {
                    var i = n.slice(0);
                    sn.ExpandKey(i);
                    for (var r = t.string2bytes(e), r = t.pad16(r), o = t.blockIV(), a = 0; a < r.length / 16; a++) {
                        var s = r.slice(16 * a, 16 * a + 16),
                            u = o.slice(16 * a, 16 * a + 16),
                            s = t.blockXOR(u, s);
                        sn.Encrypt(s, i),
                        o = o.concat(s)
                    }
                    return i = t.bytes2string(o),
                    t.b256to64(i)
                },
                t.decryptAESCBC = function (e, n) {
                    var i = n.slice(0);
                    sn.ExpandKey(i);
                    for (var e = t.b64to256(e), r = t.string2bytes(e), o = [], a = 1; a < r.length / 16; a++) {
                        var s = r.slice(16 * a, 16 * a + 16),
                            u = r.slice(16 * (a - 1), 16 * (a - 1) + 16);
                        sn.Decrypt(s, i),
                        s = t.blockXOR(u, s),
                        o = o.concat(s)
                    }
                    return o = t.depad(o),
                    t.bytes2string(o)
                },
                t.wrap60 = function (t) {
                    for (var e = "", n = 0; n < t.length; n++) n % 60 == 0 && 0 != n && (e += "\n"),
                    e += t[n];
                    return e
                },
                t.generateAESKey = function () {
                    var t = Array(16);
                    return (new he).nextBytes(t),
                    t
                },
                t.generateRSAKey = function (t, e) {
                    Math.seedrandom(en.hex(t));
                    var n = new ve;
                    return n.generate(e, "10001"),
                    n
                },
                t.publicKeyString = function (t) {
                    return pubkey = t.n.toString(16)
                },
                t.publicKeyID = function (t) {
                    return rn(t)
                },
                t.publicKeyFromString = function (t) {
                    var t = t.split("|")[0],
                        e = new ve;
                    return e.setPublic(t, "10001"),
                    e
                },
                t.encrypt = function (e, n, i) {
                    var r = "";
                    try {
                        var o = t.publicKeyFromString(n);
                        r += o.encrypt(e) + "?"
                    } catch (t) {
                        return {
                            status: "Invalid public key"
                        }
                    }
                    return {
                        status: "success",
                        cipher: r
                    }
                },
                t.decrypt = function (t, e) {
                    var n = t.split("?"),
                        i = e.decrypt(n[0]);
                    return {
                            status: "success",
                            plaintext: i,
                            signature: "unsigned"
                        }
                },
                t
            }();
        t.exports = un
    }])
});