From e2f72ddea65fd117f2ca38a77f75094b547d567e Mon Sep 17 00:00:00 2001 From: "windhamwong@nva-hk.com" Date: Thu, 23 Mar 2017 13:13:49 +0000 Subject: [PATCH 01/20] Adding nTcpdump as new operations --- package.json | 3 + src/js/config/Categories.js | 1 + src/js/config/OperationConfig.js | 9 ++ src/js/operations/nTcpdump.js | 200 +++++++++++++++++++++++++++++++ 4 files changed, 213 insertions(+) create mode 100644 src/js/operations/nTcpdump.js diff --git a/package.json b/package.json index 8878ff97..14eb315e 100644 --- a/package.json +++ b/package.json @@ -42,5 +42,8 @@ "grunt-jsdoc": "^2.1.0", "ink-docstrap": "^1.1.4", "phantomjs-prebuilt": "^2.1.14" + }, + "dependencies": { + "grunt-cli": "^1.2.0" } } diff --git a/src/js/config/Categories.js b/src/js/config/Categories.js index 3a84b0ef..c92cc4c3 100755 --- a/src/js/config/Categories.js +++ b/src/js/config/Categories.js @@ -27,6 +27,7 @@ var Categories = [ ops: [ "To Hexdump", "From Hexdump", + "From nTcpdump", "To Hex", "From Hex", "To Charcode", diff --git a/src/js/config/OperationConfig.js b/src/js/config/OperationConfig.js index e8e3a881..b6d56c6e 100755 --- a/src/js/config/OperationConfig.js +++ b/src/js/config/OperationConfig.js @@ -517,6 +517,15 @@ var OperationConfig = { } ] }, + "From nTcpdump": { + description: "For Tcpdump conversion only. (nva-hk)", + run: nTcpdump.runFrom, + highlight: nTcpdump.highlightFrom, + highlightReverse: nTcpdump.highlightTo, + inputType: "string", + outputType: "byteArray", + args: [] + }, "From Hexdump": { description: "Attempts to convert a hexdump back into raw data. This operation supports many different hexdump variations, but probably not all. Make sure you verify that the data it gives you is correct before continuing analysis.", run: Hexdump.runFrom, diff --git a/src/js/operations/nTcpdump.js b/src/js/operations/nTcpdump.js new file mode 100644 index 00000000..ec250505 --- /dev/null +++ b/src/js/operations/nTcpdump.js @@ -0,0 +1,200 @@ +/* globals app */ + +/** + * Hexdump operations. + * + * @author n1474335 [n1474335@gmail.com] + * @copyright Crown Copyright 2016 + * @license Apache-2.0 + * + * @namespace + */ +var nTcpdump = { + + /** + * @constant + * @default + */ + WIDTH: 16, + /** + * @constant + * @default + */ + UPPER_CASE: false, + /** + * @constant + * @default + */ + INCLUDE_FINAL_LENGTH: false, + + /** + * To Hexdump operation. + * + * @param {byteArray} input + * @param {Object[]} args + * @returns {string} + */ + runTo: function(input, args) { + var length = args[0] || nTcpdump.WIDTH; + var upperCase = args[1]; + var includeFinalLength = args[2]; + + var output = "", padding = 2; + for (var i = 0; i < input.length; i += length) { + var buff = input.slice(i, i+length); + var hexa = ""; + for (var j = 0; j < buff.length; j++) { + hexa += Utils.hex(buff[j], padding) + " "; + } + + var lineNo = Utils.hex(i, 8); + + if (upperCase) { + hexa = hexa.toUpperCase(); + lineNo = lineNo.toUpperCase(); + } + + output += lineNo + " " + + Utils.padRight(hexa, (length*(padding+1))) + + " |" + Utils.padRight(Utils.printable(Utils.byteArrayToChars(buff)), buff.length) + "|\n"; + + if (includeFinalLength && i+buff.length === input.length) { + output += Utils.hex(i+buff.length, 8) + "\n"; + } + } + + return output.slice(0, -1); + }, + + + /** + * From Hexdump operation. + * + * @param {string} input + * @param {Object[]} args + * @returns {byteArray} + */ + runFrom: function(input, args) { + var output = [], + regex = /^\s*(?:0x[\dA-F]{4}:?)?\s*((?:[\dA-F]{4}\s?){1,8})/igm, + regex_header = /^\s*(?:0x0000:){1}\s*((?:[\dA-F]{4}\s?){6})/igm, + block, line; + + while ((block = regex.exec(input))) { + // block[1].replace(regex_header, "0x0000:"); + line = Utils.fromHex(block[1].replace(/-/g, " ")); + for (var i = 0; i < line.length; i++) { + output.push(line[i]); + } + } + // Is this a CyberChef hexdump or is it from a different tool? + var width = input.indexOf("\n"); + var w = (width - 13) / 4; + // w should be the specified width of the hexdump and therefore a round number + if (Math.floor(w) !== w || input.indexOf("\r") !== -1 || output.indexOf(13) !== -1) { + app.options.attemptHighlight = false; + } + return output; + }, + + + /** + * Highlight to hexdump + * + * @param {Object[]} pos + * @param {number} pos[].start + * @param {number} pos[].end + * @param {Object[]} args + * @returns {Object[]} pos + */ + highlightTo: function(pos, args) { + // Calculate overall selection + var w = args[0] || 16, + width = 14 + (w*4), + line = Math.floor(pos[0].start / w), + offset = pos[0].start % w, + start = 0, + end = 0; + + pos[0].start = line*width + 10 + offset*3; + + line = Math.floor(pos[0].end / w); + offset = pos[0].end % w; + if (offset === 0) { + line--; + offset = w; + } + pos[0].end = line*width + 10 + offset*3 - 1; + + // Set up multiple selections for bytes + var startLineNum = Math.floor(pos[0].start / width); + var endLineNum = Math.floor(pos[0].end / width); + + if (startLineNum === endLineNum) { + pos.push(pos[0]); + } else { + start = pos[0].start; + end = (startLineNum+1) * width - w - 5; + pos.push({ start: start, end: end }); + while (end < pos[0].end) { + startLineNum++; + start = startLineNum * width + 10; + end = (startLineNum+1) * width - w - 5; + if (end > pos[0].end) end = pos[0].end; + pos.push({ start: start, end: end }); + } + } + + // Set up multiple selections for ASCII + var len = pos.length, lineNum = 0; + start = 0; + end = 0; + for (var i = 1; i < len; i++) { + lineNum = Math.floor(pos[i].start / width); + start = (((pos[i].start - (lineNum * width)) - 10) / 3) + (width - w -2) + (lineNum * width); + end = (((pos[i].end + 1 - (lineNum * width)) - 10) / 3) + (width - w -2) + (lineNum * width); + pos.push({ start: start, end: end }); + } + return pos; + }, + + + /** + * Highlight from hexdump + * + * @param {Object[]} pos + * @param {number} pos[].start + * @param {number} pos[].end + * @param {Object[]} args + * @returns {Object[]} pos + */ + highlightFrom: function(pos, args) { + var w = args[0] || 16; + var width = 14 + (w*4); + + var line = Math.floor(pos[0].start / width); + var offset = pos[0].start % width; + + if (offset < 10) { // In line number section + pos[0].start = line*w; + } else if (offset > 10+(w*3)) { // In ASCII section + pos[0].start = (line+1)*w; + } else { // In byte section + pos[0].start = line*w + Math.floor((offset-10)/3); + } + + line = Math.floor(pos[0].end / width); + offset = pos[0].end % width; + + if (offset < 10) { // In line number section + pos[0].end = line*w; + } else if (offset > 10+(w*3)) { // In ASCII section + pos[0].end = (line+1)*w; + } else { // In byte section + pos[0].end = line*w + Math.ceil((offset-10)/3); + } + + return pos; + }, + +}; From f1449ac8698bd7f4f78ddb22f3798a368040db8a Mon Sep 17 00:00:00 2001 From: "windhamwong@nva-hk.com" Date: Thu, 23 Mar 2017 13:23:53 +0000 Subject: [PATCH 02/20] Cleaned build folder Update Readme --- .gitignore | 3 +- README.md | 17 + build/prod/.htaccess | 50 --- build/prod/cyberchef.htm | 383 ------------------ build/prod/images/breakpoint-16x16.png | Bin 295 -> 0 bytes build/prod/images/bug-16x16.png | Bin 773 -> 0 bytes build/prod/images/clean-16x16.png | Bin 702 -> 0 bytes build/prod/images/code-16x16.png | Bin 796 -> 0 bytes build/prod/images/cook_female-32x32.png | Bin 1748 -> 0 bytes build/prod/images/cook_male-32x32.png | Bin 1639 -> 0 bytes build/prod/images/cyberchef-128x128.png | Bin 7543 -> 0 bytes build/prod/images/cyberchef-16x16.png | Bin 419 -> 0 bytes build/prod/images/cyberchef-256x256.png | Bin 17380 -> 0 bytes build/prod/images/cyberchef-32x32.png | Bin 1400 -> 0 bytes build/prod/images/cyberchef-512x512.png | Bin 39069 -> 0 bytes build/prod/images/cyberchef-64x64.png | Bin 3393 -> 0 bytes .../prod/images/disable_deselected-16x16.png | Bin 746 -> 0 bytes build/prod/images/disable_selected-16x16.png | Bin 590 -> 0 bytes build/prod/images/download-24x24.png | Bin 905 -> 0 bytes build/prod/images/erase-16x16.png | Bin 680 -> 0 bytes build/prod/images/favicon.ico | Bin 1082 -> 0 bytes build/prod/images/favourite-16x16.png | Bin 491 -> 0 bytes build/prod/images/favourite-24x24.png | Bin 1229 -> 0 bytes build/prod/images/fork_me.png | Bin 7660 -> 0 bytes build/prod/images/help-16x16.png | Bin 843 -> 0 bytes build/prod/images/help-22x22.png | Bin 1294 -> 0 bytes build/prod/images/info-16x16.png | Bin 513 -> 0 bytes build/prod/images/layout-16x16.png | Bin 334 -> 0 bytes build/prod/images/mail-16x16.png | Bin 463 -> 0 bytes build/prod/images/maximise-16x16.png | Bin 235 -> 0 bytes build/prod/images/open_yellow-16x16.png | Bin 474 -> 0 bytes build/prod/images/open_yellow-24x24.png | Bin 719 -> 0 bytes build/prod/images/recycle-16x16.png | Bin 585 -> 0 bytes build/prod/images/remove-16x16.png | Bin 507 -> 0 bytes build/prod/images/restore-16x16.png | Bin 245 -> 0 bytes build/prod/images/save-16x16.png | Bin 472 -> 0 bytes build/prod/images/save-22x22.png | Bin 695 -> 0 bytes build/prod/images/save_as-16x16.png | Bin 642 -> 0 bytes build/prod/images/settings-22x22.png | Bin 1050 -> 0 bytes build/prod/images/speech-16x16.png | Bin 360 -> 0 bytes build/prod/images/stats-16x16.png | Bin 3264 -> 0 bytes build/prod/images/step-16x16.png | Bin 575 -> 0 bytes build/prod/images/switch-16x16.png | Bin 472 -> 0 bytes build/prod/images/thumb_down-16x16.png | Bin 769 -> 0 bytes build/prod/images/thumb_up-16x16.png | Bin 717 -> 0 bytes build/prod/images/undo-16x16.png | Bin 553 -> 0 bytes build/prod/index.html | 21 - build/prod/scripts.js | 292 ------------- build/prod/styles.css | 68 ---- 49 files changed, 18 insertions(+), 816 deletions(-) delete mode 100755 build/prod/.htaccess delete mode 100755 build/prod/cyberchef.htm delete mode 100755 build/prod/images/breakpoint-16x16.png delete mode 100755 build/prod/images/bug-16x16.png delete mode 100755 build/prod/images/clean-16x16.png delete mode 100755 build/prod/images/code-16x16.png delete mode 100755 build/prod/images/cook_female-32x32.png delete mode 100755 build/prod/images/cook_male-32x32.png delete mode 100755 build/prod/images/cyberchef-128x128.png delete mode 100755 build/prod/images/cyberchef-16x16.png delete mode 100755 build/prod/images/cyberchef-256x256.png delete mode 100755 build/prod/images/cyberchef-32x32.png delete mode 100755 build/prod/images/cyberchef-512x512.png delete mode 100755 build/prod/images/cyberchef-64x64.png delete mode 100755 build/prod/images/disable_deselected-16x16.png delete mode 100755 build/prod/images/disable_selected-16x16.png delete mode 100755 build/prod/images/download-24x24.png delete mode 100755 build/prod/images/erase-16x16.png delete mode 100755 build/prod/images/favicon.ico delete mode 100755 build/prod/images/favourite-16x16.png delete mode 100755 build/prod/images/favourite-24x24.png delete mode 100755 build/prod/images/fork_me.png delete mode 100755 build/prod/images/help-16x16.png delete mode 100755 build/prod/images/help-22x22.png delete mode 100755 build/prod/images/info-16x16.png delete mode 100755 build/prod/images/layout-16x16.png delete mode 100755 build/prod/images/mail-16x16.png delete mode 100755 build/prod/images/maximise-16x16.png delete mode 100755 build/prod/images/open_yellow-16x16.png delete mode 100755 build/prod/images/open_yellow-24x24.png delete mode 100755 build/prod/images/recycle-16x16.png delete mode 100755 build/prod/images/remove-16x16.png delete mode 100755 build/prod/images/restore-16x16.png delete mode 100755 build/prod/images/save-16x16.png delete mode 100755 build/prod/images/save-22x22.png delete mode 100755 build/prod/images/save_as-16x16.png delete mode 100755 build/prod/images/settings-22x22.png delete mode 100755 build/prod/images/speech-16x16.png delete mode 100755 build/prod/images/stats-16x16.png delete mode 100755 build/prod/images/step-16x16.png delete mode 100755 build/prod/images/switch-16x16.png delete mode 100755 build/prod/images/thumb_down-16x16.png delete mode 100755 build/prod/images/thumb_up-16x16.png delete mode 100755 build/prod/images/undo-16x16.png delete mode 100755 build/prod/index.html delete mode 100755 build/prod/scripts.js delete mode 100755 build/prod/styles.css diff --git a/.gitignore b/.gitignore index 5019a4eb..5697a2cc 100755 --- a/.gitignore +++ b/.gitignore @@ -1,7 +1,6 @@ node_modules npm-debug.log -build/dev -build/test +build/* docs/* !docs/*.conf.json !docs/*.ico diff --git a/README.md b/README.md index 83ae12b5..a484bb01 100755 --- a/README.md +++ b/README.md @@ -1,5 +1,22 @@ # CyberChef +This is a fork of original CyberChef by GCHQ. This project has implemented my own operations for the daily SoC tasks. Please feel free to clone/test/share/contribute it. + +## Features + +- opeartion **nTcpdump**: tcpdump hexdump convert + +## Todo + +- operation GZip HTTP data +- operation char() data +- operation SQL comment strip function + + +--- + +## Original project info + ####*The Cyber Swiss Army Knife* CyberChef is a simple, intuitive web app for carrying out all manner of "cyber" operations within a web browser. These operations include creating hexdumps, simple encoding like XOR or Base64, more complex encryption like AES, DES and Blowfish, data compression and decompression, calculating hashes and checksums, IPv6 and X.509 parsing, and much more. diff --git a/build/prod/.htaccess b/build/prod/.htaccess deleted file mode 100755 index 80626724..00000000 --- a/build/prod/.htaccess +++ /dev/null @@ -1,50 +0,0 @@ -# Serve up .htm files as binary files rather than text/html. -# This allows cyberchef.htm to be downloaded rather than opened in the browser. -AddType application/octet-stream .htm - -# Fix Apache bug #45023 where "-gzip" is appended to all ETags, preventing 304 responses - - RequestHeader edit "If-None-Match" "^\"(.*)-gzip\"$" "\"$1\"" - Header edit "ETag" "^\"(.*[^g][^z][^i][^p])\"$" "\"$1-gzip\"" - - -# Set gzip compression on all resources that support it - - SetOutputFilter DEFLATE - - -# Set Expires headers on various resources - - ExpiresActive On - - # 10 minutes - ExpiresDefault "access plus 600 seconds" - - # 30 days - ExpiresByType image/x-icon "access plus 2592000 seconds" - ExpiresByType image/jpeg "access plus 2592000 seconds" - ExpiresByType image/png "access plus 2592000 seconds" - ExpiresByType image/gif "access plus 2592000 seconds" - - # 7 days - ExpiresByType text/css "access plus 604800 seconds" - ExpiresByType text/javascript "access plus 604800 seconds" - ExpiresByType application/javascript "access plus 604800 seconds" - ExpiresByType text/html "access plus 604800 seconds" - - -# Set Cache-Control headers on various resources - - - Header set Cache-Control "max-age=2592000, public" - - - Header set Cache-Control "max-age=600, public" - - - Header set Cache-Control "max-age=600, private, must-revalidate" - - - Header set Cache-Control "max-age=600, private, must-revalidate" - - diff --git a/build/prod/cyberchef.htm b/build/prod/cyberchef.htm deleted file mode 100755 index 3e3a2662..00000000 --- a/build/prod/cyberchef.htm +++ /dev/null @@ -1,383 +0,0 @@ - -CyberChef Edit
Operations
    Recipe
      Input
      Output
      \ No newline at end of file diff --git a/build/prod/images/breakpoint-16x16.png b/build/prod/images/breakpoint-16x16.png deleted file mode 100755 index 336df401877efb14926e127192c45d26f993bd04..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 295 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbK}Y=BRQ>xm%m&w+uTeSAL8pZDkK z)7QDVJJ{GhM@D|GuKpYv`Z+oIQ&;ED%a=dr=6;Ti4KbGZGJX2jO`B%Bnj~1uoaE#C z`|8#22M_KmEB`!qu3KOBrK#x+Y3Yq+u90Sv|NsAg!=W1ow1}}J$S;_|;n|He5GTpo z-G!lpRn`N@;VkfoEM{Qf76xHPhFNnYfP!J3E{-7*m*<|}E!3dE;}YoeMD)l(NfGw{ z|Ls|OSXp_u-@d$7AULt$ScTGT$wQTEZ}+|sYPR39jk}>ng5&f$0m*LxW&EXO47w}b l66XH-rMO%oH2d8R?u(C^9rk;ETm!U$!PC{xWt~$(69CFsaa;fZ diff --git a/build/prod/images/bug-16x16.png b/build/prod/images/bug-16x16.png deleted file mode 100755 index 8098d345ec3ceb6b1d5688a8bf4ecbbc5a9764b4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 773 zcmV+g1N!`lP){H@HBaN0~xpoTshI_04+Pkdo--_b)P9-?>u3&LYM)&@l5(P7Jkb3gV6N)2+rH}x%* zqYj5G4)mO6(_0SW=@1l6B)JIE8iHx3)>Vt9Ys0s%jBOJH;nndAoq_cX?s@mt1oyvp z6jfVdDHS58XQ|rkqS3nvce4zDBuU7287q_fgMqd{Ue6-}4FhL)e(K%j-L2>`meaE+ zS`t-H5MKO)?uIV>2R(EgwzIvvKy`xz@F=foSc3>m#%43Wx?OcFCPHM?Rcn&WM8+7O ze@U(T1CIEIIeqK`XHK5y^Pvy%?XA6j|EIZkbWKMDJQY<1GrJZilY32CO))h$!PMdm z&D;A3uRJ0c9c3ju$r@>i3DFeX7!`m@Q82q+HmPAQ!?`o!4ERbADqADu>?gOa# zB}AcsBnnue5soc0`A_%`aB9OP`VNVIH??^>a;io)qvGrA;dL%X5fhtDLI6}%BRIZ* zVHmx@(+!7YrFrXBG!YL4`Z`lldpWBQ46D{vC%wch8;%Cx)BIG59uuYe99Y3O2j zHRkYT<8tH9J?Yv1Xk$6`z6A4sxhjBVpx@HZDTjXnk#IEjS7tm;00000NkvXXu0mjf DJVR|K diff --git a/build/prod/images/clean-16x16.png b/build/prod/images/clean-16x16.png deleted file mode 100755 index b61e56684f6d6ba7d5bcaedd9428ddf4bee6a0ac..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 702 zcmV;v0zv(WP)Hq&hmbT%`53CRQttc-++ipUR1U|*v?2<3+gBnrX$5R`o|@GS_0Ugk6i zq8F(s#A+0wAYzhh(k7ZZrj~~3^4`1c?%aQefnXwtKX?uoF3<14dDzwCIA}J(O$3WD zP*vYW-Pi!!#PM`zo^{8b?Y12G-FdB?m2F5MlagxT$V^K@alX|mC9Mq?8Fw|ZI+=`h z1qPwcH=!xIAY?fqdIa+VJ|2u+2eHP{spiZ z>p?_`)K}r=!`m>vc#hKCk6L+8{BEsq<4*BzRTN6|LeJAPn z=y~d^-bc@}?ezWCS(+WaLIa*-+M_!b)!oe8Qk1Se2ZkF*mEohR0+P^9l~P zmm%4~0cHVA>Codg4EsE~cj%J<>Cc6L3&7`uKmsXAPP&J$sd*VYDxO?6aXur9TLJM) zW(r0;jEIqsNX&sy$V=m6UggjHl$H=IIP}u?Qm3C1~m*RCNJF1a7t?I57|hqmTay z&ehO#M++Yd2EXk}vsn>Sy@=~kM58JUBMu3y>E%#0j(~qCDgj0!rlSyw z5`m_L6J>68!0tSSuwtd2&o9D4#81czLs)BDcQbl>-~Nx4#ye@fr@~?|L5G?g265OF*zC3-*r9EMgoJKhJj*v^T=``vBFx&S+_BU kK^X$@S{84~;y70E56gaX{LstoCIA2c07*qoM6N<$g8hI&<^TWy diff --git a/build/prod/images/code-16x16.png b/build/prod/images/code-16x16.png deleted file mode 100755 index a9b8870ef9c8f4adef876087d4d9786e4e8084f2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 796 zcmV+%1LOROP)_UT8L8uE!#YG{dg3!>^O@)>s zMOUue7$F<~WQ0oM@M6WK}0$MCTa)90F=vRip2t@()X{P zIWztZZKeJ-2!YmE%EL`*B-D7Ghr<@q^6<7iR-dfW+uO^D6UV=vo}NBTTUH!^5+RcT zHEyA71%UaafqK6i*Hkpy7krmBM0BM!Y~9#=G|z5h|pyV&bb0}NbgjcJ0m#erbLykJFrK=1M4srDK zC@o*=mZOF`9f(MWoo<9W+e0oRfTG{6@x{nBUfAD{SNVy-u2s@+zHH{dyb)PJ5Re!< zsHB7D$2GEci)L+^N4Gy?@4iC>)dj-MH5|8_;ll@d)am1Q+at*TqCVKeFF#JRci@ZEz-9s!r zu9Hfc7Z079tt0`Ew2qrLbWav2Ozt8-*++ddVDP{&nc?$1abCm8^ikf};QH*}JT(I( zJ3wIP4nq{hT&dFxBEnWkp!VQvkF1;K4#!A0{vdzkLsqW5Lq}6nQzGIE@A{HGtA+7E z8fy>byKiUZm6IoBVPR3`Z~ZKbzuu9>g(Z3Pup%QPBhubey8|5La}ALJ0vgRC_wL{4 zql=g5@7s-e)*wa*V|tz`;`=_^vSKkYF+scwwARUE5cp{AbMxknNIX+$8lW8_Im&B-k+JdoS9uIn^ojZ za3qfO?aXL?&UfbQIdiTSh9Ul+Vm1ymO}lM)=FFKf+qQpX==wpLjMt{M=5+uW5!PGA z`9%O%7-O$bOicU+fIyQp8g1gvqR-6CJl&bizWQKK53E=Wkw_H2A0P;PYHJXrFdB_2 zSoOAAb@m7@_7sbS$+KtAP9HgPB!1z-1-I1=G$WQwCSM&N9hH3Hx;{Ko$T=f$2q9{a zmJ=Gs?df(D3LB^k78e&20Pc;z;lqb_$b)rVCyN86fX0okBItw=zURTIl&STJsDo0e z4A1kHE?v6x+SJt4uayfn5&aGm+R2kAD-FsN5yLQ4>-!$o)>g5+yo801KE#b1*HI~z z5Rb?3=|^{A`}Xaao}Qi}c@e->f;#J7To6hqWn{fZZ9cz&k5`sa$mbD>MqnqB=*V=! zjF?E+HsY}u5s1SkNLTFKxw8adf#49tJrYo0=g*&i0l-h7X{NmW-Me?AzyDF?=Srml z$8o?oBZ3BWL!x$+VVY=bOZx!aO_aAJP(6C|=rn*g2&uRJ_U<1)_~;r0pI6tTNocij z;#@#*u3TkC41x(G8bf^<{#ODnVTrI#NIx^N@7v!ykp3-1NZ}Ym2ouGUhlRzD@rB36 zF+9EtOG~SG<)zork?O#QHy3!#m90g`okb9wI)UZUhdMsTLkqh`MiFc4gq`Wa<6qg2 zU%vcv9GpA=yR8E~5BFej-(DD&jsBhoz6n6z3V}xG*_82&<7gQD;uyaF+z;{ev){$Q z-~c!ia4If5*MsXaba!{c3mhb^=pg{s{UD%yYdAA%7>GGl9domDK*d41?5IDXONu>D zW<>@+@KLQ)kcu0C7RH|(=^B;$w@M(Av9<32Ap+mPn{T{@Pzafv>S28N4}X#Ir~JTrh~h zLnu7Vy+4PQq6_AeBF>Z>-udSo@@si;?twEOJn#V_jJwGNW{Y{@1#HRGv|b+p00Ws^ zHw@jtf96-=RV$PWZlYK&Aq;7S>nH+1h;o&^Cp%kpf&a?6(z7>Li|5KN{{V&s!K%=; z5V?*NOkIO*88B#EF03KcBe2ptoVE4RzkdIZ>d)l_ppqx z^RN8^Iy7{3bsd9~X3N1uye&_3=oj7sg zp@D%trw0b;6{^eCzyA*T#do0_7NF_3)~lk#gJpN3@39{%LQ-TUG&?){C8{spZgdCf z+`Jw*e*Adf$jHcLsl4jCD3Eo5qwE6$z(!R$CYvg#bOa=)WX_&9-bd4=!TB6oTI2=j3Jxtl!_@|WI={~7C@vG0h7LN zasX73VbFn@j&}9#7fVI?!O@sA6a;`mv7qMa^&%;all3W>W&|u?kYZU@OzLZuh&oT5 zIyKYY-u`)|03@=lb#UvqDXPQfu8M%hZ$=r;<^B8jKL}uDvu{K1(4j*=0MM!C?w^E& qJi%|}f+}G_vQ#$SU-9qsmGobHa%wYBMX_7}0000Z+K4^dHK$b!M(DxjpK7C%jj>$*0(-gWJ)z24vZ`!ks{GS|^&R{^@8 z^l4`9opa7N=jdLYkr-njNRotd96NR_+SS!{LYC!j0PU;$D()pes}tCca|^(jEuYziA07wIy%5d1cE_WrU}!uI89i#E!MK4Am9%m5KuS+kR=~~ zu0LZK#xsRN;l<0BFP}Jc=uqh9&6|3~K&XshC=?p*>FGh+rcDU);I?Ifp9qfQz;#_X zoHQ~b6LUeIPv(Lf!0qAl`$0%1ll7>G>KO=;GddBSl;&QFy)vv(Q%lI37Ia;QZs>fi zqEN_BO;7)Kd|+T;7=Zhr0(?IVCd)EEnU92sEaY-o6mmHp%n<8vI4sK4+S-DamR3wn z{TqAs?0FSHnlr;$dQbr(sAXAVqXVgI)Pms4G(5~z#Z%-k; zoWX|2TJX;MZ{c?b_F-%1W<0t5as1|`=a4NrfP{z0Ky|Qe-uy>6;_u#nf>H@au7F~p1Xb1Pv-Ez^ zhHi?mOL_Y&0J~NK^y_oxSwnSEj3?llHVhGze$5uwM6?AG|0X~CHXHNOUqb=p zFf)DYPImsg9MYL0nB$7T%yqG}QpCi+5|CVd8bF@Ytf_#Zp%25KoEdrjw}1Led$>-< za!$kTsYTqlvxw{8q%bwR1lu(6>)*fo{HG(aH$E5|iqu5F(W6HjW3kvLot@kBPj_|> z?EK{}NX$iZQv{E!kDz&781+FvLLmiyAMnJ_w#wVLKlS#G&K-HOBYXT57-NEE@SQt% z?!7BluCRDK&hBAy>^*jCqo<7LNKRUq1hF@W0$6sa>BS*Zw32sOB zf4x7tPJhAQ%RHt*zZlb4gW&0P+uD zoYSf(puWDoyRoqmT1ln;pIR$HMm;}csD_<8cVexSL>b9sik?w}Dtbrmm%8U}ic?KM zfL|uMo0^(1zpzLb58>@XEQa2`KJRW&2{W^IL0}{Rl4#*CT^uDl;isUgc;c~k67ciY zuR*Jr0e%tLpeTyCScsELl5ol>xF?`GqT4o=N_+qSh!o^yG%+pe{}qaZIrd1H4q+OI3sONF ziYdNOiwMj)o|C-33jkob|G$F#rh|qt7oWMx>bYt;TDf|dey{{QJUlpU9NxQ_n>tx? zI(~SUc_>B+0Mw@nGE&-}SqFw*o@9L~4{jHWC7g0QNK^tagj|=1IgrH*?8O`X-blf< z8uM-7r}MB#G=nke0%YCuX(C73EFZa>2lqwWgpqKKcH#v37$@^id=UBt zZfMyyBNnA%_#{9GPyj#ER(5}XAO(JT9|Ix3qfO$IOsh!|yPjCUW8f9A7lQYgl+JtS zGoFo&jc`aj;kUW{V)$S`+Bd>-ZoZ|ZMak#lP`tx&rGpY60Zakv`GN5SXpJT_xn_8- zb9A>nP_!`u>=($zC>k|7ED54dPC8POllgK?DISlZyRWakU+WsDGArQY1b-SF8uGAT zYB?Lh!X?%QL6NK>fIj1RJWB-VK$F>Bgk(aMGJnFQET~%!z&VL%jHBRT^g{m`dGu#{ zJ7COC;CU~3lw85rvF&eX+Rqr6-x?X+pMM*ZXx;j^)}srmjxT{S0aUd=<}n3=DC|86nh;ciSQdsM^l$>B>7 znG^N)&1RBXj#0hsG%@hC*R1AXx!otTXN^K_vaZ?OOCb@`xf0+znk5_!@JXf8It$Zq z-}zyQuX<A0&+#I$Z=|}hS7Pcy4OToUcRo65Mc5{EUzx=mm%*Dob zvOizHw;1(=y;wO{;*KOLpU`lbPj-Slnk9PsYAM(6T%X3Gl;jg+=LB?3QbSWY{H-SY zQ61M@@)jkwSBKi{w|8TIgMxy>>suNVm|k-(HQ4{>uAndwy6pQoFVBP#^({X4^M)=AP=h?floP)uU5x2+4!n>P`8C@M6Ifghk*;kDRi_K_LBGFEw z^z`&sT3TAq&x-fs8KfP;ZwXz)b%===` z>}IP?uV!n^j~eIf(hUTtBW1qF#Kh>lTmVoe+O@{|5Ynv8H$|U}u0LU{ zM5je&NgRqSq7tyvt9d_DNecMy$Oqjg0)qxiIP|7_zbm4xMzflKn$;AZPTpCAGe=S- zTzAH&GBPsY7WuD|SXBn~Fwn+{>vQ>}IqJ|DXVC6__CShEJz8qL0HXj`MyUXKfbyhm zr+;ir&1bjhlYdG|Ni2#b(8R=GFSP(%AXZ)I55R4)cLT7W3Z~|20-figeORT})j87)zu5Zx&W0 zw%uDF(|2;I+{mkeDS+9Zadf%O?g#Uq>;(P`i?x3QXMX;C?Dp;`;K8q7tEgDhfC~)Y z^SOxT>bO+;G?Y@V)rv*V&(Hs6$L>y>#v6vvKb$l6J?_2oX7|M+!Q2SfseIc^aKLIY zLM9~+MPPA1q7vXJ`toI`M5InIk0esYHrM-aY3^r3(3IWyt>GEE){PfIZ+7reM>Ppa@V{C;pMoD4&Ja@$te%jdv|AE$Q?terppg{CzAG z8!f=ccWSGo>!_`(OXp~9Ewqci;>38mw~Ls~XG0G&VK`!~jd#PE*1<7&+?A7&A#yua zs?|#-+Z*%n86Neev~>4qVdn{yA;C%L?fRK_BbQ;zsc@a+({gZy8(_QG`XA3tlMd<4z__3K!SqdhuZQxY?C{{ykRKJ6a=h@bXEiV^wpdZ`uGc6MUWIZ`-6meiW&DZP|{AXPXSEj|gb6=7RW7HwTic zii(OxMb_kl1lU-vV`aftihUb56}ldH=}hQHrncoRrVE5*2pd)#?@GStZ$ zviJ+TMasrzH)o?S&KROjkOx9Ap~&l!q^3u4Pto|~03U6As%bI&0-)CiWsu$7B*%hvfC7L`YC#3U z^}3@fhO=>^cm3YLkRjH5l>4P`>0xl=Z&o8r)6>%u{hFFuEZnrUA)pznJz8xjPVn?o zE~CY>LH4S)M_twach_eM3JT_}Y*fVI?*$zeFN2ews~Lr<)&w3SQBruw2z71kI%Qah zZ9mN*hjE8*Z|ckca;SOCe(;-~d{*BX!nhCrfQ!SWTxo#^IUcAPmZPl`^$Z*u^r+Tw z1vjswxVZSk@p^Ch!+B$;I13a^00biP>@cG~+}__D<$}gPx=&OIgB%n9qV8HdA_F(7 z{szCiH{1Fc`rpGy578zJ5F9bAvo_+gJvxmfz8<%jED>E~M1`5?H-HZIE@y9lLV!*T zt#;*z`;1Dl%90(J8n?Xo-U!WOfJbSHylRk6Nr{8%v%w<^Q`MhYyR4T`IBvL7E1fqX9u-2a;9RzL(&|%_dn?CiSrlN^he- z4^hqluY8mn`y3nrc#2aay?y@9=wgsE=FE>g$%D;)e*Eu0$M&;t7;)e~vvI6E zQN|+$yCitZX{{La=g%KQ%-V1j&LIZifRjAI|oAovrWZPnLCAT)^N}wB*Ar`T`@$ESZ^^t$)M%oRw|M8k);1bl#6{ z#7RmxZ~Tn8`5f$X5yNPdrXVGuF1$6E!v1{33JrTn#S|i6Utgag>0@ZPlyimN4!}h` zb`=2?Rz*D3D3^hzvnc#x65uX#qXH06jr<%wqN8iJ2wX6H8$X?aE;g?(`j;hhL!z*Q zDBX@R4gLA0C;O%rub8O-vpQMt*`;NfW43%?VltQ01ia5Vt2i5}k^BQK7MQgYC`BC= zkoS-_=bn+)8x%sPJZ6-bVPY)6AG5WoR_w-X!Pb_* z)+-G%jkj+WHO+@f&(?-&ff`ln%xIb@V=S=_7}S{D2(ze`$Y?=lVL~YBPRLa zQAlP|Vb?#y>Ae^Oxs~zfgHLn7^Qy21_qFjCEBz|oD!gf$teY`m112bD5T6PtvBirW zEcYmJ5wF^S13=01;kPa=pEolr^pA}6h7vs0X37S$tc3QOrTg{Kc-)pYG@KjtGpsm+ z+EWl%z{0HSLUpsS!Wc;YS%NqrYw)mi6xccntWxg7vZWl{YlqXrZ9;*=r=rEDBHc_8 zCS_*En3$BbAXjOi%V8(5ApYvz=#+C#S+DcW+5HFJMo{lQ0p@UX;S_t3>;sRndu%%$`!4V3L85 zQ#^vz>N#%?rAa>CSFd=ihAC8z2CVsFhsVa~ifx$uP(~2-KmI;&$Az%HK z2%!8vl9yxv(nqr*Ge1tqt$gH)pEMA1ywS(R&aU)W0Rc4?j%622S9bUjX^*ICj=(XY z&RtVhtA17js;zxW)R0%$jMoMav&HLzBGxLcqRDGJ9VBPr?D zO)(Xc2c!}4Wszf%R>s#f5}GnwAa?`V|;6=sjvlYB^1?Rw1hncQ%2siutreFWmjL z5_>#f>(T{*KN1p^%mLkhq?pY)vQp)SH_B}N2Xrb}QgJY-`8ylO+<->{lJVVJqh6tc-&(q4ZD~1VoA|$n^_*cmHmZ|NVg%x+6^3 zW-mx$1XsHffL z0@)8!&(w-G*1e@HSJW{qpo5=7g1do&iP>`>4l&xXD9n5wGV|ebF>)K~u7OiiQvph9 zYAXk4-c0dJ1KQ#Yg-msO_jxJcNzuvA*mQRnM5vXbJ~u4 z$rD1#{8l4jHN~bX!@(LR+5)8s6U5M{Pz`A2csf!(_IANh{Ncz-{2bZk0Zv zau{Wb>hRE>%QFo!60cx#zfBli5V6xBB^|zim?#TIPXzL93(KH_O7konO zOA-Mq+$!X7u-(Y^{H!NEj5d>MYdqHQG}DpYL|?@K5ZY z4BMK-5*~iBa^_5=A&|{0^eVmK%;Xbl;@3(Tbxo3L86f0wxVYj`a>WjlO=!o&s%npD zL{23(3llO#6U$V9-jSgW*AMd-goH)ej)I%JtLGXslFqDy&h!aT<)x5j3RZtAwzN~u=KeMM8#CAWpNI)#YL zlTvZ)ap2 zZ;c_WPhp0%=Wy+?9g1Yit}wuDzKISDNm z(dO|oyP`Y((;8%JMYVW8Dpvt0Q3F`r2jik}u3kje513VPJyet}S;x~;zH zV^mH=C4Sn-p9Q%%T5;-HpEeQ^k-uM-VAx&O{M=;~H=XzpDO3@zE;qJBu9}-T0uxpe zjrwnAd-zA2Quyd@S!W20U;wP-@9z)Vv^OPi6`4>W0FM*O_J)pSBA_4J7s-DkAFX;V zL%R5_hSQuefp45q)z=B@;S3SCzyEj8W5Kb^<1$n7&ZOAV8e|c(!th3Rk1BcQAZzWV z_-=LhW)`O7cbm!LyFk-4+7z>l;-!MuasH;uZC($MIbj)eFw-3V&T8t$r6t|KPpeeK6ahuwTNqxrH5+N z-Rr0ukAOf^iY7x&d0>!|5`hQiAjC?5nenDqYE;9c{{EWDlUzk#EpxK7mj@9G<4i9T zz(6vRZ1x;C=QKG5kpexgDSJn+l;xNb7ae9RbgI|5^Qpt>hfXl8F#|&t+oUP8rj1ys z6a)*!mNSGvUXl+%qw+;;u0rB}Vk~zrh_ln3FnIj0JNQ#(1II8GZ$)Pj08kL(a1&xh z&k<@Qu6~p$OioQz-AcALilKk==1u!aH!fWpClo0pDk@rEUG1cysrkzn;|nzKQ$Brq zD4E%7$47+{r%Ki1?H zkYh}WxYF&kx_$9Un~@`)$n#hoRb}1Z*MkqZy#t>~4N8KTw(h^NxUCh%EoI-K2^+Wm zvwacPSX9(KhK3FQ5g?@?411sNCz2SL53lARPeZVH}PFVkxvul`}n~IQ|myjX@ry?Yw-v2qZ`N5vhe9F*) zyAK+Tevhf&ILMX8x}kE@ub2rKR|WTOgkp7dcr-NZwtuV71y?JN zxD&N5ZE(;hre&KuEn?@5*@%#e(JHrG7|9?RJe8CtwDluX=MCZ!0HI3bV-O-FUVueC z`2sIu;h=J8aIkD>bX3mD%BpO{N(py-PracM0lk_OJ!(Tg2aNh55v?v*r*DaSNdv>} zcAx+^ZTY_$y7GSkAd~*uzS^uN5Ex!PdqAPD4v_V~BBYD?euQSA#Ag_+jh7)28{6nG z?HSFi(D}LMB=l8h50+6p2^9KGhkp$1S+fqzf+6*1`V7BYx6kxM)fUKOfj$7tSn06D zgqTj!MzsLt!5;F^pi4x>77>p ztPrHbclVReRkJRk&i)q4oeR6>2l6Tm7{aT_+(V{==P>qC3BfIgb$%}yWW5fyi5cTt?!#b zwOWNk)_kmYN5v`^cXwIBl6C)8l)A0Y@fU%adwBZRES z0r>Ml%Ji8w*^deEd5!cs?{7lAyjBD#3B}*}w-HYi@`*CGwzkBFvo#x6 zORXNc!D8#u@uEfuYC5txl4E56yGBM`^@+3cGeJ)KrHweQEKT)l?ummAhx3})CJit& z2v%8EHs6TJ4NlfejGSp5SeQ-wBh&Aac1s=@BGYRo6BL zevnEHG}y?pGvxT+9v^=zQO%a%5O3$^XR-V`XLq=nK@%eOACgMnu$!s0rmRD3j5CfqQ3@)`?ue>Nq> qvYsMDRC99k+x>qJQq#LNmjN_xN|Bn2AU@1bQb0jgRi+YY67)Zl4>ZRB diff --git a/build/prod/images/cyberchef-16x16.png b/build/prod/images/cyberchef-16x16.png deleted file mode 100755 index b847c10e5c8a5ecdeb76207296fd5b85c621b710..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 419 zcmV;U0bKrxP)ylTp+IyQd?W4OC9nESEQ2T4g;nTQpq+#v~Y_pwh`p8*c6h*^HwyO zYWSJ?_Mc(aGsdtVX_{Iw%QCC?`+aY}*4qb+MkBM?Y-l!{04$eF0FoqeLP~%%P0ep3 zfYzGzdR=-TNsW&8US$| z8|NXt-rbmQT>xrAp1t-?&}>!ip26kWvEB>-8$%`3J86iOv^Qng;*? N002ovPDHLkV1jSlu}S~{ diff --git a/build/prod/images/cyberchef-256x256.png b/build/prod/images/cyberchef-256x256.png deleted file mode 100755 index 61835a10e58ab2884cfae570c1b35f6e3a48e772..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17380 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 diff --git a/build/prod/images/cyberchef-32x32.png b/build/prod/images/cyberchef-32x32.png deleted file mode 100755 index 640e4756b24959db9fb4fd3ef6a9b622ecf3e0c7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1400 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 W_S{W=>!FK)-%&ef+X`#1`2Pbh5?GV~ diff --git a/build/prod/images/cyberchef-64x64.png b/build/prod/images/cyberchef-64x64.png deleted file mode 100755 index 5e5a4110515d6d6987c0e46fc2fa4a3a0bfcd4db..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3393 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 diff --git a/build/prod/images/disable_deselected-16x16.png b/build/prod/images/disable_deselected-16x16.png deleted file mode 100755 index 0dcaf2b3f3c9a647969fb3e1b271cde5b401836a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 746 zcmV{tp@UAALaT#~{uLTKxrr2^Nu)@!bhASd#2=fK4pNFx9FieR z$mRM%nw+`g?rqMYHnbF6{ElDV=flJMzMn`KhWyXO0C;+*w(X`}}dg zRp@^DMD*RaBLk%r#e<wUzY&xC3KQS>usZ>Hri4bDc_x-tEKoA78LI^C& zLesR>*B4X;*QI#wau#@T44bC8VObVJ2!bG(J!vo<67rhgd9z@B7oeXAFV>r4&L4XuA~M^Jm~(vYo{Rkq{`Q2!eo<20P7W6T>iglT3d& z1NU25Ivw65(~E{-&}=sGeShcV9c)S|(RCfuH1D5+Z%<@#T~;sMo76PznXc)WAw)ivN?{lVeSLjIA`t+>Fy!#?kXEZjtyaTz-Av|dp>So-J2Fs8v0`l%+U<6x zTrStE)hbd-JkP`PJfxIVt5wS7a=qPdXI8AOf>Mf}!H>yEuOIo_nSYik^CjOa)746N c6!1Uu2WtCIevrrV+yDRo07*qoM6N<$g44WL82|tP diff --git a/build/prod/images/disable_selected-16x16.png b/build/prod/images/disable_selected-16x16.png deleted file mode 100755 index f47a0b950c66fb03226e95ac29858d11a6744a48..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 590 zcmV-U0Yb8b3#ff+$M&=c>Qb;Fhz@^ zdC^Rd%ZYYG+oGdB`RO|}w%tw#h{xHkb~WvX8Xr%>vS!#vF=rpg$n;n+I04%2HvHY) z)z0wn7ECi*Z8VTir*W{cK`{sWI7WsnJ^cwfL11=)_u+{N{60LyFUQF=&dy$1$z+I< z+%c+EXwfLhkfo!x;`tVBqj6Gxv^(_Up z7Pm!8a+Q4q%H~*)QS?akj{vTykBqPd_V))@Ci2c&TCxWjdam!F)yg$172GonTpk~% z|1mEt*tojl*fJTi^bFp?PR(@@i9~qL#0_&Q#g*YzDwA?QZ^)3PXRr#}7p_}wN~x5T ziDtQZ$C{h7vA2hItF5*u&bbh||AP8X1&H|d2Ksc;Gh_6oi z>tc3`Mfje#$tQi|B|e#&`dqKo)(R&l~<2i`nj2k}ZFc>n+a07*qoM6N<$f;e6xwEzGB diff --git a/build/prod/images/download-24x24.png b/build/prod/images/download-24x24.png deleted file mode 100755 index 058e51b0916d66e132bcf985dedd75247ac44d51..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 905 zcmV;419tq0P)@pb%7`pV@<_8NNQi=h{t2Q3jEXK$>@ctpIv}j9%*Z6^utUfW$&D>a zgNp7V!b+_m38Kq&v&?GU+}6$6b=P^n-i%n$y}SK}nRzfjzMtRmj$!!0CRHZUq+zLG zssyeAoC9i?ctFP0+WUBt`;x&A`^kB{IgXA^Ex^f^4dP=MG;PKhZ0$hJ9sYj+2d8X> z`OOx{EF3CzJGE+nYaYDZVF?Z}^1x6kpSK;RrfvWcgQyhR+6fPD{0Bf%@ery=FT~NN zd>DH&APKEb6_2jC(YU8EI6!>CU@|Q)!eMJZ42b9k2(OP0j>nf2SPxkJ1B@*hPTC+U zqAwf{7i=~Ms@Cj7sU=U8sFx@a^!sC*iu$S!7>s}<3x?V)&~)_GAA$PE(K{0;I%)ul z=dXbIbqQKrPJ}>+a|VsBias!jK@KIj6u?sJhVz9N&BvPln$1^-#0{|&8yk;}X_+`| zDFW}3MQLO`dagZ0)SW&;;{y+zPlfpLzl;CWgV>xQG%O(jtLCQRgr!V`-UAVC2H^QU z1&+sFw3z=*{FhB0m=QyXqmr|hN|LI!Z_!WzrvElLWNENJ6(D1PI7YM#QxEJ#cZKK1J!q212gJx zmAc^d`cPB%(9X&$PEuz2f`Em;x0;sgu)FP;Ja{^y!up{4ZXH-@Svh5AWy0t41uQI! zwes%sTjbTxLS%#;W7IrkO~}Ia8@Isr?mt91E0@9T_5=lJ{`3YjszxC?rWev8wjg)f z8eF)11*~XS3FTyG!Q<)F>!;m;Sg0I|XCI!6W0nvM8!F=a1bjCNNC z?5(ZZ3<@j_5tx<S`FY{Wu6y#h*e-N(xd& zB;n>w(S!BtH`9`(i}gcAmgIm-)MF$rRpl@m4KSI^VC!->WedsDm_ae(7lj8U{;gUJ fpPWu89m?)6+TUpX46hsH00000NkvXXu0mjfldQ5?sAZxk0j_~+0? zFfhzpcnPKsDJx^>${up*Qnxw?K_GaLC0vqV@!}zZU1kX)sOVJe&emQkPf>eW@KzrD za}4~G2X)k$dHvqYk;%0me0h)e-skuC5wKV=7z9a@ARG?E<-!37ct%hH5Rn2%0F>bR zNdx$<0|gCbXJ8-@fLJUBp->1M4hJmRH3O)$@$uCYLI^0SyQbf7?9!geWO(EiAhYWR zKq9TYEcLrxOhtgrlh>v9sXI2F7{FJ-@At!hjKMcI4qudd2vds58wT`xJ-Bu9W=97| zjmbl76n8R$} zZ8rbzDQ}`pScX+q74!MLJe^KK*L85+mKIJrbJ*kYz|n*4r+9iSSmE(_EEWm{88hIp zskO{H{Ax7Nhrwax;iG3b#v{z5Dp(^Ii$xjNe_*C2MmDzM96rwN>|yPPh<)K>G$WVG zWqC9jooi^j-Nxw&;C8!V>+OE_9-&P_$!GK4&LUST6?r%uo`YMh)&fqa(^*Z^PH_%3 z_KSXk3U#W2-2_>xR%2DD)e-zae{+}_NhXsKbRsH>A`b=we%QcxF_xt_Dr6`IV#%+yFV3o0Qe5eafr}Gj< zy*QiAcscXWQfCRFW~k|WWztyHD1$k0qFksoHqp5Zi*(DXFWu2U0t^5U(Njaf diff --git a/build/prod/images/favicon.ico b/build/prod/images/favicon.ico deleted file mode 100755 index fa2deb032ee0845745e495fb77de2fab56e2871a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1082 zcma)5ORG{*6yAc+AmZLTC;}mZBAV2oKTs&*K)KECK$?g-5Ct77+Cv0i;R8h_5fLv0 zJ_b5a2dQMD-h84?ZxG^Z(k!Tm&Tg%9^{{bb`|zFpopbiL_FC)PhY%55$43P2cgcM* zA-4!24*|!3I{EZdclDHl@Si zICZ<-XF8qk39DgwEEfAXolfawGT|{EkGX6%OACd90E@*EW;HDL`Fxpfw@W*n4v%)b z%_R~EnoK4I==J(HtcK;qV)0_L+0fN$#bdc#a{Ydv4u?Y?qtS>)qtSC#!}3z8)LpOF zf_|}BaJ^oS4h91r7$+PKXHcWjXuvT-#9}eo^*)!&T^!Owj+d!a>O7y%_q1BA1Y_WU zygtn5b760+VSoQ!9yr%(wLeCq@eyh>nat~L-5k^`#K8L5{8@dqTK($x`(McA^6Sv^ z&%2&6Gan1|9IM-MzOU$&TCKkE1qP%0ul-xC*3Wc0-G=l<<#PEw_6_r8Ka8VBqcLZ_$2j|X%)Qxc{;gChzv}h+Z#YYj6$-^w1h{*>-k0FZyLdeQ zYBrmF$6lfa>jZBvK|`HRXB3v67z~DIJE24(*tmN|OeWL4NF-tn27^hf)p{nCN^ip1 nc>tcD2#bK=Z;SYL4FD&KpOK3Q`LxAbSjS`g`~$vI_zV64z;+{# diff --git a/build/prod/images/favourite-16x16.png b/build/prod/images/favourite-16x16.png deleted file mode 100755 index f6b994599142160c187330f2a2421858d151302c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 491 zcmV(y7s~VTDE;8){QT#?mpfe7Z?Y4D$B_-Wtu2^3*C)-V z$AvI|^b*GK!|hNzVMd2No10{!`StwtMNHY<;nm6 diff --git a/build/prod/images/favourite-24x24.png b/build/prod/images/favourite-24x24.png deleted file mode 100755 index eb1b91be32fcdc14c7c024fc441eca55007580e0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1229 zcmV;;1Ty=HP)xB&5csKeYU`)Wip$d{7@uV`yYSs`k-F z6C>J(Do|?M)M}!(R^mfz1z8rTwUw51gJ228T6UKK_Rd_-+=W84E+jI^-O0?o=lj0% zopWXxmUwyJ+@UEpMF(SGs?(A8Mr(K}act=X+s~}te`vc90{%A7@q+qOHOofO`_5jC zDVo0V)#re~S@eIbL5QG>vY1*Pf~M-@$)!81lGl6)2sdtfS7Fqvx91;htzH&_?z&wf z|G*9))C$FPf^&wxPhwHn_}QZIiyrWKD&9>hsXUO9+YX^qU4;T>7x?{B492f14f%B~ zp8rMAUAI%@*S!ebdmqej5dj4eiD?S>j>b?HEo?~y-hmo^ddn`HSG;%QlyLgolFX6;-{qsp+dRNznIp zO{XwsHaij@hvSh)@o@GQ*c=bRm7D_A86*WAFvpuoy<4h}5Lj8zkCqCNco^ZpIP?hx z#&iIGUG2ck*bps0m}2i@Jsz^4{xn5((((iPAWZ#h0#qPON>Gq$p@Er7gut+#4O;ZT ziNu_uJr>!EEduN-fcP@NwE@1y7r=Vos{SaxKzS*>Yz)Svoer{y1y+!ymVlUi$L`xB z35@w{2$k+6fEyG?FBFcU%XZuyb2rNx^mz7-B;@my^sUn{LxSQ7RDxRoVqQHJR}%g6 zKIxa4GK*9N2ENe{n27nK@X!~j_lw-)sU2RK$5S6G3sE~VDN?q8X(s|(#Hy(wAbba6 z@-8r=(^Ll{nb5Mpt>fOKDh3AGNOk{A+P~Vgr=fN@A=gMvFVhJ`g$Pd&&>#_x(~$i+ z4>o5_n8FSE_|f3eHxS-t4LAI3q{)z=O?SN@i|zM>EO9u<(!fzp6+Av2Q% z*0R$iwt zfj!i^iiiM<>4-hD$QA*$X6LbZ3=Qh#ySqZ?q7r;q;PLS;$+13`H;?jm;kVSn*oVebt zLUoIV-9HDVx|5q@Jz<^IXKmmp*u%jz4t;zDzI=}lR`mwgMkjc}B`Uj$aJ}(IT=`a` z6Rdr=H}Jr}#*;;{$7v3#ayD|TFXuRMSVNUBz@ieIellhtJZWYss_h4x1JCUGDJT%- rI$a#gOamQ;!AewzxIyRFE!_VbVxu0O!I}R500000NkvXXu0mjfz3Wl# diff --git a/build/prod/images/fork_me.png b/build/prod/images/fork_me.png deleted file mode 100755 index 6e0c3a7882e8eefbeee4746f4c1466283f244a84..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7660 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 VS5l{YIZ^-s002ovPDHLkV1lFag(?65 diff --git a/build/prod/images/help-22x22.png b/build/prod/images/help-22x22.png deleted file mode 100755 index ddea036d127d748ab92672bdaa9f185721e0f33b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1294 zcmV+p1@ZccP)XXj4&@i)tISlD zgDmB6GeR~Z!tnW7lNhfv_YxgF<)OsIUs7_~9y)fqgdR1H6_!!T+8lcR9VeZ3SJB~< z95AUihux|a$m*zy=RcIEf+@$E{6imO144MRA@#6 zzRmSu?&Oh38Xao}kP_aCsne2d+{-F-2M7j5hH6mYJXwmpKV8C=n|E;E7l5nuW=JgS zC73jW5C=$y3+45go;<1Cz15tzvjCVw%cbqA%=Yk3(p6lxB7R7== z!icy?T)E!N#dIFg3OS7d1tBy#I=kWX zb->@zg--5qd|ZFntPxnZJFlJFusHOrCZZ60Bny^g9`0ypZlgR`6)pe#1f_4yr!~6@ z>Amc;^wEA7ZTQYj8xI!Ir{7$h+-H8 z0GUK0kp|%qd@>j%l}ZU!RYkkq7ADB4@r)jNox*xHn-#=yt0VSHx_FguaLB0%f*yL! zk_RAw*ODapVzC%9B^{gZe&hW&1F;1U!v2Tk)OZGZ=w-(GXI_oi`|@9`r)$=Hs-B5M zMIX}WA(&y-1t2cVGHR_3-l(UrWA}3tezyy~Uf1aS1#7&5L# ze0VnR!9}N!t+&5m$H$6+=TZR7vH)JM7eD^i(X|y+n^#zgJi_@+->wq_@AV)v3&LfJ z{Cc-*8KGzwXc)JomTvbFR)Jv{2+mBRd~yyugb*a7H=vgptDvB1T68%)hr`mpkpegt zEQfv2w4Y#>dypv>iwHfQ!rIemUY7$o=tjst#UZzJdgx__S#uW@a|?I!b+Ncz78?iO z?L&=c_H9(|UFFK3OOgDbiIJ5z(oL7`Upc z4qbCx``)&XbqLr8*Lnc*tw5gV=FuId zX?nQp0JC*nM|EBQJo3O8^DR2>Mj(!3+X1dp#e)J#lE5pz>j3L#OvJwR04lx*ctXI> z?crL-(zY$bQ8(|^UGj6GTL4#@rV$u|nVdPeUq2Tz5nRr)>{DM(ul$PI;Td1bo5s6_ g{F6Ux{Qe0r02?tlLRHyd%>V!Z07*qoM6N<$g4z3%_W%F@ diff --git a/build/prod/images/mail-16x16.png b/build/prod/images/mail-16x16.png deleted file mode 100755 index 6afab8a87ddc5c9045be42edaebc5b7b3dfee619..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 463 zcmV;=0WkiFP)F|0EfSkVI2o&aUI>WtnNvry0m&UT0=uYgFp?j2qGfr(jV$Wfl8TN?mPV#`jIOn0Dl2MPz$1ms)?VAd)d_F69Te? z<2Wc(BfNr#>tYzMxi~Q7MWwwW*Kge9&E_VyZ2|ZT-fwNu)!j{T*TF57*!#7Mg!D&J z;zVl;U%q|=pYQ7y3I+EllzZj=zjrY4bb9I*M`wcn!Ee$@yqCWM6ukfd002ovPDHLk FV1nBG($N3_ diff --git a/build/prod/images/maximise-16x16.png b/build/prod/images/maximise-16x16.png deleted file mode 100755 index be47e6ee11a3d4b555254345ac2225b837fd91ae..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 235 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b z3=G`DAk4@xYmNj^u-ntcF~s8Z*~^Apha3c2AL{RH?m8)WsanH-qH|=nA`8>Bs274x z?-raDJ6yIqv&KM&=Zw93OlKRt|YA&n} zXt{IoiqkrYKeK1)9(La48PC0gwS1S<0mk(@>dBdJ79Y*#NZ5GPyQe;y!y z&o2W(6#iy*S|KHVhQvku0WKmTaqvGlxgv3Nl;Gk}aVI@-7!5GJL{P^Coajpu8Y)VI0{~&B?q#x6Q4M^XdrA-T$q9h^mxmWbC zfbRlM$$CpA^(T$vUQqu6T4OtG%cM?AUj>X*{4rO+HBna(X$duV(vxs-jr+Ji!<~Nh za(0W@+8#Y)G=b#nR^;G61Egng9odIYv{g+~P?7Rn_%(-M5sIwdasCuw01i?TpB=_Y Q1ONa407*qoM6N<$f)e=DlK=n! diff --git a/build/prod/images/open_yellow-24x24.png b/build/prod/images/open_yellow-24x24.png deleted file mode 100755 index 7ff528887580d59ceb1531de886506292f270e46..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 719 zcmV;=0xWODAEx%Yd{`JNwljHWwam^2JUHO?jP{*!fL*}N{G54w5r9iwC-0ucT2z%Z zvlJD9Y;7BLB#Kc4MACh^R7F*AodQF5PFx1g&3hn{1>0IAiZa0TAS$S&Yg93w0|IIQ z5x{`JJY^1u{7f9z1y52gofPo*;Hjkxq%8O@0xF263Q7eq1{^D3B~`E#@O*9sr{tws zmr|s8J!D+kgo)vYME(rrLY8xRTynml>0Lf|T$f^jJ;vcemSiKIO=IBZE{3%!N=4YT z`$$WLwR!LHE}+Yw8hiip*6H4P1*oE;1l37O9UDk|9|;>R_6LXQkw@nhXX9baa1%vQP(yHV-4anyYq|f#;aqigvNG-%KL0|IFjt+T zysDF=5nz+3HFRV6JT@>M#*6?odEi%P=;+);To15G+!{Szfsb#VPlho=2JkYPT|}tY z>vWddsn6A#TjFAd*swD8`l|!406aegpiNaMx2?v8A=0At05cPnFMdN_0P(eZ;9a>3 z-TP_(^kMYdx{X`cB=tH4x7afOl{drRMkaWAqd%+U(MdW6-qZK}dhhDQQe4vYWuP+6 z(9Qe209FDG1C)UknKVnhAr**$Fnbd7-~Uzo7y#R~;?Z?R&0GKg002ovPDHLkV1iqr BQ}F-* diff --git a/build/prod/images/recycle-16x16.png b/build/prod/images/recycle-16x16.png deleted file mode 100755 index faff7bf65a7ceb17861a815aa2be59ff1ae6bfed..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 585 zcmV-P0=E5$P)W|BC@IbfsxfDKo>aP&dZM7Vq2V zFC80dZS8x0`QlA>LuO*+9!yT#Ky*2s9%W_u3#MsdS>|6ob-JH(gV%XCHTlLQ0zSOY z;<|1q56|0Dj99FsJ&}is_6sWowy*)_=Vuss_<-FoJ@s}wApK)vRVHlvZ`#60Aar#q7BXuNe>FI4|Ak{@jS3M`% z57XRokVI1z$<8DInWvwJZOTDws6G@Y(Qp-j_4SWrKfPwX;wQzTMhS~8%{b!*H0Je;K|kQBt5(=tArW@Bs3; z??GeJNk?jp3KT+x5{k{@YS>2)QmRlI-0i diff --git a/build/prod/images/remove-16x16.png b/build/prod/images/remove-16x16.png deleted file mode 100755 index b0cbfb64045b8fce6c8faa0346a61ce2686212ce..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 507 zcmV zJx>Bb5Pd6Pf-w?$H8dKGAQaG0-d`}WrtvQjNo*{YP#BB} zR0KjpgeVrmo#)Kno*tqVm(0!Xym@cuX7+?_+nD8?oU^!ju37L8lof`Mj*x>qzEu()>w`^ZFp2md$1p zJE@eyEG;0oi6tS_DO8q`$Yf-#Rzoxz#Z9SHWgwPF$ZofbP$-1QN~KEKMGBYCi2E&I zJ5?x={bW)$8x2Jm4u|Np+Xx1Ocx$y3nR-&@Bc}w$&gUqRm9;hb((9=*eLf#vdp$*_ zW|jk7x)xAV=;*+_?l`Z%YPFa=`*HvPq*Hibv)(u+^hh@+-u}Cr3IL4SgIi1Nd z(kVua5?xZQ->_}`Y7TgK4u@^_ zypK>k@(;GExoQeRh-KO@YyrEQ!1)t!c@NxC?1Su+`@0S7Z2%W_;OfD_-ih0G1(qlf x(1Y+?PUUUqS5O1;Yn+ENBJQi0^>_XfU;rcB&=UkdJozf)z{dE$(p>3OC+FuDqKAcLo?pUXO@geCyl5nMn3 diff --git a/build/prod/images/save-16x16.png b/build/prod/images/save-16x16.png deleted file mode 100755 index c9df8df66dd61e204b77c181aacb32aa3a5dfa48..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 472 zcmV;}0Vn>6P)Nkl-Tu_>Juq|2IKd$hnOmL3D@pMO#x9=b{;&9&UGoh zRt9)APTsuD|DbQatr`SWmCQBJN3O=y^=mXo6FC@iJ{)zwy^X)U_&2#LYKEC>h3iBd1U%7mVEX!y#8dW&wn9XM7 zdCtMXJMyhvyl<|qpo9=`E}_+GF&GR0==b|fr&EfeSZEBy#ah2y!2uG~;-LsMn@yH5 z9*>z!CJU`{GsA*XmX!g_OHb;+AQmmzY>sLWCn&uKz&Vl6hd+KzcTODvvsl#WbZEER zo6RvWy1jxk@Ig_Wch^oCyI;b{kXx O0000oCKkNf#BkgNyoahAP5d3h;%84Q*{=c6h&QJ z3U+aE5HwhnK%uE5CCR(zde3>6%QY2g&6oFa&OLeedtc7EFLdtuvqfgU1AtJ#BEs(4 zzwaS{L3Ar)=Ed7rnpDbC%)Pu1FcYkW&}wAK3Cy~d2#N6b__gr$#UJ ztJT_fE7&qj{>Sh*c8oMl|F0En)s!Id!rJHYTfs1F-8m(k6u1%<|9JM zhI>JU2m@a^DJfq5pFoy{~Vv7fj5aM^--AKah#+8N zH21xbR>Z?I;#S24l}ZKGY85d$oes9Qw}l}up!>pp6TKi*6dkP%!by@K!lrDDC;<{f;Z#{0{@tW2`1QTr!OWow2q;>7bg;CWgbIdaSEif3WuqAoY z+_k4?33z3JsoBlvDF}aqx{5&{v<_YZM3}TvhywR$*Udx;fRf{cW7Tmoih`bFH{y=t d!08x7_zjT(_VU!$-KhWo002ovPDHLkV1m4&R>c4S diff --git a/build/prod/images/save_as-16x16.png b/build/prod/images/save_as-16x16.png deleted file mode 100755 index b5d4db8b5a214c33701006dc53f23d2b00fd89e0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 642 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 diff --git a/build/prod/index.html b/build/prod/index.html deleted file mode 100755 index d69e6c61..00000000 --- a/build/prod/index.html +++ /dev/null @@ -1,21 +0,0 @@ - -CyberChef Edit
      \ No newline at end of file diff --git a/build/prod/scripts.js b/build/prod/scripts.js deleted file mode 100755 index 0bf65a3a..00000000 --- a/build/prod/scripts.js +++ /dev/null @@ -1,292 +0,0 @@ -/** - * CyberChef - The Cyber Swiss Army Knife - * - * @copyright Crown Copyright 2016 - * @license Apache-2.0 - * - * Copyright 2016 Crown Copyright - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -"use strict";function BigInteger(a,b,c){null!=a&&("number"==typeof a?this.fromNumber(a,b,c):null==b&&"string"!=typeof a?this.fromString(a,256):this.fromString(a,b))}function nbi(){return new BigInteger(null)}function am1(a,b,c,d,e,f){for(;--f>=0;){var g=b*this[a++]+c[d]+e;e=Math.floor(g/67108864),c[d++]=67108863&g}return e}function am2(a,b,c,d,e,f){for(var g=32767&b,h=b>>15;--f>=0;){var i=32767&this[a],j=this[a++]>>15,k=h*i+j*g;i=g*i+((32767&k)<<15)+c[d]+(1073741823&e),e=(i>>>30)+(k>>>15)+h*j+(e>>>30),c[d++]=1073741823&i}return e}function am3(a,b,c,d,e,f){for(var g=16383&b,h=b>>14;--f>=0;){var i=16383&this[a],j=this[a++]>>14,k=h*i+j*g;i=g*i+((16383&k)<<14)+c[d]+e,e=(i>>28)+(k>>14)+h*j,c[d++]=268435455&i}return e}function int2char(a){return BI_RM.charAt(a)}function intAt(a,b){var c=BI_RC[a.charCodeAt(b)];return null==c?-1:c}function bnpCopyTo(a){for(var b=this.t-1;b>=0;--b)a[b]=this[b];a.t=this.t,a.s=this.s}function bnpFromInt(a){this.t=1,this.s=a<0?-1:0,a>0?this[0]=a:a<-1?this[0]=a+this.DV:this.t=0}function nbv(a){var b=nbi();return b.fromInt(a),b}function bnpFromString(a,b){var c;if(16==b)c=4;else if(8==b)c=3;else if(256==b)c=8;else if(2==b)c=1;else if(32==b)c=5;else{if(4!=b)return void this.fromRadix(a,b);c=2}this.t=0,this.s=0;for(var d=a.length,e=!1,f=0;--d>=0;){var g=8==c?255&a[d]:intAt(a,d);g<0?"-"==a.charAt(d)&&(e=!0):(e=!1,0==f?this[this.t++]=g:f+c>this.DB?(this[this.t-1]|=(g&(1<>this.DB-f):this[this.t-1]|=g<=this.DB&&(f-=this.DB))}8==c&&0!=(128&a[0])&&(this.s=-1,f>0&&(this[this.t-1]|=(1<0&&this[this.t-1]==a;)--this.t}function bnToString(a){if(this.s<0)return"-"+this.negate().toString(a);var b;if(16==a)b=4;else if(8==a)b=3;else if(2==a)b=1;else if(32==a)b=5;else{if(4!=a)return this.toRadix(a);b=2}var c,d=(1<0)for(h>h)>0&&(e=!0,f=int2char(c));g>=0;)h>(h+=this.DB-b)):(c=this[g]>>(h-=b)&d,h<=0&&(h+=this.DB,--g)),c>0&&(e=!0),e&&(f+=int2char(c));return e?f:"0"}function bnNegate(){var a=nbi();return BigInteger.ZERO.subTo(this,a),a}function bnAbs(){return this.s<0?this.negate():this}function bnCompareTo(a){var b=this.s-a.s;if(0!=b)return b;var c=this.t;if(b=c-a.t,0!=b)return this.s<0?-b:b;for(;--c>=0;)if(0!=(b=this[c]-a[c]))return b;return 0}function nbits(a){var b,c=1;return 0!=(b=a>>>16)&&(a=b,c+=16),0!=(b=a>>8)&&(a=b,c+=8),0!=(b=a>>4)&&(a=b,c+=4),0!=(b=a>>2)&&(a=b,c+=2),0!=(b=a>>1)&&(a=b,c+=1),c}function bnBitLength(){return this.t<=0?0:this.DB*(this.t-1)+nbits(this[this.t-1]^this.s&this.DM)}function bnpDLShiftTo(a,b){var c;for(c=this.t-1;c>=0;--c)b[c+a]=this[c];for(c=a-1;c>=0;--c)b[c]=0;b.t=this.t+a,b.s=this.s}function bnpDRShiftTo(a,b){for(var c=a;c=0;--c)b[c+g+1]=this[c]>>e|h,h=(this[c]&f)<=0;--c)b[c]=0;b[g]=h,b.t=this.t+g+1,b.s=this.s,b.clamp()}function bnpRShiftTo(a,b){b.s=this.s;var c=Math.floor(a/this.DB);if(c>=this.t)return void(b.t=0);var d=a%this.DB,e=this.DB-d,f=(1<>d;for(var g=c+1;g>d;d>0&&(b[this.t-c-1]|=(this.s&f)<>=this.DB;if(a.t>=this.DB;d+=this.s}else{for(d+=this.s;c>=this.DB;d-=a.s}b.s=d<0?-1:0,d<-1?b[c++]=this.DV+d:d>0&&(b[c++]=d),b.t=c,b.clamp()}function bnpMultiplyTo(a,b){var c=this.abs(),d=a.abs(),e=c.t;for(b.t=e+d.t;--e>=0;)b[e]=0;for(e=0;e=0;)a[c]=0;for(c=0;c=b.DV&&(a[c+b.t]-=b.DV,a[c+b.t+1]=1)}a.t>0&&(a[a.t-1]+=b.am(c,b[c],a,2*c,0,1)),a.s=0,a.clamp()}function bnpDivRemTo(a,b,c){var d=a.abs();if(!(d.t<=0)){var e=this.abs();if(e.t0?(d.lShiftTo(i,f),e.lShiftTo(i,c)):(d.copyTo(f),e.copyTo(c));var j=f.t,k=f[j-1];if(0!=k){var l=k*(1<1?f[j-2]>>this.F2:0),m=this.FV/l,n=(1<=0&&(c[c.t++]=1,c.subTo(r,c)),BigInteger.ONE.dlShiftTo(j,r),r.subTo(f,f);f.t=0;){var s=c[--p]==k?this.DM:Math.floor(c[p]*m+(c[p-1]+o)*n);if((c[p]+=f.am(0,s,c,q,0,j))0&&c.rShiftTo(i,c),g<0&&BigInteger.ZERO.subTo(c,c)}}}function bnMod(a){var b=nbi();return this.abs().divRemTo(a,null,b),this.s<0&&b.compareTo(BigInteger.ZERO)>0&&a.subTo(b,b),b}function Classic(a){this.m=a}function cConvert(a){return a.s<0||a.compareTo(this.m)>=0?a.mod(this.m):a}function cRevert(a){return a}function cReduce(a){a.divRemTo(this.m,null,a)}function cMulTo(a,b,c){a.multiplyTo(b,c),this.reduce(c)}function cSqrTo(a,b){a.squareTo(b),this.reduce(b)}function bnpInvDigit(){if(this.t<1)return 0;var a=this[0];if(0==(1&a))return 0;var b=3&a;return b=b*(2-(15&a)*b)&15,b=b*(2-(255&a)*b)&255,b=b*(2-((65535&a)*b&65535))&65535,b=b*(2-a*b%this.DV)%this.DV,b>0?this.DV-b:-b}function Montgomery(a){this.m=a,this.mp=a.invDigit(),this.mpl=32767&this.mp,this.mph=this.mp>>15,this.um=(1<0&&this.m.subTo(b,b),b}function montRevert(a){var b=nbi();return a.copyTo(b),this.reduce(b),b}function montReduce(a){for(;a.t<=this.mt2;)a[a.t++]=0;for(var b=0;b>15)*this.mpl&this.um)<<15)&a.DM;for(c=b+this.m.t,a[c]+=this.m.am(0,d,a,b,0,this.m.t);a[c]>=a.DV;)a[c]-=a.DV,a[++c]++}a.clamp(),a.drShiftTo(this.m.t,a),a.compareTo(this.m)>=0&&a.subTo(this.m,a)}function montSqrTo(a,b){a.squareTo(b),this.reduce(b)}function montMulTo(a,b,c){a.multiplyTo(b,c),this.reduce(c)}function bnpIsEven(){return 0==(this.t>0?1&this[0]:this.s)}function bnpExp(a,b){if(a>4294967295||a<1)return BigInteger.ONE;var c=nbi(),d=nbi(),e=b.convert(this),f=nbits(a)-1;for(e.copyTo(c);--f>=0;)if(b.sqrTo(c,d),(a&1<0)b.mulTo(d,e,c);else{var g=c;c=d,d=g}return b.revert(c)}function bnModPowInt(a,b){var c;return c=a<256||b.isEven()?new Classic(b):new Montgomery(b),this.exp(a,c)}function bnClone(){var a=nbi();return this.copyTo(a),a}function bnIntValue(){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)<>24}function bnShortValue(){return 0==this.t?this.s:this[0]<<16>>16}function bnpChunkSize(a){return Math.floor(Math.LN2*this.DB/Math.log(a))}function bnSigNum(){return this.s<0?-1:this.t<=0||1==this.t&&this[0]<=0?0:1}function bnpToRadix(a){if(null==a&&(a=10),0==this.signum()||a<2||a>36)return"0";var b=this.chunkSize(a),c=Math.pow(a,b),d=nbv(c),e=nbi(),f=nbi(),g="";for(this.divRemTo(d,e,f);e.signum()>0;)g=(c+f.intValue()).toString(a).substr(1)+g,e.divRemTo(d,e,f);return f.intValue().toString(a)+g}function bnpFromRadix(a,b){this.fromInt(0),null==b&&(b=10);for(var c=this.chunkSize(b),d=Math.pow(b,c),e=!1,f=0,g=0,h=0;h=c&&(this.dMultiply(d),this.dAddOffset(g,0),f=0,g=0))}f>0&&(this.dMultiply(Math.pow(b,f)),this.dAddOffset(g,0)),e&&BigInteger.ZERO.subTo(this,this)}function bnpFromNumber(a,b,c){if("number"==typeof b)if(a<2)this.fromInt(1);else for(this.fromNumber(a,c),this.testBit(a-1)||this.bitwiseTo(BigInteger.ONE.shiftLeft(a-1),op_or,this),this.isEven()&&this.dAddOffset(1,0);!this.isProbablePrime(b);)this.dAddOffset(2,0),this.bitLength()>a&&this.subTo(BigInteger.ONE.shiftLeft(a-1),this);else{var d=new Array,e=7&a;d.length=(a>>3)+1,b.nextBytes(d),e>0?d[0]&=(1<0)for(d>d)!=(this.s&this.DM)>>d&&(b[e++]=c|this.s<=0;)d<8?(c=(this[a]&(1<>(d+=this.DB-8)):(c=this[a]>>(d-=8)&255,d<=0&&(d+=this.DB,--a)),0!=(128&c)&&(c|=-256),0==e&&(128&this.s)!=(128&c)&&++e,(e>0||c!=this.s)&&(b[e++]=c);return b}function bnEquals(a){return 0==this.compareTo(a)}function bnMin(a){return this.compareTo(a)<0?this:a}function bnMax(a){return this.compareTo(a)>0?this:a}function bnpBitwiseTo(a,b,c){var d,e,f=Math.min(a.t,this.t);for(d=0;d>=16,b+=16),0==(255&a)&&(a>>=8,b+=8),0==(15&a)&&(a>>=4,b+=4),0==(3&a)&&(a>>=2,b+=2),0==(1&a)&&++b,b}function bnGetLowestSetBit(){for(var a=0;a=this.t?0!=this.s:0!=(this[b]&1<>=this.DB;if(a.t>=this.DB;d+=this.s}else{for(d+=this.s;c>=this.DB;d+=a.s}b.s=d<0?-1:0,d>0?b[c++]=d:d<-1&&(b[c++]=this.DV+d),b.t=c,b.clamp()}function bnAdd(a){var b=nbi();return this.addTo(a,b),b}function bnSubtract(a){var b=nbi();return this.subTo(a,b),b}function bnMultiply(a){var b=nbi();return this.multiplyTo(a,b),b}function bnSquare(){var a=nbi();return this.squareTo(a),a}function bnDivide(a){var b=nbi();return this.divRemTo(a,b,null),b}function bnRemainder(a){var b=nbi();return this.divRemTo(a,null,b),b}function bnDivideAndRemainder(a){var b=nbi(),c=nbi();return this.divRemTo(a,b,c),new Array(b,c)}function bnpDMultiply(a){this[this.t]=this.am(0,a-1,this,0,0,this.t),++this.t,this.clamp()}function bnpDAddOffset(a,b){if(0!=a){for(;this.t<=b;)this[this.t++]=0;for(this[b]+=a;this[b]>=this.DV;)this[b]-=this.DV,++b>=this.t&&(this[this.t++]=0),++this[b]}}function NullExp(){}function nNop(a){return a}function nMulTo(a,b,c){a.multiplyTo(b,c)}function nSqrTo(a,b){a.squareTo(b)}function bnPow(a){return this.exp(a,new NullExp)}function bnpMultiplyLowerTo(a,b,c){var d=Math.min(this.t+a.t,b);for(c.s=0,c.t=d;d>0;)c[--d]=0;var e;for(e=c.t-this.t;d=0;)c[d]=0;for(d=Math.max(b-this.t,0);d2*this.m.t)return a.mod(this.m);if(a.compareTo(this.m)<0)return a;var b=nbi();return a.copyTo(b),this.reduce(b),b}function barrettRevert(a){return a}function barrettReduce(a){for(a.drShiftTo(this.m.t-1,this.r2),a.t>this.m.t+1&&(a.t=this.m.t+1,a.clamp()),this.mu.multiplyUpperTo(this.r2,this.m.t+1,this.q3),this.m.multiplyLowerTo(this.q3,this.m.t+1,this.r2);a.compareTo(this.r2)<0;)a.dAddOffset(1,this.m.t+1);for(a.subTo(this.r2,a);a.compareTo(this.m)>=0;)a.subTo(this.m,a)}function barrettSqrTo(a,b){a.squareTo(b),this.reduce(b)}function barrettMulTo(a,b,c){a.multiplyTo(b,c),this.reduce(c)}function bnModPow(a,b){var c,d,e=a.bitLength(),f=nbv(1);if(e<=0)return f;c=e<18?1:e<48?3:e<144?4:e<768?5:6,d=e<8?new Classic(b):b.isEven()?new Barrett(b):new Montgomery(b);var g=new Array,h=3,i=c-1,j=(1<1){var k=nbi();for(d.sqrTo(g[1],k);h<=j;)g[h]=nbi(),d.mulTo(k,g[h-2],g[h]),h+=2}var l,m,n=a.t-1,o=!0,p=nbi();for(e=nbits(a[n])-1;n>=0;){for(e>=i?l=a[n]>>e-i&j:(l=(a[n]&(1<0&&(l|=a[n-1]>>this.DB+e-i)),h=c;0==(1&l);)l>>=1,--h;if((e-=h)<0&&(e+=this.DB,--n),o)g[l].copyTo(f),o=!1;else{for(;h>1;)d.sqrTo(f,p),d.sqrTo(p,f),h-=2;h>0?d.sqrTo(f,p):(m=f,f=p,p=m),d.mulTo(p,g[l],f)}for(;n>=0&&0==(a[n]&1<0&&(b.rShiftTo(f,b),c.rShiftTo(f,c));b.signum()>0;)(e=b.getLowestSetBit())>0&&b.rShiftTo(e,b),(e=c.getLowestSetBit())>0&&c.rShiftTo(e,c),b.compareTo(c)>=0?(b.subTo(c,b),b.rShiftTo(1,b)):(c.subTo(b,c),c.rShiftTo(1,c));return f>0&&c.lShiftTo(f,c),c}function bnpModInt(a){if(a<=0)return 0;var b=this.DV%a,c=this.s<0?a-1:0;if(this.t>0)if(0==b)c=this[0]%a;else for(var d=this.t-1;d>=0;--d)c=(b*c+this[d])%a;return c}function bnModInverse(a){var b=a.isEven();if(this.isEven()&&b||0==a.signum())return BigInteger.ZERO;for(var c=a.clone(),d=this.clone(),e=nbv(1),f=nbv(0),g=nbv(0),h=nbv(1);0!=c.signum();){for(;c.isEven();)c.rShiftTo(1,c),b?(e.isEven()&&f.isEven()||(e.addTo(this,e),f.subTo(a,f)),e.rShiftTo(1,e)):f.isEven()||f.subTo(a,f),f.rShiftTo(1,f);for(;d.isEven();)d.rShiftTo(1,d),b?(g.isEven()&&h.isEven()||(g.addTo(this,g),h.subTo(a,h)),g.rShiftTo(1,g)):h.isEven()||h.subTo(a,h),h.rShiftTo(1,h);c.compareTo(d)>=0?(c.subTo(d,c),b&&e.subTo(g,e),f.subTo(h,f)):(d.subTo(c,d),b&&g.subTo(e,g),h.subTo(f,h))}return 0!=d.compareTo(BigInteger.ONE)?BigInteger.ZERO:h.compareTo(a)>=0?h.subtract(a):h.signum()<0?(h.addTo(a,h),h.signum()<0?h.add(a):h):h}function bnIsProbablePrime(a){var b,c=this.abs();if(1==c.t&&c[0]<=lowprimes[lowprimes.length-1]){for(b=0;b>1,a>lowprimes.length&&(a=lowprimes.length);for(var e=nbi(),f=0;f>6)+b64map.charAt(63&c);for(b+1==a.length?(c=parseInt(a.substring(b,b+1),16),d+=b64map.charAt(c<<2)):b+2==a.length&&(c=parseInt(a.substring(b,b+2),16),d+=b64map.charAt(c>>2)+b64map.charAt((3&c)<<4));(3&d.length)>0;)d+=b64padchar;return d}function b64tohex(a){var b,c,d="",e=0;for(b=0;b>2),c=3&f,e=1):1==e?(d+=int2char(c<<2|f>>4),c=15&f,e=2):2==e?(d+=int2char(c),d+=int2char(f>>2),c=3&f,e=3):(d+=int2char(c<<2|f>>4),d+=int2char(15&f),e=0))}return 1==e&&(d+=int2char(c<<2)),d}function b64toBA(a){var b,c=b64tohex(a),d=new Array;for(b=0;2*b0;--b){f=f.twice();var g=d.testBit(b),h=c.testBit(b);g!=h&&(f=f.add(g?this:e))}return f}function pointFpMultiplyTwo(a,b,c){var d;d=a.bitLength()>c.bitLength()?a.bitLength()-1:c.bitLength()-1;for(var e=this.curve.getInfinity(),f=this.add(b);d>=0;)e=e.twice(),a.testBit(d)?e=c.testBit(d)?e.add(f):e.add(this):c.testBit(d)&&(e=e.add(b)),--d;return e}function ECCurveFp(a,b,c){this.q=a,this.a=this.fromBigInteger(b),this.b=this.fromBigInteger(c),this.infinity=new ECPointFp(this,null,null),this.reducer=new Barrett(this.q)}function curveFpGetQ(){return this.q}function curveFpGetA(){return this.a}function curveFpGetB(){return this.b}function curveFpEquals(a){return a==this||this.q.equals(a.q)&&this.a.equals(a.a)&&this.b.equals(a.b)}function curveFpGetInfinity(){return this.infinity}function curveFpFromBigInteger(a){return new ECFieldElementFp(this.q,a)}function curveReduce(a){this.reducer.reduce(a)}function curveFpDecodePointHex(a){switch(parseInt(a.substr(0,2),16)){case 0:return this.infinity;case 2:case 3:return null;case 4:case 6:case 7:var b=(a.length-2)/2,c=a.substr(2,b),d=a.substr(b+2,b);return new ECPointFp(this,this.fromBigInteger(new BigInteger(c,16)),this.fromBigInteger(new BigInteger(d,16)));default:return null}}function curveFpEncodePointHex(a){if(a.isInfinity())return"00";var b=a.getX().toBigInteger().toString(16),c=a.getY().toBigInteger().toString(16),d=this.getQ().toString(16).length;for(d%2!=0&&d++;b.length>8&255,rng_pptr>=rng_psize&&(rng_pptr-=rng_psize)}function rng_seed_time(){rng_seed_int((new Date).getTime())}function rng_get_byte(){if(null==rng_state){for(rng_seed_time(),rng_state=prng_newstate(),rng_state.init(rng_pool),rng_pptr=0;rng_pptr=0&&b>0;){var e=a.charCodeAt(d--);e<128?c[--b]=e:e>127&&e<2048?(c[--b]=63&e|128,c[--b]=e>>6|192):(c[--b]=63&e|128,c[--b]=e>>6&63|128,c[--b]=e>>12|224)}c[--b]=0;for(var f=new SecureRandom,g=new Array;b>2;){for(g[0]=0;0==g[0];)f.nextBytes(g);c[--b]=g[0]}return c[--b]=2,c[--b]=0,new BigInteger(c)}function RSAKey(){this.n=null,this.e=0,this.d=null,this.p=null,this.q=null,this.dmp1=null,this.dmq1=null,this.coeff=null}function RSASetPublic(a,b){null!=a&&null!=b&&a.length>0&&b.length>0&&(this.n=parseBigInt(a,16),this.e=parseInt(b,16))}function RSADoPublic(a){return a.modPowInt(this.e,this.n)}function RSAEncrypt(a){var b=pkcs1pad2(a,this.n.bitLength()+7>>3);if(null==b)return null;var c=this.doPublic(b);if(null==c)return null;var d=c.toString(16);return 0==(1&d.length)?d:"0"+d}function X9ECParameters(a,b,c,d){this.curve=a,this.g=b,this.n=c,this.h=d}function x9getCurve(){return this.curve}function x9getG(){return this.g}function x9getN(){return this.n}function x9getH(){return this.h}function fromHex(a){return new BigInteger(a,16)}function secp128r1(){var a=fromHex("FFFFFFFDFFFFFFFFFFFFFFFFFFFFFFFF"),b=fromHex("FFFFFFFDFFFFFFFFFFFFFFFFFFFFFFFC"),c=fromHex("E87579C11079F43DD824993C2CEE5ED3"),d=fromHex("FFFFFFFE0000000075A30D1B9038A115"),e=BigInteger.ONE,f=new ECCurveFp(a,b,c),g=f.decodePointHex("04161FF7528B899B2D0C28607CA52C5B86CF5AC8395BAFEB13C02DA292DDED7A83");return new X9ECParameters(f,g,d,e)}function secp160k1(){var a=fromHex("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFAC73"),b=BigInteger.ZERO,c=fromHex("7"),d=fromHex("0100000000000000000001B8FA16DFAB9ACA16B6B3"),e=BigInteger.ONE,f=new ECCurveFp(a,b,c),g=f.decodePointHex("043B4C382CE37AA192A4019E763036F4F5DD4D7EBB938CF935318FDCED6BC28286531733C3F03C4FEE");return new X9ECParameters(f,g,d,e)}function secp160r1(){var a=fromHex("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFF"),b=fromHex("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFC"),c=fromHex("1C97BEFC54BD7A8B65ACF89F81D4D4ADC565FA45"),d=fromHex("0100000000000000000001F4C8F927AED3CA752257"),e=BigInteger.ONE,f=new ECCurveFp(a,b,c),g=f.decodePointHex("044A96B5688EF573284664698968C38BB913CBFC8223A628553168947D59DCC912042351377AC5FB32");return new X9ECParameters(f,g,d,e)}function secp192k1(){var a=fromHex("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFEE37"),b=BigInteger.ZERO,c=fromHex("3"),d=fromHex("FFFFFFFFFFFFFFFFFFFFFFFE26F2FC170F69466A74DEFD8D"),e=BigInteger.ONE,f=new ECCurveFp(a,b,c),g=f.decodePointHex("04DB4FF10EC057E9AE26B07D0280B7F4341DA5D1B1EAE06C7D9B2F2F6D9C5628A7844163D015BE86344082AA88D95E2F9D");return new X9ECParameters(f,g,d,e)}function secp192r1(){var a=fromHex("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFF"),b=fromHex("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFC"),c=fromHex("64210519E59C80E70FA7E9AB72243049FEB8DEECC146B9B1"),d=fromHex("FFFFFFFFFFFFFFFFFFFFFFFF99DEF836146BC9B1B4D22831"),e=BigInteger.ONE,f=new ECCurveFp(a,b,c),g=f.decodePointHex("04188DA80EB03090F67CBF20EB43A18800F4FF0AFD82FF101207192B95FFC8DA78631011ED6B24CDD573F977A11E794811");return new X9ECParameters(f,g,d,e)}function secp224r1(){var a=fromHex("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000001"),b=fromHex("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFE"),c=fromHex("B4050A850C04B3ABF54132565044B0B7D7BFD8BA270B39432355FFB4"),d=fromHex("FFFFFFFFFFFFFFFFFFFFFFFFFFFF16A2E0B8F03E13DD29455C5C2A3D"),e=BigInteger.ONE,f=new ECCurveFp(a,b,c),g=f.decodePointHex("04B70E0CBD6BB4BF7F321390B94A03C1D356C21122343280D6115C1D21BD376388B5F723FB4C22DFE6CD4375A05A07476444D5819985007E34");return new X9ECParameters(f,g,d,e)}function secp256r1(){var a=fromHex("FFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF"),b=fromHex("FFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFC"),c=fromHex("5AC635D8AA3A93E7B3EBBD55769886BC651D06B0CC53B0F63BCE3C3E27D2604B"),d=fromHex("FFFFFFFF00000000FFFFFFFFFFFFFFFFBCE6FAADA7179E84F3B9CAC2FC632551"),e=BigInteger.ONE,f=new ECCurveFp(a,b,c),g=f.decodePointHex("046B17D1F2E12C4247F8BCE6E563A440F277037D812DEB33A0F4A13945D898C2964FE342E2FE1A7F9B8EE7EB4A7C0F9E162BCE33576B315ECECBB6406837BF51F5");return new X9ECParameters(f,g,d,e)}function getSECCurveByName(a){return"secp128r1"==a?secp128r1():"secp160k1"==a?secp160k1():"secp160r1"==a?secp160r1():"secp192k1"==a?secp192k1():"secp192r1"==a?secp192r1():"secp224r1"==a?secp224r1():"secp256r1"==a?secp256r1():null}function Base64x(){}function stoBA(a){for(var b=new Array,c=0;c0&&b-1 in a))}function d(a,b,c){if(_.isFunction(b))return _.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return _.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(ha.test(b))return _.filter(b,a,c);b=_.filter(b,a)}return _.grep(a,function(a){return U.call(b,a)>=0!==c})}function e(a,b){for(;(a=a[b])&&1!==a.nodeType;);return a}function f(a){var b=oa[a]={};return _.each(a.match(na)||[],function(a,c){b[c]=!0}),b}function g(){Z.removeEventListener("DOMContentLoaded",g,!1),a.removeEventListener("load",g,!1),_.ready()}function h(){Object.defineProperty(this.cache={},0,{get:function(){return{}}}),this.expando=_.expando+Math.random()}function i(a,b,c){var d;if(void 0===c&&1===a.nodeType)if(d="data-"+b.replace(ua,"-$1").toLowerCase(),c=a.getAttribute(d),"string"==typeof c){try{c="true"===c||"false"!==c&&("null"===c?null:+c+""===c?+c:ta.test(c)?_.parseJSON(c):c)}catch(a){}sa.set(a,b,c)}else c=void 0;return c}function j(){return!0}function k(){return!1}function l(){try{return Z.activeElement}catch(a){}}function m(a,b){return _.nodeName(a,"table")&&_.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function n(a){return a.type=(null!==a.getAttribute("type"))+"/"+a.type,a}function o(a){var b=Ka.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function p(a,b){for(var c=0,d=a.length;c")).appendTo(b.documentElement),b=Na[0].contentDocument,b.write(),b.close(),c=t(a,b),Na.detach()),Oa[a]=c),c}function v(a,b,c){var d,e,f,g,h=a.style;return c=c||Ra(a),c&&(g=c.getPropertyValue(b)||c[b]),c&&(""!==g||_.contains(a.ownerDocument,a)||(g=_.style(a,b)),Qa.test(g)&&Pa.test(b)&&(d=h.width,e=h.minWidth,f=h.maxWidth,h.minWidth=h.maxWidth=h.width=g,g=c.width,h.width=d,h.minWidth=e,h.maxWidth=f)),void 0!==g?g+"":g}function w(a,b){return{get:function(){return a()?void delete this.get:(this.get=b).apply(this,arguments)}}}function x(a,b){if(b in a)return b;for(var c=b[0].toUpperCase()+b.slice(1),d=b,e=Xa.length;e--;)if(b=Xa[e]+c,b in a)return b;return d}function y(a,b,c){var d=Ta.exec(b);return d?Math.max(0,d[1]-(c||0))+(d[2]||"px"):b}function z(a,b,c,d,e){for(var f=c===(d?"border":"content")?4:"width"===b?1:0,g=0;f<4;f+=2)"margin"===c&&(g+=_.css(a,c+wa[f],!0,e)),d?("content"===c&&(g-=_.css(a,"padding"+wa[f],!0,e)),"margin"!==c&&(g-=_.css(a,"border"+wa[f]+"Width",!0,e))):(g+=_.css(a,"padding"+wa[f],!0,e),"padding"!==c&&(g+=_.css(a,"border"+wa[f]+"Width",!0,e)));return g}function A(a,b,c){var d=!0,e="width"===b?a.offsetWidth:a.offsetHeight,f=Ra(a),g="border-box"===_.css(a,"boxSizing",!1,f);if(e<=0||null==e){if(e=v(a,b,f),(e<0||null==e)&&(e=a.style[b]),Qa.test(e))return e;d=g&&(Y.boxSizingReliable()||e===a.style[b]),e=parseFloat(e)||0}return e+z(a,b,c||(g?"border":"content"),d,f)+"px"}function B(a,b){for(var c,d,e,f=[],g=0,h=a.length;g=0&&c=0},isPlainObject:function(a){return"object"===_.type(a)&&!a.nodeType&&!_.isWindow(a)&&!(a.constructor&&!X.call(a.constructor.prototype,"isPrototypeOf"))},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?V[W.call(a)]||"object":typeof a},globalEval:function(a){var b,c=eval;a=_.trim(a),a&&(1===a.indexOf("use strict")?(b=Z.createElement("script"),b.text=a,Z.head.appendChild(b).parentNode.removeChild(b)):c(a))},camelCase:function(a){return a.replace(ba,"ms-").replace(ca,da)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b,d){var e,f=0,g=a.length,h=c(a);if(d){if(h)for(;fw.cacheLength&&delete a[b.shift()],a[c+" "]=d}var b=[];return a}function d(a){return a[N]=!0,a}function e(a){var b=G.createElement("div");try{return!!a(b)}catch(a){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function f(a,b){for(var c=a.split("|"),d=a.length;d--;)w.attrHandle[c[d]]=b}function g(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||W)-(~a.sourceIndex||W);if(d)return d;if(c)for(;c=c.nextSibling;)if(c===b)return-1;return a?1:-1}function h(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function i(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function j(a){return d(function(b){return b=+b,d(function(c,d){for(var e,f=a([],c.length,b),g=f.length;g--;)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function k(a){return a&&typeof a.getElementsByTagName!==V&&a}function l(){}function m(a){for(var b=0,c=a.length,d="";b1?function(b,c,d){for(var e=a.length;e--;)if(!a[e](b,c,d))return!1;return!0}:a[0]}function p(a,c,d){for(var e=0,f=c.length;e-1&&(d[j]=!(g[j]=l))}}else t=q(t===g?t.splice(o,t.length):t),f?f(null,g,t,i):_.apply(g,t)})}function s(a){for(var b,c,d,e=a.length,f=w.relative[a[0].type],g=f||w.relative[" "],h=f?1:0,i=n(function(a){return a===b},g,!0),j=n(function(a){return ba.call(b,a)>-1},g,!0),k=[function(a,c,d){return!f&&(d||c!==C)||((b=c).nodeType?i(a,c,d):j(a,c,d))}];h1&&o(k),h>1&&m(a.slice(0,h-1).concat({value:" "===a[h-2].type?"*":""})).replace(ia,"$1"),c,h0,f=a.length>0,g=function(d,g,h,i,j){var k,l,m,n=0,o="0",p=d&&[],r=[],s=C,t=d||f&&w.find.TAG("*",j),u=P+=null==s?1:Math.random()||.1,v=t.length;for(j&&(C=g!==G&&g);o!==v&&null!=(k=t[o]);o++){if(f&&k){for(l=0;m=a[l++];)if(m(k,g,h)){i.push(k);break}j&&(P=u)}e&&((k=!m&&k)&&n--,d&&p.push(k))}if(n+=o,e&&o!==n){for(l=0;m=c[l++];)m(p,r,g,h);if(d){if(n>0)for(;o--;)p[o]||r[o]||(r[o]=Z.call(i));r=q(r)}_.apply(i,r),j&&!d&&r.length>0&&n+c.length>1&&b.uniqueSort(i)}return j&&(P=u,C=s),p};return e?d(g):g}var u,v,w,x,y,z,A,B,C,D,E,F,G,H,I,J,K,L,M,N="sizzle"+-new Date,O=a.document,P=0,Q=0,R=c(),S=c(),T=c(),U=function(a,b){return a===b&&(E=!0),0},V="undefined",W=1<<31,X={}.hasOwnProperty,Y=[],Z=Y.pop,$=Y.push,_=Y.push,aa=Y.slice,ba=Y.indexOf||function(a){for(var b=0,c=this.length;b+~]|"+da+")"+da+"*"),la=new RegExp("="+da+"*([^\\]'\"]*?)"+da+"*\\]","g"),ma=new RegExp(ha),na=new RegExp("^"+fa+"$"),oa={ID:new RegExp("^#("+ea+")"),CLASS:new RegExp("^\\.("+ea+")"),TAG:new RegExp("^("+ea.replace("w","w*")+")"),ATTR:new RegExp("^"+ga),PSEUDO:new RegExp("^"+ha),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+da+"*(even|odd|(([+-]|)(\\d*)n|)"+da+"*(?:([+-]|)"+da+"*(\\d+)|))"+da+"*\\)|)","i"),bool:new RegExp("^(?:"+ca+")$","i"),needsContext:new RegExp("^"+da+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+da+"*((?:-\\d)?\\d*)"+da+"*\\)|)(?=[^-]|$)","i")},pa=/^(?:input|select|textarea|button)$/i,qa=/^h\d$/i,ra=/^[^{]+\{\s*\[native \w/,sa=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ta=/[+~]/,ua=/'|\\/g,va=new RegExp("\\\\([\\da-f]{1,6}"+da+"?|("+da+")|.)","ig"),wa=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:d<0?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)};try{_.apply(Y=aa.call(O.childNodes),O.childNodes),Y[O.childNodes.length].nodeType}catch(a){_={apply:Y.length?function(a,b){$.apply(a,aa.call(b))}:function(a,b){for(var c=a.length,d=0;a[c++]=b[d++];);a.length=c-1}}}v=b.support={},y=b.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return!!b&&"HTML"!==b.nodeName},F=b.setDocument=function(a){var b,c=a?a.ownerDocument||a:O,d=c.defaultView;return c!==G&&9===c.nodeType&&c.documentElement?(G=c,H=c.documentElement,I=!y(c),d&&d!==d.top&&(d.addEventListener?d.addEventListener("unload",function(){F()},!1):d.attachEvent&&d.attachEvent("onunload",function(){F()})),v.attributes=e(function(a){return a.className="i",!a.getAttribute("className")}),v.getElementsByTagName=e(function(a){return a.appendChild(c.createComment("")),!a.getElementsByTagName("*").length}),v.getElementsByClassName=ra.test(c.getElementsByClassName)&&e(function(a){return a.innerHTML="
      ",a.firstChild.className="i",2===a.getElementsByClassName("i").length}),v.getById=e(function(a){return H.appendChild(a).id=N,!c.getElementsByName||!c.getElementsByName(N).length}),v.getById?(w.find.ID=function(a,b){if(typeof b.getElementById!==V&&I){var c=b.getElementById(a);return c&&c.parentNode?[c]:[]}},w.filter.ID=function(a){var b=a.replace(va,wa);return function(a){return a.getAttribute("id")===b}}):(delete w.find.ID,w.filter.ID=function(a){var b=a.replace(va,wa);return function(a){var c=typeof a.getAttributeNode!==V&&a.getAttributeNode("id");return c&&c.value===b}}),w.find.TAG=v.getElementsByTagName?function(a,b){if(typeof b.getElementsByTagName!==V)return b.getElementsByTagName(a)}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){for(;c=f[e++];)1===c.nodeType&&d.push(c);return d}return f},w.find.CLASS=v.getElementsByClassName&&function(a,b){if(typeof b.getElementsByClassName!==V&&I)return b.getElementsByClassName(a)},K=[],J=[],(v.qsa=ra.test(c.querySelectorAll))&&(e(function(a){a.innerHTML="",a.querySelectorAll("[msallowclip^='']").length&&J.push("[*^$]="+da+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||J.push("\\["+da+"*(?:value|"+ca+")"),a.querySelectorAll(":checked").length||J.push(":checked")}),e(function(a){var b=c.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&J.push("name"+da+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||J.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),J.push(",.*:")})),(v.matchesSelector=ra.test(L=H.matches||H.webkitMatchesSelector||H.mozMatchesSelector||H.oMatchesSelector||H.msMatchesSelector))&&e(function(a){v.disconnectedMatch=L.call(a,"div"),L.call(a,"[s!='']:x"),K.push("!=",ha)}),J=J.length&&new RegExp(J.join("|")),K=K.length&&new RegExp(K.join("|")),b=ra.test(H.compareDocumentPosition),M=b||ra.test(H.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)for(;b=b.parentNode;)if(b===a)return!0;return!1},U=b?function(a,b){if(a===b)return E=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!v.sortDetached&&b.compareDocumentPosition(a)===d?a===c||a.ownerDocument===O&&M(O,a)?-1:b===c||b.ownerDocument===O&&M(O,b)?1:D?ba.call(D,a)-ba.call(D,b):0:4&d?-1:1)}:function(a,b){if(a===b)return E=!0,0;var d,e=0,f=a.parentNode,h=b.parentNode,i=[a],j=[b];if(!f||!h)return a===c?-1:b===c?1:f?-1:h?1:D?ba.call(D,a)-ba.call(D,b):0;if(f===h)return g(a,b);for(d=a;d=d.parentNode;)i.unshift(d);for(d=b;d=d.parentNode;)j.unshift(d);for(;i[e]===j[e];)e++;return e?g(i[e],j[e]):i[e]===O?-1:j[e]===O?1:0},c):G},b.matches=function(a,c){return b(a,null,null,c)},b.matchesSelector=function(a,c){if((a.ownerDocument||a)!==G&&F(a),c=c.replace(la,"='$1']"),v.matchesSelector&&I&&(!K||!K.test(c))&&(!J||!J.test(c)))try{var d=L.call(a,c);if(d||v.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(a){}return b(c,G,null,[a]).length>0},b.contains=function(a,b){return(a.ownerDocument||a)!==G&&F(a),M(a,b)},b.attr=function(a,b){(a.ownerDocument||a)!==G&&F(a);var c=w.attrHandle[b.toLowerCase()],d=c&&X.call(w.attrHandle,b.toLowerCase())?c(a,b,!I):void 0;return void 0!==d?d:v.attributes||!I?a.getAttribute(b):(d=a.getAttributeNode(b))&&d.specified?d.value:null},b.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},b.uniqueSort=function(a){var b,c=[],d=0,e=0;if(E=!v.detectDuplicates,D=!v.sortStable&&a.slice(0),a.sort(U),E){for(;b=a[e++];)b===a[e]&&(d=c.push(e));for(;d--;)a.splice(c[d],1)}return D=null,a},x=b.getText=function(a){var b,c="",d=0,e=a.nodeType;if(e){if(1===e||9===e||11===e){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=x(a)}else if(3===e||4===e)return a.nodeValue}else for(;b=a[d++];)c+=x(b);return c},w=b.selectors={cacheLength:50,createPseudo:d,match:oa,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(va,wa),a[3]=(a[3]||a[4]||a[5]||"").replace(va,wa),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||b.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&b.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return oa.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&ma.test(c)&&(b=z(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(va,wa).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=R[a+" "];return b||(b=new RegExp("(^|"+da+")"+a+"("+da+"|$)"))&&R(a,function(a){return b.test("string"==typeof a.className&&a.className||typeof a.getAttribute!==V&&a.getAttribute("class")||"")})},ATTR:function(a,c,d){return function(e){var f=b.attr(e,a);return null==f?"!="===c:!c||(f+="","="===c?f===d:"!="===c?f!==d:"^="===c?d&&0===f.indexOf(d):"*="===c?d&&f.indexOf(d)>-1:"$="===c?d&&f.slice(-d.length)===d:"~="===c?(" "+f+" ").indexOf(d)>-1:"|="===c&&(f===d||f.slice(0,d.length+1)===d+"-"))}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h;if(q){if(f){for(;p;){for(l=b;l=l[p];)if(h?l.nodeName.toLowerCase()===r:1===l.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){for(k=q[N]||(q[N]={}),j=k[a]||[],n=j[0]===P&&j[1],m=j[0]===P&&j[2],l=n&&q.childNodes[n];l=++n&&l&&l[p]||(m=n=0)||o.pop();)if(1===l.nodeType&&++m&&l===b){k[a]=[P,n,m];break}}else if(s&&(j=(b[N]||(b[N]={}))[a])&&j[0]===P)m=j[1];else for(;(l=++n&&l&&l[p]||(m=n=0)||o.pop())&&((h?l.nodeName.toLowerCase()!==r:1!==l.nodeType)||!++m||(s&&((l[N]||(l[N]={}))[a]=[P,m]),l!==b)););return m-=e,m===d||m%d===0&&m/d>=0}}},PSEUDO:function(a,c){var e,f=w.pseudos[a]||w.setFilters[a.toLowerCase()]||b.error("unsupported pseudo: "+a);return f[N]?f(c):f.length>1?(e=[a,a,"",c],w.setFilters.hasOwnProperty(a.toLowerCase())?d(function(a,b){for(var d,e=f(a,c),g=e.length;g--;)d=ba.call(a,e[g]),a[d]=!(b[d]=e[g])}):function(a){return f(a,0,e)}):f}},pseudos:{not:d(function(a){var b=[],c=[],e=A(a.replace(ia,"$1"));return e[N]?d(function(a,b,c,d){for(var f,g=e(a,null,d,[]),h=a.length;h--;)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,d,f){return b[0]=a,e(b,null,f,c),!c.pop()}}),has:d(function(a){return function(c){return b(a,c).length>0}}),contains:d(function(a){return function(b){return(b.textContent||b.innerText||x(b)).indexOf(a)>-1}}),lang:d(function(a){return na.test(a||"")||b.error("unsupported lang: "+a),a=a.replace(va,wa).toLowerCase(),function(b){var c;do if(c=I?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===H},focus:function(a){return a===G.activeElement&&(!G.hasFocus||G.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!w.pseudos.empty(a)},header:function(a){return qa.test(a.nodeName)},input:function(a){return pa.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:j(function(){return[0]}),last:j(function(a,b){return[b-1]}),eq:j(function(a,b,c){return[c<0?c+b:c]}),even:j(function(a,b){for(var c=0;c=0;)a.push(d);return a}),gt:j(function(a,b,c){for(var d=c<0?c+b:c;++d2&&"ID"===(g=f[0]).type&&v.getById&&9===b.nodeType&&I&&w.relative[f[1].type]){if(b=(w.find.ID(g.matches[0].replace(va,wa),b)||[])[0],!b)return c;j&&(b=b.parentNode),a=a.slice(f.shift().value.length)}for(e=oa.needsContext.test(a)?0:f.length;e--&&(g=f[e],!w.relative[h=g.type]);)if((i=w.find[h])&&(d=i(g.matches[0].replace(va,wa),ta.test(f[0].type)&&k(b.parentNode)||b))){if(f.splice(e,1),a=d.length&&m(f),!a)return _.apply(c,d),c;break}}return(j||A(a,l))(d,b,!I,c,ta.test(a)&&k(b.parentNode)||b),c},v.sortStable=N.split("").sort(U).join("")===N,v.detectDuplicates=!!E,F(),v.sortDetached=e(function(a){return 1&a.compareDocumentPosition(G.createElement("div"))}),e(function(a){return a.innerHTML="","#"===a.firstChild.getAttribute("href")})||f("type|href|height|width",function(a,b,c){if(!c)return a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),v.attributes&&e(function(a){return a.innerHTML="",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||f("value",function(a,b,c){if(!c&&"input"===a.nodeName.toLowerCase())return a.defaultValue}),e(function(a){return null==a.getAttribute("disabled")})||f(ca,function(a,b,c){var d;if(!c)return a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),b}(a);_.find=ea,_.expr=ea.selectors,_.expr[":"]=_.expr.pseudos,_.unique=ea.uniqueSort,_.text=ea.getText,_.isXMLDoc=ea.isXML,_.contains=ea.contains;var fa=_.expr.match.needsContext,ga=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,ha=/^.[^:#\[\.,]*$/;_.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?_.find.matchesSelector(d,a)?[d]:[]:_.find.matches(a,_.grep(b,function(a){return 1===a.nodeType}))},_.fn.extend({find:function(a){var b,c=this.length,d=[],e=this;if("string"!=typeof a)return this.pushStack(_(a).filter(function(){for(b=0;b1?_.unique(d):d),d.selector=this.selector?this.selector+" "+a:a,d},filter:function(a){return this.pushStack(d(this,a||[],!1))},not:function(a){return this.pushStack(d(this,a||[],!0))},is:function(a){return!!d(this,"string"==typeof a&&fa.test(a)?_(a):a||[],!1).length}});var ia,ja=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,ka=_.fn.init=function(a,b){var c,d;if(!a)return this;if("string"==typeof a){if(c="<"===a[0]&&">"===a[a.length-1]&&a.length>=3?[null,a,null]:ja.exec(a),!c||!c[1]&&b)return!b||b.jquery?(b||ia).find(a):this.constructor(b).find(a);if(c[1]){if(b=b instanceof _?b[0]:b,_.merge(this,_.parseHTML(c[1],b&&b.nodeType?b.ownerDocument||b:Z,!0)),ga.test(c[1])&&_.isPlainObject(b))for(c in b)_.isFunction(this[c])?this[c](b[c]):this.attr(c,b[c]);return this}return d=Z.getElementById(c[2]),d&&d.parentNode&&(this.length=1,this[0]=d),this.context=Z,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):_.isFunction(a)?"undefined"!=typeof ia.ready?ia.ready(a):a(_):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),_.makeArray(a,this))};ka.prototype=_.fn,ia=_(Z);var la=/^(?:parents|prev(?:Until|All))/,ma={children:!0,contents:!0,next:!0,prev:!0};_.extend({dir:function(a,b,c){for(var d=[],e=void 0!==c;(a=a[b])&&9!==a.nodeType;)if(1===a.nodeType){if(e&&_(a).is(c))break;d.push(a)}return d},sibling:function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c}}),_.fn.extend({has:function(a){var b=_(a,this),c=b.length;return this.filter(function(){for(var a=0;a-1:1===c.nodeType&&_.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?_.unique(f):f)},index:function(a){return a?"string"==typeof a?U.call(_(a),this[0]):U.call(this,a.jquery?a[0]:a):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(_.unique(_.merge(this.get(),_(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}}),_.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return _.dir(a,"parentNode")},parentsUntil:function(a,b,c){return _.dir(a,"parentNode",c)},next:function(a){return e(a,"nextSibling")},prev:function(a){return e(a,"previousSibling")},nextAll:function(a){return _.dir(a,"nextSibling")},prevAll:function(a){return _.dir(a,"previousSibling")},nextUntil:function(a,b,c){return _.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return _.dir(a,"previousSibling",c)},siblings:function(a){return _.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return _.sibling(a.firstChild)},contents:function(a){return a.contentDocument||_.merge([],a.childNodes)}},function(a,b){_.fn[a]=function(c,d){var e=_.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=_.filter(d,e)),this.length>1&&(ma[a]||_.unique(e),la.test(a)&&e.reverse()),this.pushStack(e)}});var na=/\S+/g,oa={};_.Callbacks=function(a){a="string"==typeof a?oa[a]||f(a):_.extend({},a);var b,c,d,e,g,h,i=[],j=!a.once&&[],k=function(f){for(b=a.memory&&f,c=!0,h=e||0,e=0,g=i.length,d=!0;i&&h-1;)i.splice(c,1),d&&(c<=g&&g--,c<=h&&h--)}),this},has:function(a){return a?_.inArray(a,i)>-1:!(!i||!i.length)},empty:function(){return i=[],g=0,this},disable:function(){return i=j=b=void 0,this},disabled:function(){return!i},lock:function(){return j=void 0,b||l.disable(),this},locked:function(){return!j},fireWith:function(a,b){return!i||c&&!j||(b=b||[],b=[a,b.slice?b.slice():b],d?j.push(b):k(b)),this},fire:function(){return l.fireWith(this,arguments),this},fired:function(){return!!c}};return l},_.extend({Deferred:function(a){var b=[["resolve","done",_.Callbacks("once memory"),"resolved"],["reject","fail",_.Callbacks("once memory"),"rejected"],["notify","progress",_.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return _.Deferred(function(c){_.each(b,function(b,f){var g=_.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&_.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?_.extend(a,d):d}},e={};return d.pipe=d.then,_.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b,c,d,e=0,f=R.call(arguments),g=f.length,h=1!==g||a&&_.isFunction(a.promise)?g:0,i=1===h?a:_.Deferred(),j=function(a,c,d){return function(e){c[a]=this,d[a]=arguments.length>1?R.call(arguments):e,d===b?i.notifyWith(c,d):--h||i.resolveWith(c,d)}};if(g>1)for(b=new Array(g),c=new Array(g),d=new Array(g);e0||(pa.resolveWith(Z,[_]),_.fn.triggerHandler&&(_(Z).triggerHandler("ready"),_(Z).off("ready"))))}}),_.ready.promise=function(b){return pa||(pa=_.Deferred(),"complete"===Z.readyState?setTimeout(_.ready):(Z.addEventListener("DOMContentLoaded",g,!1),a.addEventListener("load",g,!1))),pa.promise(b)},_.ready.promise();var qa=_.access=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===_.type(c)){e=!0;for(h in c)_.access(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,_.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(_(a),c)})),b))for(;h1,null,!0)},removeData:function(a){return this.each(function(){sa.remove(this,a)})}}),_.extend({queue:function(a,b,c){var d;if(a)return b=(b||"fx")+"queue",d=ra.get(a,b),c&&(!d||_.isArray(c)?d=ra.access(a,b,_.makeArray(c)):d.push(c)),d||[]},dequeue:function(a,b){b=b||"fx";var c=_.queue(a,b),d=c.length,e=c.shift(),f=_._queueHooks(a,b),g=function(){_.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return ra.get(a,c)||ra.access(a,c,{empty:_.Callbacks("once memory").add(function(){ra.remove(a,[b+"queue",c])})})}}),_.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.lengthx",Y.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue}();var za="undefined";Y.focusinBubbles="onfocusin"in a;var Aa=/^key/,Ba=/^(?:mouse|pointer|contextmenu)|click/,Ca=/^(?:focusinfocus|focusoutblur)$/,Da=/^([^.]*)(?:\.(.+)|)$/;_.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q=ra.get(a);if(q)for(c.handler&&(f=c,c=f.handler,e=f.selector),c.guid||(c.guid=_.guid++),(i=q.events)||(i=q.events={}),(g=q.handle)||(g=q.handle=function(b){return typeof _!==za&&_.event.triggered!==b.type?_.event.dispatch.apply(a,arguments):void 0}),b=(b||"").match(na)||[""],j=b.length;j--;)h=Da.exec(b[j])||[],n=p=h[1],o=(h[2]||"").split(".").sort(),n&&(l=_.event.special[n]||{},n=(e?l.delegateType:l.bindType)||n,l=_.event.special[n]||{},k=_.extend({type:n,origType:p,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&_.expr.match.needsContext.test(e),namespace:o.join(".")},f),(m=i[n])||(m=i[n]=[],m.delegateCount=0,l.setup&&l.setup.call(a,d,o,g)!==!1||a.addEventListener&&a.addEventListener(n,g,!1)),l.add&&(l.add.call(a,k),k.handler.guid||(k.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,k):m.push(k),_.event.global[n]=!0)},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q=ra.hasData(a)&&ra.get(a);if(q&&(i=q.events)){for(b=(b||"").match(na)||[""],j=b.length;j--;)if(h=Da.exec(b[j])||[],n=p=h[1],o=(h[2]||"").split(".").sort(),n){for(l=_.event.special[n]||{},n=(d?l.delegateType:l.bindType)||n,m=i[n]||[],h=h[2]&&new RegExp("(^|\\.)"+o.join("\\.(?:.*\\.|)")+"(\\.|$)"),g=f=m.length;f--;)k=m[f],!e&&p!==k.origType||c&&c.guid!==k.guid||h&&!h.test(k.namespace)||d&&d!==k.selector&&("**"!==d||!k.selector)||(m.splice(f,1),k.selector&&m.delegateCount--,l.remove&&l.remove.call(a,k));g&&!m.length&&(l.teardown&&l.teardown.call(a,o,q.handle)!==!1||_.removeEvent(a,n,q.handle),delete i[n])}else for(n in i)_.event.remove(a,n+b[j],c,d,!0);_.isEmptyObject(i)&&(delete q.handle,ra.remove(a,"events"))}},trigger:function(b,c,d,e){var f,g,h,i,j,k,l,m=[d||Z],n=X.call(b,"type")?b.type:b,o=X.call(b,"namespace")?b.namespace.split("."):[];if(g=h=d=d||Z,3!==d.nodeType&&8!==d.nodeType&&!Ca.test(n+_.event.triggered)&&(n.indexOf(".")>=0&&(o=n.split("."),n=o.shift(),o.sort()),j=n.indexOf(":")<0&&"on"+n,b=b[_.expando]?b:new _.Event(n,"object"==typeof b&&b),b.isTrigger=e?2:3,b.namespace=o.join("."),b.namespace_re=b.namespace?new RegExp("(^|\\.)"+o.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=d),c=null==c?[b]:_.makeArray(c,[b]),l=_.event.special[n]||{},e||!l.trigger||l.trigger.apply(d,c)!==!1)){if(!e&&!l.noBubble&&!_.isWindow(d)){for(i=l.delegateType||n,Ca.test(i+n)||(g=g.parentNode);g;g=g.parentNode)m.push(g),h=g;h===(d.ownerDocument||Z)&&m.push(h.defaultView||h.parentWindow||a)}for(f=0;(g=m[f++])&&!b.isPropagationStopped();)b.type=f>1?i:l.bindType||n,k=(ra.get(g,"events")||{})[b.type]&&ra.get(g,"handle"),k&&k.apply(g,c),k=j&&g[j],k&&k.apply&&_.acceptData(g)&&(b.result=k.apply(g,c),b.result===!1&&b.preventDefault());return b.type=n,e||b.isDefaultPrevented()||l._default&&l._default.apply(m.pop(),c)!==!1||!_.acceptData(d)||j&&_.isFunction(d[n])&&!_.isWindow(d)&&(h=d[j],h&&(d[j]=null),_.event.triggered=n,d[n](),_.event.triggered=void 0,h&&(d[j]=h)),b.result}},dispatch:function(a){a=_.event.fix(a);var b,c,d,e,f,g=[],h=R.call(arguments),i=(ra.get(this,"events")||{})[a.type]||[],j=_.event.special[a.type]||{};if(h[0]=a,a.delegateTarget=this,!j.preDispatch||j.preDispatch.call(this,a)!==!1){for(g=_.event.handlers.call(this,a,i),b=0;(e=g[b++])&&!a.isPropagationStopped();)for(a.currentTarget=e.elem,c=0;(f=e.handlers[c++])&&!a.isImmediatePropagationStopped();)a.namespace_re&&!a.namespace_re.test(f.namespace)||(a.handleObj=f,a.data=f.data,d=((_.event.special[f.origType]||{}).handle||f.handler).apply(e.elem,h),void 0!==d&&(a.result=d)===!1&&(a.preventDefault(),a.stopPropagation()));return j.postDispatch&&j.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&(!a.button||"click"!==a.type))for(;i!==this;i=i.parentNode||this)if(i.disabled!==!0||"click"!==a.type){for(d=[],c=0;c=0:_.find(e,this,null,[i]).length),d[e]&&d.push(f);d.length&&g.push({elem:i,handlers:d})}return h]*)\/>/gi,Fa=/<([\w:]+)/,Ga=/<|&#?\w+;/,Ha=/<(?:script|style|link)/i,Ia=/checked\s*(?:[^=]|=\s*.checked.)/i,Ja=/^$|\/(?:java|ecma)script/i,Ka=/^true\/(.*)/,La=/^\s*\s*$/g,Ma={option:[1,""],thead:[1,"","
      "],col:[2,"","
      "],tr:[2,"","
      "],td:[3,"","
      "],_default:[0,"",""]};Ma.optgroup=Ma.option,Ma.tbody=Ma.tfoot=Ma.colgroup=Ma.caption=Ma.thead,Ma.th=Ma.td,_.extend({clone:function(a,b,c){var d,e,f,g,h=a.cloneNode(!0),i=_.contains(a.ownerDocument,a);if(!(Y.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||_.isXMLDoc(a)))for(g=r(h),f=r(a),d=0,e=f.length;d0&&p(g,!i&&r(a,"script")),h},buildFragment:function(a,b,c,d){for(var e,f,g,h,i,j,k=b.createDocumentFragment(),l=[],m=0,n=a.length;m")+h[2],j=h[0];j--;)f=f.lastChild;_.merge(l,f.childNodes),f=k.firstChild,f.textContent=""}else l.push(b.createTextNode(e));for(k.textContent="",m=0;e=l[m++];)if((!d||_.inArray(e,d)===-1)&&(i=_.contains(e.ownerDocument,e),f=r(k.appendChild(e),"script"),i&&p(f),c))for(j=0;e=f[j++];)Ja.test(e.type||"")&&c.push(e);return k},cleanData:function(a){for(var b,c,d,e,f=_.event.special,g=0;void 0!==(c=a[g]);g++){if(_.acceptData(c)&&(e=c[ra.expando],e&&(b=ra.cache[e]))){if(b.events)for(d in b.events)f[d]?_.event.remove(c,d):_.removeEvent(c,d,b.handle);ra.cache[e]&&delete ra.cache[e]}delete sa.cache[c[sa.expando]]}}}),_.fn.extend({text:function(a){return qa(this,function(a){return void 0===a?_.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=a)})},null,a,arguments.length)},append:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=m(this,a);b.appendChild(a)}})},prepend:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=m(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},remove:function(a,b){for(var c,d=a?_.filter(a,this):this,e=0;null!=(c=d[e]);e++)b||1!==c.nodeType||_.cleanData(r(c)),c.parentNode&&(b&&_.contains(c.ownerDocument,c)&&p(r(c,"script")),c.parentNode.removeChild(c));return this},empty:function(){for(var a,b=0;null!=(a=this[b]);b++)1===a.nodeType&&(_.cleanData(r(a,!1)),a.textContent="");return this},clone:function(a,b){return a=null!=a&&a,b=null==b?a:b,this.map(function(){return _.clone(this,a,b)})},html:function(a){return qa(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a&&1===b.nodeType)return b.innerHTML;if("string"==typeof a&&!Ha.test(a)&&!Ma[(Fa.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Ea,"<$1>");try{for(;c1&&"string"==typeof m&&!Y.checkClone&&Ia.test(m))return this.each(function(c){var d=k.eq(c);p&&(a[0]=m.call(this,c,d.html())),d.domManip(a,b)});if(j&&(c=_.buildFragment(a,this[0].ownerDocument,!1,this),d=c.firstChild,1===c.childNodes.length&&(c=d),d)){for(e=_.map(r(c,"script"),n),f=e.length;i1)},show:function(){return B(this,!0)},hide:function(){return B(this)},toggle:function(a){return"boolean"==typeof a?a?this.show():this.hide():this.each(function(){xa(this)?_(this).show():_(this).hide()})}}),_.Tween=C,C.prototype={constructor:C,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||"swing",this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(_.cssNumber[c]?"":"px")},cur:function(){var a=C.propHooks[this.prop];return a&&a.get?a.get(this):C.propHooks._default.get(this)},run:function(a){var b,c=C.propHooks[this.prop];return this.options.duration?this.pos=b=_.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):this.pos=b=a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):C.propHooks._default.set(this),this}},C.prototype.init.prototype=C.prototype,C.propHooks={_default:{get:function(a){var b;return null==a.elem[a.prop]||a.elem.style&&null!=a.elem.style[a.prop]?(b=_.css(a.elem,a.prop,""),b&&"auto"!==b?b:0):a.elem[a.prop]},set:function(a){_.fx.step[a.prop]?_.fx.step[a.prop](a):a.elem.style&&(null!=a.elem.style[_.cssProps[a.prop]]||_.cssHooks[a.prop])?_.style(a.elem,a.prop,a.now+a.unit):a.elem[a.prop]=a.now}}},C.propHooks.scrollTop=C.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},_.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2}},_.fx=C.prototype.init,_.fx.step={};var Ya,Za,$a=/^(?:toggle|show|hide)$/,_a=new RegExp("^(?:([+-])=|)("+va+")([a-z%]*)$","i"),ab=/queueHooks$/,bb=[G],cb={"*":[function(a,b){var c=this.createTween(a,b),d=c.cur(),e=_a.exec(b),f=e&&e[3]||(_.cssNumber[a]?"":"px"),g=(_.cssNumber[a]||"px"!==f&&+d)&&_a.exec(_.css(c.elem,a)),h=1,i=20;if(g&&g[3]!==f){f=f||g[3],e=e||[],g=+d||1;do h=h||".5",g/=h,_.style(c.elem,a,g+f);while(h!==(h=c.cur()/d)&&1!==h&&--i)}return e&&(g=c.start=+g||+d||0,c.unit=f,c.end=e[1]?g+(e[1]+1)*e[2]:+e[2]),c}]};_.Animation=_.extend(I,{tweener:function(a,b){_.isFunction(a)?(b=a,a=["*"]):a=a.split(" ");for(var c,d=0,e=a.length;d1)},removeAttr:function(a){return this.each(function(){_.removeAttr(this,a)})}}),_.extend({attr:function(a,b,c){var d,e,f=a.nodeType;if(a&&3!==f&&8!==f&&2!==f)return typeof a.getAttribute===za?_.prop(a,b,c):(1===f&&_.isXMLDoc(a)||(b=b.toLowerCase(),d=_.attrHooks[b]||(_.expr.match.bool.test(b)?eb:db)),void 0===c?d&&"get"in d&&null!==(e=d.get(a,b))?e:(e=_.find.attr(a,b),null==e?void 0:e):null!==c?d&&"set"in d&&void 0!==(e=d.set(a,c,b))?e:(a.setAttribute(b,c+""),c):void _.removeAttr(a,b))},removeAttr:function(a,b){var c,d,e=0,f=b&&b.match(na);if(f&&1===a.nodeType)for(;c=f[e++];)d=_.propFix[c]||c,_.expr.match.bool.test(c)&&(a[d]=!1),a.removeAttribute(c)},attrHooks:{type:{set:function(a,b){if(!Y.radioValue&&"radio"===b&&_.nodeName(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}}}}),eb={set:function(a,b,c){return b===!1?_.removeAttr(a,c):a.setAttribute(c,c),c}},_.each(_.expr.match.bool.source.match(/\w+/g),function(a,b){var c=fb[b]||_.find.attr;fb[b]=function(a,b,d){var e,f;return d||(f=fb[b],fb[b]=e,e=null!=c(a,b,d)?b.toLowerCase():null,fb[b]=f),e}});var gb=/^(?:input|select|textarea|button)$/i;_.fn.extend({prop:function(a,b){return qa(this,_.prop,a,b,arguments.length>1)},removeProp:function(a){return this.each(function(){delete this[_.propFix[a]||a]})}}),_.extend({propFix:{for:"htmlFor",class:"className"},prop:function(a,b,c){var d,e,f,g=a.nodeType;if(a&&3!==g&&8!==g&&2!==g)return f=1!==g||!_.isXMLDoc(a),f&&(b=_.propFix[b]||b,e=_.propHooks[b]),void 0!==c?e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:a[b]=c:e&&"get"in e&&null!==(d=e.get(a,b))?d:a[b]},propHooks:{tabIndex:{get:function(a){return a.hasAttribute("tabindex")||gb.test(a.nodeName)||a.href?a.tabIndex:-1}}}}),Y.optSelected||(_.propHooks.selected={get:function(a){var b=a.parentNode;return b&&b.parentNode&&b.parentNode.selectedIndex,null}}),_.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){_.propFix[this.toLowerCase()]=this});var hb=/[\t\r\n\f]/g;_.fn.extend({addClass:function(a){var b,c,d,e,f,g,h="string"==typeof a&&a,i=0,j=this.length;if(_.isFunction(a))return this.each(function(b){_(this).addClass(a.call(this,b,this.className))});if(h)for(b=(a||"").match(na)||[];i=0;)d=d.replace(" "+e+" "," ");g=a?_.trim(d):"",c.className!==g&&(c.className=g)}return this},toggleClass:function(a,b){var c=typeof a;return"boolean"==typeof b&&"string"===c?b?this.addClass(a):this.removeClass(a):_.isFunction(a)?this.each(function(c){_(this).toggleClass(a.call(this,c,this.className,b),b)}):this.each(function(){if("string"===c)for(var b,d=0,e=_(this),f=a.match(na)||[];b=f[d++];)e.hasClass(b)?e.removeClass(b):e.addClass(b);else c!==za&&"boolean"!==c||(this.className&&ra.set(this,"__className__",this.className),this.className=this.className||a===!1?"":ra.get(this,"__className__")||"")})},hasClass:function(a){for(var b=" "+a+" ",c=0,d=this.length;c=0)return!0;return!1}});var ib=/\r/g;_.fn.extend({val:function(a){var b,c,d,e=this[0];{if(arguments.length)return d=_.isFunction(a),this.each(function(c){var e;1===this.nodeType&&(e=d?a.call(this,c,_(this).val()):a,null==e?e="":"number"==typeof e?e+="":_.isArray(e)&&(e=_.map(e,function(a){return null==a?"":a+""})),b=_.valHooks[this.type]||_.valHooks[this.nodeName.toLowerCase()],b&&"set"in b&&void 0!==b.set(this,e,"value")||(this.value=e))});if(e)return b=_.valHooks[e.type]||_.valHooks[e.nodeName.toLowerCase()],b&&"get"in b&&void 0!==(c=b.get(e,"value"))?c:(c=e.value,"string"==typeof c?c.replace(ib,""):null==c?"":c)}}}),_.extend({valHooks:{option:{get:function(a){var b=_.find.attr(a,"value");return null!=b?b:_.trim(_.text(a))}},select:{get:function(a){for(var b,c,d=a.options,e=a.selectedIndex,f="select-one"===a.type||e<0,g=f?null:[],h=f?e+1:d.length,i=e<0?h:f?e:0;i=0)&&(c=!0);return c||(a.selectedIndex=-1),f}}}}),_.each(["radio","checkbox"],function(){_.valHooks[this]={set:function(a,b){if(_.isArray(b))return a.checked=_.inArray(_(a).val(),b)>=0}},Y.checkOn||(_.valHooks[this].get=function(a){return null===a.getAttribute("value")?"on":a.value})}),_.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(a,b){_.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}}),_.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)},bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return 1===arguments.length?this.off(a,"**"):this.off(b,a||"**",c)}});var jb=_.now(),kb=/\?/;_.parseJSON=function(a){return JSON.parse(a+"")},_.parseXML=function(a){var b,c;if(!a||"string"!=typeof a)return null;try{c=new DOMParser,b=c.parseFromString(a,"text/xml")}catch(a){b=void 0}return b&&!b.getElementsByTagName("parsererror").length||_.error("Invalid XML: "+a),b};var lb,mb,nb=/#.*$/,ob=/([?&])_=[^&]*/,pb=/^(.*?):[ \t]*([^\r\n]*)$/gm,qb=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,rb=/^(?:GET|HEAD)$/,sb=/^\/\//,tb=/^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/,ub={},vb={},wb="*/".concat("*");try{mb=location.href}catch(a){mb=Z.createElement("a"),mb.href="",mb=mb.href}lb=tb.exec(mb.toLowerCase())||[],_.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:mb,type:"GET",isLocal:qb.test(lb[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":wb,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":_.parseJSON,"text xml":_.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?L(L(a,_.ajaxSettings),b):L(_.ajaxSettings,a)},ajaxPrefilter:J(ub),ajaxTransport:J(vb),ajax:function(a,b){function c(a,b,c,g){var i,k,r,s,u,w=b;2!==t&&(t=2,h&&clearTimeout(h),d=void 0,f=g||"",v.readyState=a>0?4:0,i=a>=200&&a<300||304===a,c&&(s=M(l,v,c)),s=N(l,s,v,i),i?(l.ifModified&&(u=v.getResponseHeader("Last-Modified"),u&&(_.lastModified[e]=u),u=v.getResponseHeader("etag"),u&&(_.etag[e]=u)),204===a||"HEAD"===l.type?w="nocontent":304===a?w="notmodified":(w=s.state,k=s.data,r=s.error,i=!r)):(r=w,!a&&w||(w="error",a<0&&(a=0))),v.status=a,v.statusText=(b||w)+"",i?o.resolveWith(m,[k,w,v]):o.rejectWith(m,[v,w,r]),v.statusCode(q),q=void 0,j&&n.trigger(i?"ajaxSuccess":"ajaxError",[v,l,i?k:r]),p.fireWith(m,[v,w]),j&&(n.trigger("ajaxComplete",[v,l]),--_.active||_.event.trigger("ajaxStop")))}"object"==typeof a&&(b=a,a=void 0),b=b||{};var d,e,f,g,h,i,j,k,l=_.ajaxSetup({},b),m=l.context||l,n=l.context&&(m.nodeType||m.jquery)?_(m):_.event,o=_.Deferred(),p=_.Callbacks("once memory"),q=l.statusCode||{},r={},s={},t=0,u="canceled",v={readyState:0,getResponseHeader:function(a){var b;if(2===t){if(!g)for(g={};b=pb.exec(f);)g[b[1].toLowerCase()]=b[2];b=g[a.toLowerCase()]}return null==b?null:b},getAllResponseHeaders:function(){return 2===t?f:null},setRequestHeader:function(a,b){var c=a.toLowerCase();return t||(a=s[c]=s[c]||a,r[a]=b),this},overrideMimeType:function(a){return t||(l.mimeType=a),this},statusCode:function(a){var b;if(a)if(t<2)for(b in a)q[b]=[q[b],a[b]];else v.always(a[v.status]);return this},abort:function(a){var b=a||u;return d&&d.abort(b),c(0,b),this}};if(o.promise(v).complete=p.add,v.success=v.done,v.error=v.fail,l.url=((a||l.url||mb)+"").replace(nb,"").replace(sb,lb[1]+"//"),l.type=b.method||b.type||l.method||l.type,l.dataTypes=_.trim(l.dataType||"*").toLowerCase().match(na)||[""],null==l.crossDomain&&(i=tb.exec(l.url.toLowerCase()),l.crossDomain=!(!i||i[1]===lb[1]&&i[2]===lb[2]&&(i[3]||("http:"===i[1]?"80":"443"))===(lb[3]||("http:"===lb[1]?"80":"443")))),l.data&&l.processData&&"string"!=typeof l.data&&(l.data=_.param(l.data,l.traditional)),K(ub,l,b,v),2===t)return v;j=l.global,j&&0===_.active++&&_.event.trigger("ajaxStart"),l.type=l.type.toUpperCase(),l.hasContent=!rb.test(l.type),e=l.url,l.hasContent||(l.data&&(e=l.url+=(kb.test(e)?"&":"?")+l.data,delete l.data),l.cache===!1&&(l.url=ob.test(e)?e.replace(ob,"$1_="+jb++):e+(kb.test(e)?"&":"?")+"_="+jb++)),l.ifModified&&(_.lastModified[e]&&v.setRequestHeader("If-Modified-Since",_.lastModified[e]),_.etag[e]&&v.setRequestHeader("If-None-Match",_.etag[e])),(l.data&&l.hasContent&&l.contentType!==!1||b.contentType)&&v.setRequestHeader("Content-Type",l.contentType),v.setRequestHeader("Accept",l.dataTypes[0]&&l.accepts[l.dataTypes[0]]?l.accepts[l.dataTypes[0]]+("*"!==l.dataTypes[0]?", "+wb+"; q=0.01":""):l.accepts["*"]);for(k in l.headers)v.setRequestHeader(k,l.headers[k]);if(l.beforeSend&&(l.beforeSend.call(m,v,l)===!1||2===t))return v.abort();u="abort";for(k in{success:1,error:1,complete:1})v[k](l[k]);if(d=K(vb,l,b,v)){v.readyState=1,j&&n.trigger("ajaxSend",[v,l]),l.async&&l.timeout>0&&(h=setTimeout(function(){v.abort("timeout")},l.timeout));try{t=1,d.send(r,c)}catch(a){if(!(t<2))throw a;c(-1,a)}}else c(-1,"No Transport");return v},getJSON:function(a,b,c){return _.get(a,b,c,"json")},getScript:function(a,b){return _.get(a,void 0,b,"script")}}),_.each(["get","post"],function(a,b){_[b]=function(a,c,d,e){return _.isFunction(c)&&(e=e||d,d=c,c=void 0),_.ajax({url:a,type:b,dataType:e,data:c,success:d})}}),_.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(a,b){_.fn[b]=function(a){return this.on(b,a)}}),_._evalUrl=function(a){return _.ajax({url:a,type:"GET",dataType:"script",async:!1,global:!1,throws:!0})},_.fn.extend({wrapAll:function(a){var b;return _.isFunction(a)?this.each(function(b){_(this).wrapAll(a.call(this,b))}):(this[0]&&(b=_(a,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){for(var a=this;a.firstElementChild;)a=a.firstElementChild;return a}).append(this)),this)},wrapInner:function(a){return _.isFunction(a)?this.each(function(b){_(this).wrapInner(a.call(this,b))}):this.each(function(){var b=_(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=_.isFunction(a);return this.each(function(c){_(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){_.nodeName(this,"body")||_(this).replaceWith(this.childNodes)}).end()}}),_.expr.filters.hidden=function(a){return a.offsetWidth<=0&&a.offsetHeight<=0},_.expr.filters.visible=function(a){return!_.expr.filters.hidden(a)};var xb=/%20/g,yb=/\[\]$/,zb=/\r?\n/g,Ab=/^(?:submit|button|image|reset|file)$/i,Bb=/^(?:input|select|textarea|keygen)/i;_.param=function(a,b){var c,d=[],e=function(a,b){b=_.isFunction(b)?b():null==b?"":b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};if(void 0===b&&(b=_.ajaxSettings&&_.ajaxSettings.traditional),_.isArray(a)||a.jquery&&!_.isPlainObject(a))_.each(a,function(){e(this.name,this.value)});else for(c in a)O(c,a[c],b,e);return d.join("&").replace(xb,"+")},_.fn.extend({serialize:function(){return _.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=_.prop(this,"elements");return a?_.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!_(this).is(":disabled")&&Bb.test(this.nodeName)&&!Ab.test(a)&&(this.checked||!ya.test(a))}).map(function(a,b){var c=_(this).val();return null==c?null:_.isArray(c)?_.map(c,function(a){return{name:b.name,value:a.replace(zb,"\r\n")}}):{name:b.name,value:c.replace(zb,"\r\n")}}).get()}}),_.ajaxSettings.xhr=function(){try{return new XMLHttpRequest}catch(a){}};var Cb=0,Db={},Eb={0:200,1223:204},Fb=_.ajaxSettings.xhr();a.ActiveXObject&&_(a).on("unload",function(){for(var a in Db)Db[a]()}),Y.cors=!!Fb&&"withCredentials"in Fb,Y.ajax=Fb=!!Fb,_.ajaxTransport(function(a){var b;if(Y.cors||Fb&&!a.crossDomain)return{send:function(c,d){var e,f=a.xhr(),g=++Cb;if(f.open(a.type,a.url,a.async,a.username,a.password),a.xhrFields)for(e in a.xhrFields)f[e]=a.xhrFields[e];a.mimeType&&f.overrideMimeType&&f.overrideMimeType(a.mimeType),a.crossDomain||c["X-Requested-With"]||(c["X-Requested-With"]="XMLHttpRequest");for(e in c)f.setRequestHeader(e,c[e]);b=function(a){return function(){b&&(delete Db[g],b=f.onload=f.onerror=null,"abort"===a?f.abort():"error"===a?d(f.status,f.statusText):d(Eb[f.status]||f.status,f.statusText,"string"==typeof f.responseText?{text:f.responseText}:void 0,f.getAllResponseHeaders()))}},f.onload=b(),f.onerror=b("error"),b=Db[g]=b("abort");try{f.send(a.hasContent&&a.data||null)}catch(a){if(b)throw a}},abort:function(){b&&b()}}}),_.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/(?:java|ecma)script/},converters:{"text script":function(a){return _.globalEval(a),a}}}),_.ajaxPrefilter("script",function(a){void 0===a.cache&&(a.cache=!1),a.crossDomain&&(a.type="GET")}),_.ajaxTransport("script",function(a){if(a.crossDomain){var b,c;return{send:function(d,e){b=_(" From 48b851ba763e29e9fc63ebf4cf9f614815f0ce19 Mon Sep 17 00:00:00 2001 From: "windhamwong@nva-hk.com" Date: Wed, 14 Jun 2017 15:30:14 +0100 Subject: [PATCH 09/20] Fixing issues on packing images into build #webpack #base64 #loader --- Gruntfile.js | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/Gruntfile.js b/Gruntfile.js index c3b0e49f..4b9b680c 100755 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -206,14 +206,14 @@ module.exports = function (grunt) { limit: 10000 } }, - { // First party images are saved as files to be cached - test: /\.(png|jpg|gif|svg)$/, - exclude: /node_modules/, - loader: "file-loader", - options: { - name: "images/[name].[ext]" - } - }, + // { // First party images are saved as files to be cached + // test: /\.(png|jpg|gif|svg)$/, + // exclude: /node_modules/, + // loader: "file-loader", + // options: { + // name: "images/[name].[ext]" + // } + // }, { // Third party images are inlined test: /\.(png|jpg|gif|svg)$/, exclude: /web\/static/, @@ -321,7 +321,7 @@ module.exports = function (grunt) { }, src: "build/prod/index.html", dest: "build/prod/index.html" - } + }, }, chmod: { build: { From b9d33c0618093b58603814c1499178d8feb81cda Mon Sep 17 00:00:00 2001 From: "windhamwong@nva-hk.com" Date: Tue, 4 Jul 2017 14:30:34 +0100 Subject: [PATCH 10/20] HTTP Gzip Decrypt working --- package.json | 1 + src/core/Utils.js | 20 ++++++++++++++++++++ src/core/config/Categories.js | 1 + src/core/config/OperationConfig.js | 7 +++++++ src/core/operations/Compress.js | 21 +++++++++++++++++++++ 5 files changed, 50 insertions(+) diff --git a/package.json b/package.json index 45e2dd79..006d6165 100644 --- a/package.json +++ b/package.json @@ -80,6 +80,7 @@ "lodash": "^4.17.4", "moment": "^2.17.1", "moment-timezone": "^0.5.11", + "pako": "^1.0.5", "sladex-blowfish": "^0.8.1", "sortablejs": "^1.5.1", "split.js": "^1.2.0", diff --git a/src/core/Utils.js b/src/core/Utils.js index 9b0d2a30..6e615efb 100755 --- a/src/core/Utils.js +++ b/src/core/Utils.js @@ -344,6 +344,26 @@ const Utils = { }, + /** + * Translates an array of bytes to a hex string. + * + * @param {byteArray} byteArray + * @returns {string} + * + * @example + * // returns "fe09a7" + * Utils.byteArrayToHex([0xfe, 0x09, 0xa7]); + */ + byteArrayToHexNoSpace: function(byteArray) { + if (!byteArray) return ""; + let hexStr = ""; + for (let i = 0; i < byteArray.length; i++) { + hexStr += Utils.hex(byteArray[i]); + } + return hexStr.slice(0, hexStr.length-1); + }, + + /** * Converts a string to a byte array. * Treats the string as UTF-8 if any values are over 255. diff --git a/src/core/config/Categories.js b/src/core/config/Categories.js index e31bbc60..a99e39f2 100755 --- a/src/core/config/Categories.js +++ b/src/core/config/Categories.js @@ -131,6 +131,7 @@ const Categories = [ ops: [ "HTTP request", "Strip HTTP headers", + "HTTP gzip decrypt", "Parse User Agent", "Parse IP range", "Parse IPv6 address", diff --git a/src/core/config/OperationConfig.js b/src/core/config/OperationConfig.js index b378854c..d1b5d835 100755 --- a/src/core/config/OperationConfig.js +++ b/src/core/config/OperationConfig.js @@ -1676,6 +1676,13 @@ const OperationConfig = { outputType: "string", args: [] }, + "HTTP gzip decrypt": { + description: "Decrypts Gzip payload from a request or response and returning plaintext of the header and decrypted payload.", + run: Compress.runHttpGzip, + inputType: "byteArray", + outputType: "byteArray", + args: [] + }, "Parse User Agent": { description: "Attempts to identify and categorise information contained in a user-agent string.", run: HTTP.runParseUserAgent, diff --git a/src/core/operations/Compress.js b/src/core/operations/Compress.js index 020d40cf..22414247 100755 --- a/src/core/operations/Compress.js +++ b/src/core/operations/Compress.js @@ -5,6 +5,7 @@ import zlibAndGzip from "zlibjs/bin/zlib_and_gzip.min"; import zip from "zlibjs/bin/zip.min"; import unzip from "zlibjs/bin/unzip.min"; import bzip2 from "exports-loader?bzip2!../lib/bzip2.js"; +import pako from "pako/index.js"; const Zlib = { RawDeflate: rawdeflate.Zlib.RawDeflate, @@ -254,6 +255,26 @@ const Compress = { }, + /** + * HTTP Gzip operation. + * + * @param {byteArray} input + * @param {Object[]} args + * @returns {byteArray} + */ + runHttpGzip: function(input, args) { + input = Utils.byteArrayToHexNoSpace(input); + + let regexStr = /1f8b080[0-8][0-9a-f]{12}/; + let gzipPos = input.search(regexStr); + let plainData = input.substr(0, gzipPos); + let gzipData = input.substr(gzipPos); + + gzipData = Utils.hexToByteArray(gzipData); + return Utils.hexToByteArray(plainData).concat(Array.prototype.slice.call(pako.ungzip(gzipData))); + }, + + /** * @constant * @default From 6e81bb71fc7b912c89e1025e9e3e1fbae50b95bb Mon Sep 17 00:00:00 2001 From: Windham Wong Date: Tue, 4 Jul 2017 15:53:54 +0100 Subject: [PATCH 11/20] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 35ec36b6..167436d3 100755 --- a/README.md +++ b/README.md @@ -13,10 +13,10 @@ This is a fork of original CyberChef by GCHQ. This project has implemented my ow - e.g. chr(33) to ! - This operation supports char() and chr() - Combining the usage of **From 0x[Hex]** and **From char(hex)** can decode chr(0x3333) to ! +- operation **HTTP gzip decrypt**: Decrypt gzip payload in HTTP ## Todo -- Operation GZip HTTP data - Operation SQL comment strip function - Adding more support to char(hex, hex) - Adding support of themes From 8ce8fac26cb017cbba6468956bc54f972743ce62 Mon Sep 17 00:00:00 2001 From: "windhamwong@nva-hk.com" Date: Wed, 12 Jul 2017 13:48:08 +0100 Subject: [PATCH 12/20] HTTP Gzip will search for gzip, otherwise return the original message. --- src/core/operations/Compress.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/core/operations/Compress.js b/src/core/operations/Compress.js index 22414247..2f4fe653 100755 --- a/src/core/operations/Compress.js +++ b/src/core/operations/Compress.js @@ -267,6 +267,7 @@ const Compress = { let regexStr = /1f8b080[0-8][0-9a-f]{12}/; let gzipPos = input.search(regexStr); + if (gzipPos == -1) {return Utils.hexToByteArray(input);} let plainData = input.substr(0, gzipPos); let gzipData = input.substr(gzipPos); From 93d47630b8ae8fff8b102503963afd31e5511e77 Mon Sep 17 00:00:00 2001 From: "windhamwong@nva-hk.com" Date: Thu, 13 Jul 2017 08:42:38 +0100 Subject: [PATCH 13/20] char() operation now supports multiple values inside bracket. i.e. CHAR(45,120,49,45,81,45) --- src/core/operations/ByteRepr.js | 27 +++++++++++++++------------ 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/src/core/operations/ByteRepr.js b/src/core/operations/ByteRepr.js index 1c877898..eeef5e5f 100755 --- a/src/core/operations/ByteRepr.js +++ b/src/core/operations/ByteRepr.js @@ -53,8 +53,8 @@ const ByteRepr = { const delim = args[0] || "Space"; return Utils.fromHex(input, delim, 2); }, - - + + /** * From 0xHex operation. * @@ -63,7 +63,7 @@ const ByteRepr = { * @returns {byteArray} */ runFrom0xHex: function(input, args) { - var data = input.replace(/0x([0-9a-f]{2,})/ig, + var data = input.replace(/0x([0-9a-f]{2,})/ig, function(match, p1) { if (p1) { return Utils.byteArrayToChars(Utils.fromHex(p1)); @@ -71,8 +71,8 @@ const ByteRepr = { }); return data; }, - - + + /** * From char(hex) operation. * @@ -81,13 +81,16 @@ const ByteRepr = { * @returns {byteArray} */ runFromCharHex: function(input, args) { - var data = input.replace(/cha?r\((\d{1,3})\)/ig, - function(match, p1) { - if (p1) { - return Utils.byteArrayToChars([parseInt(p1)]); - }; - }); - return data; + var re = /cha?r\((((\d{1,3})(,\s?)?)+)\)/ig; + var inner_re = /(\d{1,3}),?/g; + var match, inner_match; + var result = ""; + while ((match = re.exec(input)) != null) { + while ((inner_match = inner_re.exec(match[1])) != null) { + result += Utils.byteArrayToChars([parseInt(inner_match[1])]); + } + } + return input.replace(re, result); }, From 0299f23363800df07cdd6238ce6d1382f4575f31 Mon Sep 17 00:00:00 2001 From: "windhamwong@nva-hk.com" Date: Thu, 13 Jul 2017 15:42:05 +0100 Subject: [PATCH 14/20] Fix bug on char() --- src/core/operations/ByteRepr.js | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/src/core/operations/ByteRepr.js b/src/core/operations/ByteRepr.js index eeef5e5f..bb0b8616 100755 --- a/src/core/operations/ByteRepr.js +++ b/src/core/operations/ByteRepr.js @@ -82,15 +82,18 @@ const ByteRepr = { */ runFromCharHex: function(input, args) { var re = /cha?r\((((\d{1,3})(,\s?)?)+)\)/ig; - var inner_re = /(\d{1,3}),?/g; - var match, inner_match; - var result = ""; - while ((match = re.exec(input)) != null) { - while ((inner_match = inner_re.exec(match[1])) != null) { - result += Utils.byteArrayToChars([parseInt(inner_match[1])]); + var inner_re = /(\d{1,3}),?/g + var data = input.replace(re, + function(match, p1) { + if (p1) { + var result = "", inner_match; + while ((inner_match = inner_re.exec(p1)) != null) { + result += Utils.byteArrayToChars([parseInt(inner_match[1])]); + } + return result; } - } - return input.replace(re, result); + }); + return data; }, From a74d97f2a414b3f8532f4653e8725654ca1bc446 Mon Sep 17 00:00:00 2001 From: Windham Wong Date: Wed, 18 Oct 2017 13:22:32 +0100 Subject: [PATCH 15/20] Sync up to GCHQ master HEAD Fix syntax issues in multiple files --- prod_image_list.txt | 26 ++++++++++++++++ src/core/config/Categories.js | 4 +-- src/core/operations/ByteRepr.js | 38 +++++++++++------------ src/core/operations/Compress.js | 4 ++- src/core/operations/nTcpdump.js | 55 ++++++++++++++++----------------- 5 files changed, 76 insertions(+), 51 deletions(-) create mode 100644 prod_image_list.txt diff --git a/prod_image_list.txt b/prod_image_list.txt new file mode 100644 index 00000000..e3ab8d31 --- /dev/null +++ b/prod_image_list.txt @@ -0,0 +1,26 @@ +./src/web/static/images/bug-16x16.png +./src/web/static/images/clean-16x16.png +./src/web/static/images/cook_male-32x32.png +./src/web/static/images/cyberchef-128x128.png +./src/web/static/images/download-24x24.png +./src/web/static/images/erase-16x16.png +./src/web/static/images/favourite-16x16.png +./src/web/static/images/favourite-24x24.png +./src/web/static/images/fork_me.png +./src/web/static/images/gitter-badge.svg +./src/web/static/images/help-16x16.png +./src/web/static/images/help-22x22.png +./src/web/static/images/layout-16x16.png +./src/web/static/images/maximise-16x16.png +./src/web/static/images/open_yellow-16x16.png +./src/web/static/images/open_yellow-24x24.png +./src/web/static/images/recycle-16x16.png +./src/web/static/images/save-22x22.png +./src/web/static/images/save_as-16x16.png +./src/web/static/images/settings-22x22.png +./src/web/static/images/speech-16x16.png +./src/web/static/images/step-16x16.png +./src/web/static/images/switch-16x16.png +./src/web/static/images/thumb_down-16x16.png +./src/web/static/images/thumb_up-16x16.png +./src/web/static/images/undo-16x16.png \ No newline at end of file diff --git a/src/core/config/Categories.js b/src/core/config/Categories.js index 53ba0f91..b5912771 100755 --- a/src/core/config/Categories.js +++ b/src/core/config/Categories.js @@ -28,8 +28,8 @@ const Categories = [ "To Hexdump", "From Hexdump", "From nTcpdump", - "From 0x[Hex]", - "From Char(Hex)", + "From 0x[Hex]", + "From Char(Hex)", "To Hex", "From Hex", "To Charcode", diff --git a/src/core/operations/ByteRepr.js b/src/core/operations/ByteRepr.js index fabe8888..56d8bdf5 100755 --- a/src/core/operations/ByteRepr.js +++ b/src/core/operations/ByteRepr.js @@ -54,44 +54,44 @@ const ByteRepr = { }, - /** + /** * From 0xHex operation. * * @param {string} input (Starting with 0x only in the raw input) * @param {Object[]} args * @returns {byteArray} */ - runFrom0xHex: function(input, args) { - var data = input.replace(/0x([0-9a-f]{2,})/ig, - function(match, p1) { - if (p1) { - return Utils.byteArrayToChars(Utils.fromHex(p1)); - }; - }); - return data; + runFrom0xHex: function(input, args) { + let data = input.replace(/0x([0-9a-f]{2,})/ig, + function(match, p1) { + if (p1) { + return Utils.byteArrayToChars(Utils.fromHex(p1)); + } + }); + return data; }, - /** + /** * From char(hex) operation. * * @param {string} input (Starting with chr or char only in the raw input) * @param {Object[]} args * @returns {byteArray} */ - runFromCharHex: function(input, args) { - var re = /cha?r\((((\d{1,3})(,\s?)?)+)\)/ig; - var inner_re = /(\d{1,3}),?/g - var data = input.replace(re, + runFromCharHex: function(input, args) { + let re = /cha?r\((((\d{1,3})(,\s?)?)+)\)/ig; + let innerRe = /(\d{1,3}),?/g; + let data = input.replace(re, function(match, p1) { if (p1) { - var result = "", inner_match; - while ((inner_match = inner_re.exec(p1)) != null) { - result += Utils.byteArrayToChars([parseInt(inner_match[1])]); + let result = "", innerMatch; + while ((innerMatch = innerRe.exec(p1)) != null) { + result += Utils.byteArrayToChars([parseInt(innerMatch[1], 10)]); } return result; - } - }); + } + }); return data; }, diff --git a/src/core/operations/Compress.js b/src/core/operations/Compress.js index 527b04d6..2614c6f5 100755 --- a/src/core/operations/Compress.js +++ b/src/core/operations/Compress.js @@ -267,7 +267,9 @@ const Compress = { let regexStr = /1f8b080[0-8][0-9a-f]{12}/; let gzipPos = input.search(regexStr); - if (gzipPos == -1) {return Utils.hexToByteArray(input);} + if (gzipPos === -1) { + return Utils.hexToByteArray(input); + } let plainData = input.substr(0, gzipPos); let gzipData = input.substr(gzipPos); diff --git a/src/core/operations/nTcpdump.js b/src/core/operations/nTcpdump.js index bcdabaed..0e6f1f63 100644 --- a/src/core/operations/nTcpdump.js +++ b/src/core/operations/nTcpdump.js @@ -37,19 +37,19 @@ const nTcpdump = { * @returns {string} */ runTo: function(input, args) { - var length = args[0] || nTcpdump.WIDTH; - var upperCase = args[1]; - var includeFinalLength = args[2]; + let length = args[0] || nTcpdump.WIDTH; + let upperCase = args[1]; + let includeFinalLength = args[2]; - var output = "", padding = 2; - for (var i = 0; i < input.length; i += length) { - var buff = input.slice(i, i+length); - var hexa = ""; - for (var j = 0; j < buff.length; j++) { + let output = "", padding = 2; + for (let i = 0; i < input.length; i += length) { + let buff = input.slice(i, i+length); + let hexa = ""; + for (let j = 0; j < buff.length; j++) { hexa += Utils.hex(buff[j], padding) + " "; } - var lineNo = Utils.hex(i, 8); + let lineNo = Utils.hex(i, 8); if (upperCase) { hexa = hexa.toUpperCase(); @@ -77,21 +77,18 @@ const nTcpdump = { * @returns {byteArray} */ runFrom: function(input, args) { - var output = [], - regex = /^\s*(?:0x[\dA-F]{4}:?)?\s*((?:[\dA-F]{4}\s?){1,8})/igm, - regex_header = /^\s*(?:0x0000:){1}\s*((?:[\dA-F]{4}\s?){6})/igm, - block, line; - - while ((block = regex.exec(input))) { - // block[1].replace(regex_header, "0x0000:"); - line = Utils.fromHex(block[1].replace(/-/g, " ")); - for (var i = 0; i < line.length; i++) { + let output = []; + let regex = /^\s*(?:0x[\dA-F]{4}:?)?\s*((?:[\dA-F]{4}\s?){1,8})/igm; + let block = regex.exec(input); + while (block) { + let line = Utils.fromHex(block[1].replace(/-/g, " ")); + for (let i = 0; i < line.length; i++) { output.push(line[i]); } } // Is this a CyberChef hexdump or is it from a different tool? - var width = input.indexOf("\n"); - var w = (width - 13) / 4; + let width = input.indexOf("\n"); + let w = (width - 13) / 4; // w should be the specified width of the hexdump and therefore a round number if (Math.floor(w) !== w || input.indexOf("\r") !== -1 || output.indexOf(13) !== -1) { app.options.attemptHighlight = false; @@ -111,7 +108,7 @@ const nTcpdump = { */ highlightTo: function(pos, args) { // Calculate overall selection - var w = args[0] || 16, + let w = args[0] || 16, width = 14 + (w*4), line = Math.floor(pos[0].start / w), offset = pos[0].start % w, @@ -129,8 +126,8 @@ const nTcpdump = { pos[0].end = line*width + 10 + offset*3 - 1; // Set up multiple selections for bytes - var startLineNum = Math.floor(pos[0].start / width); - var endLineNum = Math.floor(pos[0].end / width); + let startLineNum = Math.floor(pos[0].start / width); + let endLineNum = Math.floor(pos[0].end / width); if (startLineNum === endLineNum) { pos.push(pos[0]); @@ -148,10 +145,10 @@ const nTcpdump = { } // Set up multiple selections for ASCII - var len = pos.length, lineNum = 0; + let len = pos.length, lineNum = 0; start = 0; end = 0; - for (var i = 1; i < len; i++) { + for (let i = 1; i < len; i++) { lineNum = Math.floor(pos[i].start / width); start = (((pos[i].start - (lineNum * width)) - 10) / 3) + (width - w -2) + (lineNum * width); end = (((pos[i].end + 1 - (lineNum * width)) - 10) / 3) + (width - w -2) + (lineNum * width); @@ -171,11 +168,11 @@ const nTcpdump = { * @returns {Object[]} pos */ highlightFrom: function(pos, args) { - var w = args[0] || 16; - var width = 14 + (w*4); + let w = args[0] || 16; + let width = 14 + (w*4); - var line = Math.floor(pos[0].start / width); - var offset = pos[0].start % width; + let line = Math.floor(pos[0].start / width); + let offset = pos[0].start % width; if (offset < 10) { // In line number section pos[0].start = line*w; From a34547dab14558fadff369b1cdabb274ecc89c90 Mon Sep 17 00:00:00 2001 From: Windham Wong Date: Thu, 19 Oct 2017 14:19:16 +0100 Subject: [PATCH 16/20] Sync up and fix issues Renaming from tcpdump into packets category. Adding a new packet category. Update structures --- src/core/config/Categories.js | 9 +- src/core/config/OperationConfig.js | 18 +-- src/core/config/modules/Compression.js | 1 + src/core/config/modules/Default.js | 2 + src/core/config/modules/OpModules.js | 4 +- src/core/config/modules/Packets.js | 19 +++ src/core/operations/Packets.js | 54 +++++++ src/core/operations/nTcpdump.js | 201 ------------------------- 8 files changed, 93 insertions(+), 215 deletions(-) create mode 100644 src/core/config/modules/Packets.js create mode 100644 src/core/operations/Packets.js delete mode 100644 src/core/operations/nTcpdump.js diff --git a/src/core/config/Categories.js b/src/core/config/Categories.js index b5912771..3d48bda3 100755 --- a/src/core/config/Categories.js +++ b/src/core/config/Categories.js @@ -27,7 +27,6 @@ const Categories = [ ops: [ "To Hexdump", "From Hexdump", - "From nTcpdump", "From 0x[Hex]", "From Char(Hex)", "To Hex", @@ -137,7 +136,6 @@ const Categories = [ ops: [ "HTTP request", "Strip HTTP headers", - "HTTP gzip decrypt", "Parse User Agent", "Parse IP range", "Parse IPv6 address", @@ -300,6 +298,13 @@ const Categories = [ "To Kebab case", ] }, + { + name: "Packets", + ops: [ + "From Tcpdump", + "HTTP gzip Decrypt", + ] + }, { name: "Other", ops: [ diff --git a/src/core/config/OperationConfig.js b/src/core/config/OperationConfig.js index 7c9da98b..6e477617 100755 --- a/src/core/config/OperationConfig.js +++ b/src/core/config/OperationConfig.js @@ -36,8 +36,6 @@ import Tidy from "../operations/Tidy.js"; import Unicode from "../operations/Unicode.js"; import URL_ from "../operations/URL.js"; -import nTcpdump from "../operations/nTcpdump.js"; - /** * Type definition for an OpConf. * @@ -501,8 +499,8 @@ const OperationConfig = { ] }, "From 0x[Hex]": { + module: "Default", description: "Converts a hexadecimal byte string back into a its raw value.

      e.g. 0x217e21 becomes the UTF-8 encoded string !~!", - run: ByteRepr.runFrom0xHex, highlight: ByteRepr.highlightFrom, highlightReverse: ByteRepr.highlightTo, inputType: "string", @@ -510,8 +508,8 @@ const OperationConfig = { args: [] }, "From Char(Hex)": { + module: "Default", description: "Converts a hexadecimal byte string back into a its raw value.

      e.g. chr(33) becomes the UTF-8 encoded string !", - run: ByteRepr.runFromCharHex, highlight: ByteRepr.highlightFrom, highlightReverse: ByteRepr.highlightTo, inputType: "string", @@ -675,11 +673,9 @@ const OperationConfig = { } ] }, - "From nTcpdump": { - description: "For Tcpdump conversion only.", - run: nTcpdump.runFrom, - highlight: nTcpdump.highlightFrom, - highlightReverse: nTcpdump.highlightTo, + "From Tcpdump": { + module: "Packets", + description: "[DEPRECATED] Converts Tcpdump hex to string", inputType: "string", outputType: "byteArray", args: [] @@ -1767,9 +1763,9 @@ const OperationConfig = { outputType: "string", args: [] }, - "HTTP gzip decrypt": { + "HTTP gzip Decrypt": { + module: "Compression", description: "Decrypts Gzip payload from a request or response and returning plaintext of the header and decrypted payload.", - run: Compress.runHttpGzip, inputType: "byteArray", outputType: "byteArray", args: [] diff --git a/src/core/config/modules/Compression.js b/src/core/config/modules/Compression.js index aa8d074f..bbe05bfa 100644 --- a/src/core/config/modules/Compression.js +++ b/src/core/config/modules/Compression.js @@ -26,6 +26,7 @@ OpModules.Compression = { "Bzip2 Decompress": Compress.runBzip2Decompress, "Tar": Compress.runTar, "Untar": Compress.runUntar, + "HTTP gzip Decrypt":Compress.runHttpGzip, }; diff --git a/src/core/config/modules/Default.js b/src/core/config/modules/Default.js index 682db223..9a588936 100644 --- a/src/core/config/modules/Default.js +++ b/src/core/config/modules/Default.js @@ -51,6 +51,8 @@ OpModules.Default = { "From Hexdump": Hexdump.runFrom, "To Hex": ByteRepr.runToHex, "From Hex": ByteRepr.runFromHex, + "From 0x[Hex]": ByteRepr.runFrom0xHex, + "From Char(Hex)": ByteRepr.runFromCharHex, "To Octal": ByteRepr.runToOct, "From Octal": ByteRepr.runFromOct, "To Charcode": ByteRepr.runToCharcode, diff --git a/src/core/config/modules/OpModules.js b/src/core/config/modules/OpModules.js index 3f3963c3..b7a9ca2b 100644 --- a/src/core/config/modules/OpModules.js +++ b/src/core/config/modules/OpModules.js @@ -20,6 +20,7 @@ import JSBNModule from "./JSBN.js"; import PublicKeyModule from "./PublicKey.js"; import ShellcodeModule from "./Shellcode.js"; import URLModule from "./URL.js"; +import PacketsModule from "./Packets.js"; Object.assign( OpModules, @@ -35,7 +36,8 @@ Object.assign( JSBNModule, PublicKeyModule, ShellcodeModule, - URLModule + URLModule, + PacketsModule ); export default OpModules; diff --git a/src/core/config/modules/Packets.js b/src/core/config/modules/Packets.js new file mode 100644 index 00000000..88f3d7a8 --- /dev/null +++ b/src/core/config/modules/Packets.js @@ -0,0 +1,19 @@ +import Packets from "../../operations/Packets.js"; + +/** + * Packets module. + * + * Libraries: + * - Utils.js + * + * @author drkna [whytho@email] + * @copyright Crown Copyright 2017 + * @license Apache-2.0 + */ +let OpModules = typeof self === "undefined" ? {} : self.OpModules || {}; + +OpModules.Packets = { + "From Tcpdump": Packets.runFromTcpdump, +}; + +export default OpModules; diff --git a/src/core/operations/Packets.js b/src/core/operations/Packets.js new file mode 100644 index 00000000..4ecdf190 --- /dev/null +++ b/src/core/operations/Packets.js @@ -0,0 +1,54 @@ +import Utils from "../Utils.js"; + + +/** + * Packets operations. + * + * @author drkna [whytho@email] + * @copyright Crown Copyright 2016 + * @license Apache-2.0 + * + * @namespace + */ +const Packets = { + + /** + * @constant + * @default + */ + WIDTH: 16, + /** + * @constant + * @default + */ + UPPER_CASE: false, + /** + * @constant + * @default + */ + INCLUDE_FINAL_LENGTH: false, + + /** + * From Tcpdump Hexstring operation. + * + * @param {string} input + * @param {Object[]} args + * @returns {byteArray} + */ + runFromTcpdump: function(input, args) { + let output = []; + let regex = /^\s*(?:0x[\dA-F]{4}:?)?\s*((?:[\dA-F]{4}\s?){1,8})/igm; + let block = regex.exec(input); + while (block) { + let line = Utils.fromHex(block[1].replace(/-/g, " ")); + for (let i = 0; i < line.length; i++) { + output.push(line[i]); + } + block = regex.exec(input); + } + return output; + }, + +}; + +export default Packets; diff --git a/src/core/operations/nTcpdump.js b/src/core/operations/nTcpdump.js deleted file mode 100644 index 0e6f1f63..00000000 --- a/src/core/operations/nTcpdump.js +++ /dev/null @@ -1,201 +0,0 @@ -/* globals app */ -import Utils from "../Utils.js"; - - -/** - * Hexdump operations. - * - * @author n1474335 [n1474335@gmail.com] - * @copyright Crown Copyright 2016 - * @license Apache-2.0 - * - * @namespace - */ -const nTcpdump = { - - /** - * @constant - * @default - */ - WIDTH: 16, - /** - * @constant - * @default - */ - UPPER_CASE: false, - /** - * @constant - * @default - */ - INCLUDE_FINAL_LENGTH: false, - - /** - * To Hexdump operation. - * - * @param {byteArray} input - * @param {Object[]} args - * @returns {string} - */ - runTo: function(input, args) { - let length = args[0] || nTcpdump.WIDTH; - let upperCase = args[1]; - let includeFinalLength = args[2]; - - let output = "", padding = 2; - for (let i = 0; i < input.length; i += length) { - let buff = input.slice(i, i+length); - let hexa = ""; - for (let j = 0; j < buff.length; j++) { - hexa += Utils.hex(buff[j], padding) + " "; - } - - let lineNo = Utils.hex(i, 8); - - if (upperCase) { - hexa = hexa.toUpperCase(); - lineNo = lineNo.toUpperCase(); - } - - output += lineNo + " " + - Utils.padRight(hexa, (length*(padding+1))) + - " |" + Utils.padRight(Utils.printable(Utils.byteArrayToChars(buff)), buff.length) + "|\n"; - - if (includeFinalLength && i+buff.length === input.length) { - output += Utils.hex(i+buff.length, 8) + "\n"; - } - } - - return output.slice(0, -1); - }, - - - /** - * From Hexdump operation. - * - * @param {string} input - * @param {Object[]} args - * @returns {byteArray} - */ - runFrom: function(input, args) { - let output = []; - let regex = /^\s*(?:0x[\dA-F]{4}:?)?\s*((?:[\dA-F]{4}\s?){1,8})/igm; - let block = regex.exec(input); - while (block) { - let line = Utils.fromHex(block[1].replace(/-/g, " ")); - for (let i = 0; i < line.length; i++) { - output.push(line[i]); - } - } - // Is this a CyberChef hexdump or is it from a different tool? - let width = input.indexOf("\n"); - let w = (width - 13) / 4; - // w should be the specified width of the hexdump and therefore a round number - if (Math.floor(w) !== w || input.indexOf("\r") !== -1 || output.indexOf(13) !== -1) { - app.options.attemptHighlight = false; - } - return output; - }, - - - /** - * Highlight to hexdump - * - * @param {Object[]} pos - * @param {number} pos[].start - * @param {number} pos[].end - * @param {Object[]} args - * @returns {Object[]} pos - */ - highlightTo: function(pos, args) { - // Calculate overall selection - let w = args[0] || 16, - width = 14 + (w*4), - line = Math.floor(pos[0].start / w), - offset = pos[0].start % w, - start = 0, - end = 0; - - pos[0].start = line*width + 10 + offset*3; - - line = Math.floor(pos[0].end / w); - offset = pos[0].end % w; - if (offset === 0) { - line--; - offset = w; - } - pos[0].end = line*width + 10 + offset*3 - 1; - - // Set up multiple selections for bytes - let startLineNum = Math.floor(pos[0].start / width); - let endLineNum = Math.floor(pos[0].end / width); - - if (startLineNum === endLineNum) { - pos.push(pos[0]); - } else { - start = pos[0].start; - end = (startLineNum+1) * width - w - 5; - pos.push({ start: start, end: end }); - while (end < pos[0].end) { - startLineNum++; - start = startLineNum * width + 10; - end = (startLineNum+1) * width - w - 5; - if (end > pos[0].end) end = pos[0].end; - pos.push({ start: start, end: end }); - } - } - - // Set up multiple selections for ASCII - let len = pos.length, lineNum = 0; - start = 0; - end = 0; - for (let i = 1; i < len; i++) { - lineNum = Math.floor(pos[i].start / width); - start = (((pos[i].start - (lineNum * width)) - 10) / 3) + (width - w -2) + (lineNum * width); - end = (((pos[i].end + 1 - (lineNum * width)) - 10) / 3) + (width - w -2) + (lineNum * width); - pos.push({ start: start, end: end }); - } - return pos; - }, - - - /** - * Highlight from hexdump - * - * @param {Object[]} pos - * @param {number} pos[].start - * @param {number} pos[].end - * @param {Object[]} args - * @returns {Object[]} pos - */ - highlightFrom: function(pos, args) { - let w = args[0] || 16; - let width = 14 + (w*4); - - let line = Math.floor(pos[0].start / width); - let offset = pos[0].start % width; - - if (offset < 10) { // In line number section - pos[0].start = line*w; - } else if (offset > 10+(w*3)) { // In ASCII section - pos[0].start = (line+1)*w; - } else { // In byte section - pos[0].start = line*w + Math.floor((offset-10)/3); - } - - line = Math.floor(pos[0].end / width); - offset = pos[0].end % width; - - if (offset < 10) { // In line number section - pos[0].end = line*w; - } else if (offset > 10+(w*3)) { // In ASCII section - pos[0].end = (line+1)*w; - } else { // In byte section - pos[0].end = line*w + Math.ceil((offset-10)/3); - } - - return pos; - }, - -}; - -export default nTcpdump; From 54194f2cc1cc4e4fe19ecc1ea0be5f18209741c4 Mon Sep 17 00:00:00 2001 From: Windham Wong Date: Thu, 19 Oct 2017 15:58:47 +0100 Subject: [PATCH 17/20] New recipe: Strip Ethernet/IP/TCP Header from hexstream --- src/core/config/Categories.js | 1 + src/core/config/OperationConfig.js | 38 +++++++++++++++---- src/core/config/modules/Packets.js | 3 +- src/core/operations/Packets.js | 61 +++++++++++++++++++++--------- 4 files changed, 78 insertions(+), 25 deletions(-) diff --git a/src/core/config/Categories.js b/src/core/config/Categories.js index 3d48bda3..640f864b 100755 --- a/src/core/config/Categories.js +++ b/src/core/config/Categories.js @@ -303,6 +303,7 @@ const Categories = [ ops: [ "From Tcpdump", "HTTP gzip Decrypt", + "Strip TCP Headers", ] }, { diff --git a/src/core/config/OperationConfig.js b/src/core/config/OperationConfig.js index 6e477617..3b866a60 100755 --- a/src/core/config/OperationConfig.js +++ b/src/core/config/OperationConfig.js @@ -35,6 +35,7 @@ import StrUtils from "../operations/StrUtils.js"; import Tidy from "../operations/Tidy.js"; import Unicode from "../operations/Unicode.js"; import URL_ from "../operations/URL.js"; +import Packets from "../operations/Packets.js"; /** * Type definition for an OpConf. @@ -673,13 +674,6 @@ const OperationConfig = { } ] }, - "From Tcpdump": { - module: "Packets", - description: "[DEPRECATED] Converts Tcpdump hex to string", - inputType: "string", - outputType: "byteArray", - args: [] - }, "From Hexdump": { module: "Default", description: "Attempts to convert a hexdump back into raw data. This operation supports many different hexdump variations, but probably not all. Make sure you verify that the data it gives you is correct before continuing analysis.", @@ -3876,6 +3870,36 @@ const OperationConfig = { } ] }, + "From Tcpdump": { + module: "Packets", + description: "[DEPRECATED] Converts Tcpdump hex to string", + inputType: "string", + outputType: "byteArray", + args: [] + }, + "Strip TCP Headers": { + module: "Packets", + description: "Remove selected TCP headers from hexstream", + inputType: "string", + outputType: "string", + args: [ + { + name: "Ethernet Header", + type: "boolean", + value: Packets.STRIP_ETHERNET_HEADER, + }, + { + name: "IP Header", + type: "boolean", + value: Packets.STRIP_IP_HEADER, + }, + { + name: "Ethernet Header", + type: "boolean", + value: Packets.STRIP_TCP_HEADER, + }, + ] + }, }; diff --git a/src/core/config/modules/Packets.js b/src/core/config/modules/Packets.js index 88f3d7a8..97586d00 100644 --- a/src/core/config/modules/Packets.js +++ b/src/core/config/modules/Packets.js @@ -13,7 +13,8 @@ import Packets from "../../operations/Packets.js"; let OpModules = typeof self === "undefined" ? {} : self.OpModules || {}; OpModules.Packets = { - "From Tcpdump": Packets.runFromTcpdump, + "From Tcpdump": Packets.runFromTcpdump, + "Strip TCP Headers": Packets.stripPacketHeader }; export default OpModules; diff --git a/src/core/operations/Packets.js b/src/core/operations/Packets.js index 4ecdf190..181abece 100644 --- a/src/core/operations/Packets.js +++ b/src/core/operations/Packets.js @@ -11,23 +11,6 @@ import Utils from "../Utils.js"; * @namespace */ const Packets = { - - /** - * @constant - * @default - */ - WIDTH: 16, - /** - * @constant - * @default - */ - UPPER_CASE: false, - /** - * @constant - * @default - */ - INCLUDE_FINAL_LENGTH: false, - /** * From Tcpdump Hexstring operation. * @@ -48,7 +31,51 @@ const Packets = { } return output; }, + + + /** + * @constant + * @default + */ + STRIP_ETHERNET_HEADER: true, + + /** + * @constant + * @default + */ + STRIP_IP_HEADER: true, + + /** + * @constant + * @default + */ + STRIP_TCP_HEADER: true, + + /** + * Strip TCP Headersoperation. + * + * @param {string} input + * @param {Object[]} args + * @returns {string} + */ + stripPacketHeader: function(input, args) { + let output = input, + stripEthernet = args[0], + stripIP = args[1], + stripTCP = args[2]; + if (stripEthernet) { + output = output.replace(/^(([0-9a-f]{4} ){6,8}0800 )/igm,''); + } + if (stripIP) { + output = output.replace(/^((45[0-9a-f]{2} ([0-9a-f]{4} ){9}))/igm,''); + } + if (stripTCP) { + output = output.replace(/^([0-9a-f]{4} ){6}((80[0-9a-f]{2} ([0-9a-f]{4} ?){9})|(50[0-9a-f]{2} ([0-9a-f]{4} ?){3}))/igm,''); + } + + return output; + }, }; export default Packets; From 5b9665e8b9066fabbd899ac5b4676491324aa21f Mon Sep 17 00:00:00 2001 From: Windham Wong Date: Thu, 19 Oct 2017 16:07:01 +0100 Subject: [PATCH 18/20] fix bugs --- src/core/config/Categories.js | 2 +- src/core/config/modules/Packets.js | 2 +- src/core/operations/Packets.js | 18 +++++++++--------- 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/src/core/config/Categories.js b/src/core/config/Categories.js index 640f864b..aa1dcb53 100755 --- a/src/core/config/Categories.js +++ b/src/core/config/Categories.js @@ -303,7 +303,7 @@ const Categories = [ ops: [ "From Tcpdump", "HTTP gzip Decrypt", - "Strip TCP Headers", + "Strip TCP Headers", ] }, { diff --git a/src/core/config/modules/Packets.js b/src/core/config/modules/Packets.js index 97586d00..1d441ca4 100644 --- a/src/core/config/modules/Packets.js +++ b/src/core/config/modules/Packets.js @@ -14,7 +14,7 @@ let OpModules = typeof self === "undefined" ? {} : self.OpModules || {}; OpModules.Packets = { "From Tcpdump": Packets.runFromTcpdump, - "Strip TCP Headers": Packets.stripPacketHeader + "Strip TCP Headers": Packets.stripPacketHeader }; export default OpModules; diff --git a/src/core/operations/Packets.js b/src/core/operations/Packets.js index 181abece..602e049d 100644 --- a/src/core/operations/Packets.js +++ b/src/core/operations/Packets.js @@ -31,26 +31,26 @@ const Packets = { } return output; }, - - - /** + + + /** * @constant * @default */ STRIP_ETHERNET_HEADER: true, - + /** * @constant * @default */ STRIP_IP_HEADER: true, - + /** * @constant * @default */ STRIP_TCP_HEADER: true, - + /** * Strip TCP Headersoperation. * @@ -65,13 +65,13 @@ const Packets = { stripTCP = args[2]; if (stripEthernet) { - output = output.replace(/^(([0-9a-f]{4} ){6,8}0800 )/igm,''); + output = output.replace(/^(([0-9a-f]{4} ){6,8}0800 )/igm, ""); } if (stripIP) { - output = output.replace(/^((45[0-9a-f]{2} ([0-9a-f]{4} ){9}))/igm,''); + output = output.replace(/^((45[0-9a-f]{2} ([0-9a-f]{4} ){9}))/igm, ""); } if (stripTCP) { - output = output.replace(/^([0-9a-f]{4} ){6}((80[0-9a-f]{2} ([0-9a-f]{4} ?){9})|(50[0-9a-f]{2} ([0-9a-f]{4} ?){3}))/igm,''); + output = output.replace(/^([0-9a-f]{4} ){6}((80[0-9a-f]{2} ([0-9a-f]{4} ?){9})|(50[0-9a-f]{2} ([0-9a-f]{4} ?){3}))/igm, ""); } return output; From fde87fd95cce30b469d6a2523660504a6f4e4e1e Mon Sep 17 00:00:00 2001 From: Windham Wong Date: Sat, 21 Oct 2017 07:51:03 +0100 Subject: [PATCH 19/20] Gzip decryption now supports 2 libraries and threshold search. Gzip decryption now stop decrypting at the position of plaintext searched by threshold --- src/core/config/OperationConfig.js | 17 +++++++-- src/core/config/modules/Compression.js | 24 ++++++------- src/core/operations/Compress.js | 48 +++++++++++++++++++++++--- 3 files changed, 70 insertions(+), 19 deletions(-) diff --git a/src/core/config/OperationConfig.js b/src/core/config/OperationConfig.js index 3b866a60..6b6e7fa2 100755 --- a/src/core/config/OperationConfig.js +++ b/src/core/config/OperationConfig.js @@ -1759,10 +1759,21 @@ const OperationConfig = { }, "HTTP gzip Decrypt": { module: "Compression", - description: "Decrypts Gzip payload from a request or response and returning plaintext of the header and decrypted payload.", + description: "Decrypts Gzip payload from a request or response and returning plaintext of the header and decrypted payload.

      Arguments:
      Library: The library used for decoding GZIP data.
      Threshold: The threshold value for searching non-GZIP data. It has to be at least 8.", inputType: "byteArray", outputType: "byteArray", - args: [] + args: [ + { + name: "Library", + type: "option", + value: Compress.HTTP_GZIP_OPTION + }, + { + name: "Threshold", + type: "number", + value: Compress.HTTP_GZIP_THRESHOLD + }, + ] }, "Parse User Agent": { module: "HTTP", @@ -3879,7 +3890,7 @@ const OperationConfig = { }, "Strip TCP Headers": { module: "Packets", - description: "Remove selected TCP headers from hexstream", + description: "Remove selected TCP headers from hexstream using Regular Expressions.

      Ethernet Header: /^(([0-9a-f]{4} ){6,8}0800 )/igm
      IP Header: /^((45[0-9a-f]{2} ([0-9a-f]{4} ){9}))/igm
      TCP Header: /^([0-9a-f]{4} ){6}((80[0-9a-f]{2} ([0-9a-f]{4} ?){9})|(50[0-9a-f]{2} ([0-9a-f]{4} ?){3}))/igm", inputType: "string", outputType: "string", args: [ diff --git a/src/core/config/modules/Compression.js b/src/core/config/modules/Compression.js index bbe05bfa..9d55b400 100644 --- a/src/core/config/modules/Compression.js +++ b/src/core/config/modules/Compression.js @@ -15,18 +15,18 @@ import Compress from "../../operations/Compress.js"; let OpModules = typeof self === "undefined" ? {} : self.OpModules || {}; OpModules.Compression = { - "Raw Deflate": Compress.runRawDeflate, - "Raw Inflate": Compress.runRawInflate, - "Zlib Deflate": Compress.runZlibDeflate, - "Zlib Inflate": Compress.runZlibInflate, - "Gzip": Compress.runGzip, - "Gunzip": Compress.runGunzip, - "Zip": Compress.runPkzip, - "Unzip": Compress.runPkunzip, - "Bzip2 Decompress": Compress.runBzip2Decompress, - "Tar": Compress.runTar, - "Untar": Compress.runUntar, - "HTTP gzip Decrypt":Compress.runHttpGzip, + "Raw Deflate": Compress.runRawDeflate, + "Raw Inflate": Compress.runRawInflate, + "Zlib Deflate": Compress.runZlibDeflate, + "Zlib Inflate": Compress.runZlibInflate, + "Gzip": Compress.runGzip, + "Gunzip": Compress.runGunzip, + "Zip": Compress.runPkzip, + "Unzip": Compress.runPkunzip, + "Bzip2 Decompress": Compress.runBzip2Decompress, + "Tar": Compress.runTar, + "Untar": Compress.runUntar, + "HTTP gzip Decrypt": Compress.runHttpGzip, }; diff --git a/src/core/operations/Compress.js b/src/core/operations/Compress.js index 2614c6f5..7748f9d9 100755 --- a/src/core/operations/Compress.js +++ b/src/core/operations/Compress.js @@ -255,6 +255,17 @@ const Compress = { }, + /** + * @constant + * @default + */ + HTTP_GZIP_OPTION: ["pako.js", "zlib.js"], + /** + * @constant + * @default + */ + HTTP_GZIP_THRESHOLD: 8, + /** * HTTP Gzip operation. * @@ -263,18 +274,47 @@ const Compress = { * @returns {byteArray} */ runHttpGzip: function(input, args) { + const library = Compress.HTTP_GZIP_OPTION.indexOf(args[0]); + let threshold = Compress.HTTP_GZIP_THRESHOLD; + if (args[1] > 8) { + threshold = args[1]; + } input = Utils.byteArrayToHexNoSpace(input); + let output = input; let regexStr = /1f8b080[0-8][0-9a-f]{12}/; let gzipPos = input.search(regexStr); if (gzipPos === -1) { return Utils.hexToByteArray(input); } - let plainData = input.substr(0, gzipPos); - let gzipData = input.substr(gzipPos); - gzipData = Utils.hexToByteArray(gzipData); - return Utils.hexToByteArray(plainData).concat(Array.prototype.slice.call(pako.ungzip(gzipData))); + while (gzipPos !== -1) { + output = input; + + let plainData = output.substr(0, gzipPos); + let gzipData = output.substr(gzipPos); + let httpDataAfter = ""; + + let httpDataPosRegex = new RegExp("/((3[0-9])|(6[0-9a-f])|(7[0-9a])|(4[0-9a-f])|(5[0-9a])|(2[e-f])|(2b)|(20)){" + threshold + "}/"); + let httpDataPos = gzipData.search(httpDataPosRegex); + if (httpDataPos !== -1) { + httpDataAfter = gzipData.substr(httpDataPos); + gzipData = gzipData.substr(0, httpDataPos); + } + + console.log(httpDataPos); + gzipData = Utils.hexToByteArray(gzipData); + if (library === 0) { + output = Utils.hexToByteArray(plainData).concat(Array.prototype.slice.call(pako.inflate(gzipData))).concat(Utils.hexToByteArray(httpDataAfter)); + } else if (library === 1) { + let gzipDataRaw = new Zlib.Gunzip(gzipData); + output = Utils.hexToByteArray(plainData).concat(Array.prototype.slice.call(gzipDataRaw.decompress())).concat(Utils.hexToByteArray("0d0a 0d0a")).concat(Utils.hexToByteArray(httpDataAfter)); + } + + input = Utils.byteArrayToHexNoSpace(output); + gzipPos = input.search(regexStr); + } + return output; }, From d5aca252a95baf81791ef947f66e43adffb2e4a4 Mon Sep 17 00:00:00 2001 From: Windham Wong Date: Sat, 21 Oct 2017 07:58:50 +0100 Subject: [PATCH 20/20] Fix linebreak-style Strip TCP Header now supports Wireshark format --- src/core/operations/Packets.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/core/operations/Packets.js b/src/core/operations/Packets.js index 602e049d..b5825003 100644 --- a/src/core/operations/Packets.js +++ b/src/core/operations/Packets.js @@ -65,13 +65,13 @@ const Packets = { stripTCP = args[2]; if (stripEthernet) { - output = output.replace(/^(([0-9a-f]{4} ){6,8}0800 )/igm, ""); + output = output.replace(/^(([0-9a-f]{4} ?){6,8}0800 ?)/igm, ""); } if (stripIP) { - output = output.replace(/^((45[0-9a-f]{2} ([0-9a-f]{4} ){9}))/igm, ""); + output = output.replace(/^((45[0-9a-f]{2} ?([0-9a-f]{4} ?){9}))/igm, ""); } if (stripTCP) { - output = output.replace(/^([0-9a-f]{4} ){6}((80[0-9a-f]{2} ([0-9a-f]{4} ?){9})|(50[0-9a-f]{2} ([0-9a-f]{4} ?){3}))/igm, ""); + output = output.replace(/^([0-9a-f]{4} ?){6}((80[0-9a-f]{2} ?([0-9a-f]{4} ?){9})|(50[0-9a-f]{2} ?([0-9a-f]{4} ?){3}))/igm, ""); } return output;
      Operations
        Recipe
          Input
          Output