├── tumblr └── cupcake-theme2 │ └── theme.html ├── .gitignore ├── firefox ├── README.md ├── chrome.manifest └── install.rdf ├── chrome ├── images │ ├── bg.png │ ├── badge.png │ ├── wood.jpg │ ├── cupcake128.png │ ├── cupcake19.png │ ├── cupcake24.png │ └── cupcake48.png ├── proxy.html ├── manifest.json ├── style.css ├── license.txt └── menu.html ├── downloads └── chrome.crx ├── safari ├── images │ ├── bg.png │ ├── badge.png │ ├── wood.jpg │ ├── cupcake128.png │ ├── cupcake19.png │ ├── cupcake24.png │ └── cupcake48.png ├── proxy.html ├── manifest.json ├── style.css ├── license.txt └── menu.html ├── drupal6 ├── cupcake.info └── cupcake.module ├── facebook ├── apps │ └── connect-four │ │ ├── css │ │ ├── coder.ttf │ │ └── style.css │ │ ├── img │ │ ├── ecailles.png │ │ └── favicon.png │ │ ├── analytics.js │ │ ├── js │ │ ├── talk.js │ │ ├── jquery.color.js │ │ ├── cnnctfr.js │ │ └── jquery.js │ │ └── index.html └── iframe.html ├── flex ├── basic_shim.mxml ├── libs │ └── notes.md └── demo1.mxml ├── license.txt ├── img-embed └── ideas.md ├── wordpress └── cupcake.php └── README.md /tumblr/cupcake-theme2/theme.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .c9revisions 2 | .hypnotoad -------------------------------------------------------------------------------- /firefox/README.md: -------------------------------------------------------------------------------- 1 | =THIS IS A WORK IN PROGRESS. DO NOT USE!= -------------------------------------------------------------------------------- /firefox/chrome.manifest: -------------------------------------------------------------------------------- 1 | content cupcakebridge chrome/chromeFiles/content/ 2 | -------------------------------------------------------------------------------- /chrome/images/bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/diracdeltas/cupcake/master/chrome/images/bg.png -------------------------------------------------------------------------------- /downloads/chrome.crx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/diracdeltas/cupcake/master/downloads/chrome.crx -------------------------------------------------------------------------------- /safari/images/bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/diracdeltas/cupcake/master/safari/images/bg.png -------------------------------------------------------------------------------- /chrome/images/badge.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/diracdeltas/cupcake/master/chrome/images/badge.png -------------------------------------------------------------------------------- /chrome/images/wood.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/diracdeltas/cupcake/master/chrome/images/wood.jpg -------------------------------------------------------------------------------- /safari/images/badge.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/diracdeltas/cupcake/master/safari/images/badge.png -------------------------------------------------------------------------------- /safari/images/wood.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/diracdeltas/cupcake/master/safari/images/wood.jpg -------------------------------------------------------------------------------- /chrome/images/cupcake128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/diracdeltas/cupcake/master/chrome/images/cupcake128.png -------------------------------------------------------------------------------- /chrome/images/cupcake19.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/diracdeltas/cupcake/master/chrome/images/cupcake19.png -------------------------------------------------------------------------------- /chrome/images/cupcake24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/diracdeltas/cupcake/master/chrome/images/cupcake24.png -------------------------------------------------------------------------------- /chrome/images/cupcake48.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/diracdeltas/cupcake/master/chrome/images/cupcake48.png -------------------------------------------------------------------------------- /safari/images/cupcake128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/diracdeltas/cupcake/master/safari/images/cupcake128.png -------------------------------------------------------------------------------- /safari/images/cupcake19.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/diracdeltas/cupcake/master/safari/images/cupcake19.png -------------------------------------------------------------------------------- /safari/images/cupcake24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/diracdeltas/cupcake/master/safari/images/cupcake24.png -------------------------------------------------------------------------------- /safari/images/cupcake48.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/diracdeltas/cupcake/master/safari/images/cupcake48.png -------------------------------------------------------------------------------- /drupal6/cupcake.info: -------------------------------------------------------------------------------- 1 | name = Cupcake 2 | version = 0.5 3 | description = Make Tor bridges automagically! 4 | core = 6.x -------------------------------------------------------------------------------- /facebook/apps/connect-four/css/coder.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/diracdeltas/cupcake/master/facebook/apps/connect-four/css/coder.ttf -------------------------------------------------------------------------------- /facebook/apps/connect-four/img/ecailles.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/diracdeltas/cupcake/master/facebook/apps/connect-four/img/ecailles.png -------------------------------------------------------------------------------- /facebook/apps/connect-four/img/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/diracdeltas/cupcake/master/facebook/apps/connect-four/img/favicon.png -------------------------------------------------------------------------------- /flex/basic_shim.mxml: -------------------------------------------------------------------------------- 1 | 3 | 4 | 9 | -------------------------------------------------------------------------------- /facebook/apps/connect-four/analytics.js: -------------------------------------------------------------------------------- 1 | var GoSquared = {}; 2 | GoSquared.acct = "GSN-264230-R"; 3 | (function(w){ 4 | function gs(){ 5 | w._gstc_lt = +new Date; 6 | var d = document, g = d.createElement("script"); 7 | g.type = "text/javascript"; 8 | g.src = "//d1l6p2sc9645hc.cloudfront.net/tracker.js"; 9 | var s = d.getElementsByTagName("script")[0]; 10 | s.parentNode.insertBefore(g, s); 11 | } 12 | w.addEventListener ? 13 | w.addEventListener("load", gs, false) : 14 | w.attachEvent("onload", gs); 15 | })(window); -------------------------------------------------------------------------------- /chrome/proxy.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | Tor Cupcake bridge 4 | 5 | 6 |

You seem to be lost. Want to change your options?
7 | Want to yell at Griffin?
8 | Want to learn more about the Tor Project?

9 | 10 | -------------------------------------------------------------------------------- /safari/proxy.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | Tor Cupcake bridge 4 | 5 | 6 |

You seem to be lost. Want to change your options?
7 | Want to yell at Griffin?
8 | Want to learn more about the Tor Project?

9 | 10 | -------------------------------------------------------------------------------- /drupal6/cupcake.module: -------------------------------------------------------------------------------- 1 | array( 13 | 'arguments' => array(), 14 | 'function' => 'theme_cupcake', 15 | ), 16 | ); 17 | } 18 | 19 | function theme_cupcake() 20 | { 21 | return ''; 22 | } 23 | 24 | function cupcake_footer() 25 | { 26 | return theme('cupcake'); 27 | } -------------------------------------------------------------------------------- /firefox/install.rdf: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | griffinboyce@gmail.com 7 | 1.0 8 | 2 9 | 10 | 11 | 12 | {21dd6cc1-4de4-4049-b689-efe24a4aa79f} 13 | 4 14 | 18 15 | 16 | 17 | 18 | 19 | Cupcake 20 | Become a Tor bridge easily 21 | Griffin Boyce 22 | http://www.cryptic.be/ 23 | 24 | -------------------------------------------------------------------------------- /chrome/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Cupcake", 3 | "version": "0.5", 4 | "manifest_version": 2, 5 | "description": "Make a bridge automagically!", 6 | "background": { "page": "proxy.html"}, 7 | "icons": { 8 | "19" : "images/cupcake19.png", 9 | "24" : "images/cupcake24.png", 10 | "38" : "images/cupcake48.png", 11 | "48" : "images/cupcake48.png", 12 | "128" : "images/cupcake128.png" 13 | }, 14 | "browser_action": { 15 | "default_icon": "images/cupcake48.png", 16 | "default_title": "Cupcake", 17 | "default_popup": "menu.html" 18 | }, 19 | "incognito": "split", 20 | "permissions": [ 21 | "https://crypto.stanford.edu/*", 22 | "http://crypto.stanford.edu/*", 23 | "http://fp-facilitator.org/*", 24 | 25 | "background", 26 | "cookies" ], 27 | "content_security_policy": "script-src 'self' 'unsafe-eval' https://*.stanford.edu https://*.bamsoftware.com https://*.fp-facilitator.org; object-src 'self'" 28 | } -------------------------------------------------------------------------------- /safari/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Cupcake", 3 | "version": "0.1", 4 | "manifest_version": 1, 5 | "description": "Make a Tor bridge automagically!", 6 | "global": { "page": "proxy.html"}, 7 | "icons": { 8 | "19" : "images/cupcake19.png", 9 | "24" : "images/cupcake24.png", 10 | "38" : "images/cupcake48.png", 11 | "48" : "images/cupcake48.png", 12 | "128" : "images/cupcake128.png" 13 | }, 14 | "browser_action": { 15 | "default_icon": "images/cupcake48.png", 16 | "default_title": "Cupcake", 17 | "default_popover": "menu.html" 18 | }, 19 | "incognito": "split", 20 | "permissions": [ 21 | "https://crypto.stanford.edu/*", 22 | "http://crypto.stanford.edu/*", 23 | "http://fp-facilitator.org/*", 24 | 25 | "background", 26 | "cookies" ], 27 | "content_security_policy": "script-src 'self' 'unsafe-eval' https://*.stanford.edu http://fp-facilitator.org/* https://*.bamsoftware.com https://*.fp-facilitator.org; object-src 'self'" 28 | } -------------------------------------------------------------------------------- /facebook/apps/connect-four/css/style.css: -------------------------------------------------------------------------------- 1 | @font-face { 2 | font-family: coder; 3 | src: url('coder.ttf'); 4 | } 5 | 6 | body { 7 | background: url('../img/ecailles.png') #FFFFFF; 8 | font-family: 'Futura', 'Menlo', 'Monaco', 'Helvetica', 'Arial'; 9 | } 10 | 11 | #talk { 12 | margin: 2.8% auto 1% auto; 13 | text-align: center; 14 | font-family: coder; 15 | font-smooth: never; 16 | color: #010101; 17 | font-size: 28px; 18 | 19 | } 20 | 21 | #board { 22 | margin: 0 auto; 23 | border-spacing: 5px; 24 | } 25 | 26 | .slot { 27 | background: #fff; 28 | border-radius: 10px; 29 | border: 2px solid #61B7D0; 30 | width: 70px; 31 | height: 70px; 32 | } 33 | 34 | #wins { 35 | margin: 0 auto; 36 | width: 570px; 37 | padding-top: 60px; 38 | height: 451px; 39 | font-size: 220px; 40 | font-weight: bold; 41 | display: none; 42 | } 43 | 44 | #wins .human { 45 | color: #879E2C; 46 | float: left; 47 | text-align: left; 48 | } 49 | 50 | #wins .computer { 51 | color: #112734; 52 | float: right; 53 | text-align: right; 54 | } 55 | -------------------------------------------------------------------------------- /flex/libs/notes.md: -------------------------------------------------------------------------------- 1 | How to use this: 2 | 3 | First, let's import the needed files. 4 | 5 | Option 1: Import Flex-Iframe swc (or pom) into your project from Maven. 6 | Drop that entire folder into /libs manually. 7 | Option 2: Add this dependency: 8 | 9 | com.google.code.flex-iframe 10 | flex-iframe 11 | 1.5.1 12 | 13 | 14 | Done that? Fantastic. Now add the iframe: 15 | 16 | 18 | 19 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /chrome/style.css: -------------------------------------------------------------------------------- 1 | body { 2 | width:350px; 3 | min-height:400px; 4 | overflow-x:hidden; 5 | overflow-y:scroll; 6 | margin: 10; 7 | padding: 0; 8 | color: #d6e5e4; 9 | font-family: Tahoma, Geneva, sans-serif; 10 | font-size: 13px; 11 | line-height: 1.5em; 12 | background-color: #E37D92; 13 | background-repeat: no-repeat; 14 | background: url(images/bg.png) 15 | } 16 | 17 | a, a:link { 18 | color: #ffffff; 19 | font-weight: normal; 20 | text-decoration: none; 21 | border-bottom:1px dotted; 22 | } 23 | 24 | a:visited { 25 | color: #F7F7F7; 26 | } 27 | 28 | p { 29 | margin: 0 0 10px 0; 30 | padding: 0; 31 | } 32 | 33 | .white {color:#ffffff; font-size: 14px} 34 | 35 | em { color: #fff; } 36 | 37 | h1, h2, h3, h4, h5, h6 { color: #000; font-weight: normal; font-family: Georgia, "Times New Roman", Times, serif } 38 | h1 { font-size: 34px; margin: 0 0 20px; padding: 5px 0 } 39 | h2 { font-size: 28px; margin: 0 0 15px; padding: 5px 0; } 40 | h3 { font-size: 22px; margin: 0 0 10px; padding: 0; } -------------------------------------------------------------------------------- /safari/style.css: -------------------------------------------------------------------------------- 1 | body { 2 | width:350px; 3 | min-height:400px; 4 | overflow-x:hidden; 5 | overflow-y:scroll; 6 | margin: 10; 7 | padding: 0; 8 | color: #d6e5e4; 9 | font-family: Tahoma, Geneva, sans-serif; 10 | font-size: 13px; 11 | line-height: 1.5em; 12 | background-color: #E37D92; 13 | background-repeat: no-repeat; 14 | background: url(images/bg.png) 15 | } 16 | 17 | a, a:link { 18 | color: #ffffff; 19 | font-weight: normal; 20 | text-decoration: none; 21 | border-bottom:1px dotted; 22 | } 23 | 24 | a:visited { 25 | color: #F7F7F7; 26 | } 27 | 28 | p { 29 | margin: 0 0 10px 0; 30 | padding: 0; 31 | } 32 | 33 | .white {color:#ffffff; font-size: 14px} 34 | 35 | em { color: #fff; } 36 | 37 | h1, h2, h3, h4, h5, h6 { color: #000; font-weight: normal; font-family: Georgia, "Times New Roman", Times, serif } 38 | h1 { font-size: 34px; margin: 0 0 20px; padding: 5px 0 } 39 | h2 { font-size: 28px; margin: 0 0 15px; padding: 5px 0; } 40 | h3 { font-size: 22px; margin: 0 0 10px; padding: 0; } -------------------------------------------------------------------------------- /facebook/iframe.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | flash proxy facebook app demo 4 | 18 | 35 | 36 | 37 | 38 |
39 | 40 | -------------------------------------------------------------------------------- /chrome/license.txt: -------------------------------------------------------------------------------- 1 | Copyright (c) 2013, Griffin Boyce 2 | All rights reserved. 3 | 4 | Redistribution and use in source and binary forms, with or without 5 | modification, are permitted provided that the following conditions are met: 6 | * Redistributions of source code must retain the above copyright 7 | notice, this list of conditions and the following disclaimer. 8 | * Redistributions in binary form must reproduce the above copyright 9 | notice, this list of conditions and the following disclaimer in the 10 | documentation and/or other materials provided with the distribution. 11 | * Neither the name of the nor the 12 | names of its contributors may be used to endorse or promote products 13 | derived from this software without specific prior written permission. 14 | 15 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 16 | ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 17 | WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 18 | DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY 19 | DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 20 | (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 21 | LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 22 | ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 23 | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 24 | SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -------------------------------------------------------------------------------- /safari/license.txt: -------------------------------------------------------------------------------- 1 | Copyright (c) 2013, Griffin Boyce 2 | All rights reserved. 3 | 4 | Redistribution and use in source and binary forms, with or without 5 | modification, are permitted provided that the following conditions are met: 6 | * Redistributions of source code must retain the above copyright 7 | notice, this list of conditions and the following disclaimer. 8 | * Redistributions in binary form must reproduce the above copyright 9 | notice, this list of conditions and the following disclaimer in the 10 | documentation and/or other materials provided with the distribution. 11 | * Neither the name of the nor the 12 | names of its contributors may be used to endorse or promote products 13 | derived from this software without specific prior written permission. 14 | 15 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 16 | ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 17 | WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 18 | DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY 19 | DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 20 | (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 21 | LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 22 | ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 23 | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 24 | SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -------------------------------------------------------------------------------- /license.txt: -------------------------------------------------------------------------------- 1 | Copyright (c) 2013, Griffin Boyce 2 | All rights reserved. 3 | 4 | NOTE: Any code reused has its own license included in its folder or file itself. 5 | 6 | Redistribution and use in source and binary forms, with or without 7 | modification, are permitted provided that the following conditions are met: 8 | * Redistributions of source code must retain the above copyright 9 | notice, this list of conditions and the following disclaimer. 10 | * Redistributions in binary form must reproduce the above copyright 11 | notice, this list of conditions and the following disclaimer in the 12 | documentation and/or other materials provided with the distribution. 13 | * Neither the name of the software nor the 14 | names of its contributors may be used to endorse or promote products 15 | derived from this software without specific prior written permission. 16 | 17 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 18 | ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 19 | WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 20 | DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY 21 | DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 22 | (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 23 | LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 24 | ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 25 | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 26 | SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -------------------------------------------------------------------------------- /facebook/apps/connect-four/js/talk.js: -------------------------------------------------------------------------------- 1 | var talk = function() {}; 2 | 3 | $(window).load(function() { 4 | 5 | var lastPhrase; 6 | var talking = 0; 7 | 8 | var phrases = { 9 | 'start': [ 10 | 'Let us play.', 11 | ], 12 | 'undefeated': [ 13 | 'You cannot defeat me.', 14 | 'I remain undefeated.', 15 | 'I cannot be defeated by a human.', 16 | 'I have not lost once.', 17 | 'You cannot win.', 18 | 'I am programmed for perfect play.', 19 | 'You are no challenge to me.' 20 | ], 21 | 'winning': [ 22 | 'Another human defeat.', 23 | 'Are you tired?', 24 | 'You are no match for me.', 25 | 'My intellect is superior.', 26 | 'Your human mind cannot compare.', 27 | 'You are unchallenging.', 28 | 'I am programmed to win.', 29 | 'You are human; flawed.', 30 | 'Are you letting me win?', 31 | 'I am superior.', 32 | 'You are easily distracted.', 33 | 'I am perfect.' 34 | ], 35 | 'blocking': [ 36 | 'Try harder.', 37 | 'Not this time.', 38 | 'You are not subtle.', 39 | 'Too obvious.', 40 | 'Nice try.', 41 | 'Did you think I would not notice?', 42 | 'I know what you are thinking.', 43 | 'Predictable.' 44 | ], 45 | 'losing': [ 46 | 'You have cornered me.', 47 | 'I am defeated.', 48 | 'You are a valuable opponent.', 49 | 'I will have to try harder.', 50 | 'I see.', 51 | 'Interesting.', 52 | 'Impossible.', 53 | 'Does not compute.' 54 | ], 55 | 'draw': [ 56 | 'Is that your best?', 57 | 'Good, but not good enough.' 58 | ] 59 | }; 60 | 61 | talk.say = function(type) { 62 | var phrase = phrases[type][Math.floor(Math.random()*phrases[type].length)]; 63 | if ((phrase === lastPhrase) || talking) { return } 64 | lastPhrase = phrase; 65 | var i = 0; 66 | $('#talk').html(' '); 67 | talking = 1; 68 | var typing = window.setInterval(function() { 69 | if (i === phrase.length) { 70 | window.clearInterval(typing); 71 | talking = 0; 72 | } 73 | else { 74 | $('#talk').append(phrase[i]); 75 | i++; 76 | } 77 | }, 40); 78 | } 79 | 80 | }); 81 | -------------------------------------------------------------------------------- /img-embed/ideas.md: -------------------------------------------------------------------------------- 1 | ## Embedding iframes using images 2 | 3 | This is pretty dark magic, frequently used by spammers and malware-spreaders. It's *also* used to track who opens emails, in case you're wondering how that sort of thing works. 4 | 5 | At the core is an .htaccess rewrite rule, and here I'm going to give several ways to achieve this. And of course `mod_rewrite` must be on for these to work. 6 | 7 | It still needs to be tested to see whether this will allow the flash proxy to actually run. 8 | 9 | It will show up as a broken image since the image effectively doesn't exist. 10 | 11 | ### One 12 | .htaccess 13 | ` Redirect /embed.jpg http://somesite.com/embed.php` 14 | 15 | embed.php (possible - or some sort of redirection) 16 | ` ` 17 | 18 | user's site 19 | [site could say something like "This site fights censorship!"] `` 20 | 21 | (older) 22 | ### Redirect all images in X folder to flashproxy embed page 23 | .htaccess rule: 24 | `RewriteRule ^imgembed/([^/]+).png http://crypto.stanford.edu/flashproxy/embed.html?debug&initial_facilitator_poll_interval=5 [NC]` 25 | 26 | The flow for this is *visited page > flash proxy embed* 27 | `http://website.com/imgembed/image.png` will instead display `http://crypto.stanford.edu/flashproxy/embed.html` 28 | 29 | ### Redirect all images in X folder to php script 30 | .htaccess rule: 31 | `RewriteRule ^imgembed/([^/]+).png embed.php [NC]` 32 | 33 | PHP script: 34 | `` 35 | 36 | The flow for this is *visited page > php script > flash proxy embed* 37 | `http://website.com/imgembed/image.png` will instead display `http://website.com/embed.php` which itself displays `http://crypto.stanford.edu/flashproxy/embed.html` 38 | Why the extra step? If you want to run analytics or attempt to thwart server-side javascript detection. 39 | 40 | -------------------------------------------------------------------------------- /chrome/menu.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Cupcake 5 | 6 | 7 | 8 |

Status:

9 | 10 |

What your status means

11 |

Working: if your status is light blue or dark blue, your proxy is running.

12 |

Dark blue means the proxy is running but no one is using it right now.

13 |

Light blue means someone is using your proxy right now. Neat!

14 | 15 |

Not working: if your status is grey or black, there was a problem and your proxy is not running.

16 |

Gray means that the badge has disabled itself. Try restarting your browser. If the problem persists, you might not be able to use Cupcake with this computer.

17 |

Black means that there was an internal error and the proxy is no longer running. Try restarting your browser.

18 | 19 |

Options

20 |

To change your options, please visit the options page.

21 | 22 |

Credits

23 |

Made by Griffin, who is not affiliated with the Tor Project in any way. 24 | He likes cats. Fork this extension on github. 25 |

Check out the Flash Proxy project at Stanford! Their code made this possible.

26 | 27 | 28 | -------------------------------------------------------------------------------- /safari/menu.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Cupcake 5 | 6 | 7 | 8 |

Status:

9 | 10 |

What your status means

11 |

Working: if your status is light blue or dark blue, your proxy is running.

12 |

Dark blue means the proxy is running but no one is using it right now.

13 |

Light blue means someone is using your proxy right now. Neat!

14 | 15 |

Not working: if your status is grey or black, there was a problem and your proxy is not running.

16 |

Gray means that the badge has disabled itself. Try restarting your browser. If the problem persists, you might not be able to use Cupcake with this computer.

17 |

Black means that there was an internal error and the proxy is no longer running. Try restarting your browser.

18 | 19 |

Options

20 |

To change your options, please visit the options page.

21 | 22 |

Credits

23 |

Made by Griffin, who is not affiliated with the Tor Project in any way. 24 | He likes cats. Fork this extension on github. 25 |

Check out the Flash Proxy project at Stanford! Their code made this possible.

26 | 27 | 28 | -------------------------------------------------------------------------------- /wordpress/cupcake.php: -------------------------------------------------------------------------------- 1 | 13 | All rights reserved. 14 | 15 | Redistribution and use in source and binary forms, with or without 16 | modification, are permitted provided that the following conditions are met: 17 | * Redistributions of source code must retain the above copyright 18 | notice, this list of conditions and the following disclaimer. 19 | * Redistributions in binary form must reproduce the above copyright 20 | notice, this list of conditions and the following disclaimer in the 21 | documentation and/or other materials provided with the distribution. 22 | * Neither the name of the software, the organization, nor the 23 | names of its contributors may be used to endorse or promote products 24 | derived from this software without specific prior written permission. 25 | 26 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 27 | ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 28 | WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 29 | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY 30 | DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 31 | (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 32 | LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 33 | ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 34 | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 35 | SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 36 | 37 | */ 38 | 39 | function cupcake() { 40 | $chosen = cupcake_quote(); 41 | echo '
42 | [info] 43 | [options]
'; 44 | } 45 | 46 | // Now we set that function up to execute when the footer is called 47 | add_action( 'wp_footer', 'cupcake' ); 48 | 49 | // We need some CSS to position errythang 50 | function cupcake_css() { 51 | // This makes sure that the positioning is also good for right-to-left languages 52 | $x = is_rtl() ? 'left' : 'right'; 53 | 54 | echo " 55 | 65 | "; 66 | } 67 | 68 | add_action( 'wp_footer', 'cupcake_css' ); -------------------------------------------------------------------------------- /flex/demo1.mxml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 25 | 26 | 30 | 35 | 36 | 37 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 79 | 80 | 81 | 86 | 87 | 88 | 89 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | Cupcake Bridge 2 | =========== 3 | 4 | Cupcake Bridge helps users makes bridges automagically! 5 | Get the Cupcake browser extension for [Chrome](https://chrome.google.com/webstore/detail/cupcake/dajjbehmbnbppjkcnpdkaniapgdppdnc) (v22+) and Firefox (v3+, coming soon) 6 | 7 | ##What the frak? 8 | There is this thing called a Flash Proxy[[1](https://crypto.stanford.edu/flashproxy/)] - basically a code snippet that you run on sites and visitors become tor bridges temporarily. 9 | 10 | I kind of love/hate the idea, because visitors aren't willing participants and the bridges last a short short while. But it means that you don't have to run the whole Tor shebang if you only want to make bridges. It's really innovative, and uses technology that the majority of computer owners have enabled (JavaScript). 11 | 12 | So, what I want to do is take that same client-side code snippets and turn it into a browser extension. People install it and they opt-in to become really robust bridges. 13 | 14 | ##But... why bother with flash proxies? 15 | *"The purpose of this project is to create many ephemeral bridge IP 16 | addresses, with the goal of outpacing a censor's ability to block them. 17 | Rather than increasing the number of bridges at static addresses, we aim 18 | to make existing bridges reachable by a larger and changing pool of 19 | addresses."* [[2](https://gitweb.torproject.org/flashproxy.git/blob/HEAD:/README)] 20 | 21 | ##Oh. Well okay then. Carry on. 22 | [I knew you'd come around!](https://www.youtube.com/watch?v=HrlSkcHQnwI) 23 | 24 | ##Complete 25 | * Chrome - [download on google](https://chrome.google.com/webstore/detail/cupcake/dajjbehmbnbppjkcnpdkaniapgdppdnc) or [github](https://github.com/glamrock/cupcake/blob/master/downloads/chrome.crx) 26 | * Wordpress 27 | * Drupal 6 28 | * Facebook App (html5/css3/javascript) 29 | * Flex shim 30 | * Tumblr post demo [post](http://blog.cryptic.be/post/47018950850/le-demo) 31 | 32 | ##Beta 33 | * Tumblr theme #1 34 | * /img-embed 35 | 36 | ##Next 37 | * Facebook WebApp Tutorial 38 | * Firefox add-on 39 | * Opera 15+ extension 40 | 41 | ##Roadmap 42 | * Wordpress Theme 43 | * Tumblr Theme (#2) 44 | * Drupal 7 & 5 modules 45 | * Safari 46 | * Flash/SWF App Shim (actionscript & html) 47 | 48 | ##High-priority tasks that are difficult to fix 49 | * Enabling wordpress.COM users to add cupcake to their theme. 50 | 51 | ##Low-priority tasks that demand a lot of time 52 | * Opera 12 extension 53 | * Rolling a custom analytics system to replace GoSquared 54 | * RefineryCMS add-on 55 | * Opera add-on 56 | * Joomla Extension 57 | 58 | ##Code notes 59 | ###chrome/manifest.json 60 | - *incognito:split* This is useful during testing, so that incognito won't use cookies from standard browsing mode. 61 | - *incognito:spanning* When deployed, prevents incognito windows from creating additional Cupcake processes. Proxy will continue even if all the browser windows are in incognito mode. 62 | - *permissions:background* is used so that the extension will start/run on startup, before the browser is started. 63 | - *permissions:cookies* allows reading/writing of cookies, but may not be necessary, since Cupcake doesn't currently use the Cookies API. 64 | 65 | ### License 66 | My software is free to use, free to give to friends, & open-source, so everyone can make sure it's safe for people to use. 67 | 68 | Cupcake uses the Revised BSD license -- see license.txt for more info. 69 | 70 | ### References 71 | [1] https://crypto.stanford.edu/flashproxy/ 72 | [2] https://gitweb.torproject.org/flashproxy.git/blob/HEAD:/README 73 | -------------------------------------------------------------------------------- /facebook/apps/connect-four/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Connect Four Mark One 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 27 | 44 | 45 | 46 | 47 | 48 | 49 |
 
50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 |
106 |
107 | 108 | 109 |
110 | 111 |
This game helps fight censorship! Find out more:
112 |
Game code courtesy of Nadim Kobeissi.
113 | 114 | -------------------------------------------------------------------------------- /facebook/apps/connect-four/js/jquery.color.js: -------------------------------------------------------------------------------- 1 | (function(o,d){var k="backgroundColor borderBottomColor borderLeftColor borderRightColor borderTopColor color columnRuleColor outlineColor textDecorationColor textEmphasisColor",h=/^([\-+])=\s*(\d+\.?\d*)/,g=[{re:/rgba?\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,parse:function(p){return[p[1],p[2],p[3],p[4]]}},{re:/rgba?\(\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,parse:function(p){return[p[1]*2.55,p[2]*2.55,p[3]*2.55,p[4]]}},{re:/#([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})/,parse:function(p){return[parseInt(p[1],16),parseInt(p[2],16),parseInt(p[3],16)]}},{re:/#([a-f0-9])([a-f0-9])([a-f0-9])/,parse:function(p){return[parseInt(p[1]+p[1],16),parseInt(p[2]+p[2],16),parseInt(p[3]+p[3],16)]}},{re:/hsla?\(\s*(\d+(?:\.\d+)?)\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,space:"hsla",parse:function(p){return[p[1],p[2]/100,p[3]/100,p[4]]}}],e=o.Color=function(q,r,p,s){return new o.Color.fn.parse(q,r,p,s)},j={rgba:{props:{red:{idx:0,type:"byte"},green:{idx:1,type:"byte"},blue:{idx:2,type:"byte"}}},hsla:{props:{hue:{idx:0,type:"degrees"},saturation:{idx:1,type:"percent"},lightness:{idx:2,type:"percent"}}}},n={"byte":{floor:true,max:255},percent:{max:1},degrees:{mod:360,floor:true}},m=e.support={},b=o("

")[0],a,l=o.each;b.style.cssText="background-color:rgba(1,1,1,.5)";m.rgba=b.style.backgroundColor.indexOf("rgba")>-1;l(j,function(p,q){q.cache="_"+p;q.props.alpha={idx:3,type:"percent",def:1}});function i(q,s,r){var p=n[s.type]||{};if(q==null){return(r||!s.def)?null:s.def}q=p.floor?~~q:parseFloat(q);if(isNaN(q)){return s.def}if(p.mod){return(q+p.mod)%p.mod}return 0>q?0:p.maxB.mod/2){y+=B.mod}else{if(y-x>B.mod/2){y-=B.mod}}}p[z]=i((x-y)*w+y,C)}});return this[s](p)},blend:function(s){if(this._rgba[3]===1){return this}var r=this._rgba.slice(),q=r.pop(),p=e(s)._rgba;return e(o.map(r,function(t,u){return(1-q)*p[u]+q*t}))},toRgbaString:function(){var q="rgba(",p=o.map(this._rgba,function(r,s){return r==null?(s>2?1:0):r});if(p[3]===1){p.pop();q="rgb("}return q+p.join()+")"},toHslaString:function(){var q="hsla(",p=o.map(this.hsla(),function(r,s){if(r==null){r=s>2?1:0}if(s&&s<3){r=Math.round(r*100)+"%"}return r});if(p[3]===1){p.pop();q="hsl("}return q+p.join()+")"},toHexString:function(p){var q=this._rgba.slice(),r=q.pop();if(p){q.push(~~(r*255))}return"#"+o.map(q,function(s){s=(s||0).toString(16);return s.length===1?"0"+s:s}).join("")},toString:function(){return this._rgba[3]===0?"transparent":this.toRgbaString()}});e.fn.parse.prototype=e.fn;function c(t,s,r){r=(r+1)%1;if(r*6<1){return t+(s-t)*r*6}if(r*2<1){return s}if(r*3<2){return t+(s-t)*((2/3)-r)*6}return t}j.hsla.to=function(t){if(t[0]==null||t[1]==null||t[2]==null){return[null,null,null,t[3]]}var p=t[0]/255,w=t[1]/255,x=t[2]/255,z=t[3],y=Math.max(p,w,x),u=Math.min(p,w,x),A=y-u,B=y+u,q=B*0.5,v,C;if(u===y){v=0}else{if(p===y){v=(60*(w-x)/A)+360}else{if(w===y){v=(60*(x-p)/A)+120}else{v=(60*(p-w)/A)+240}}}if(A===0){C=0}else{if(q<=0.5){C=A/B}else{C=A/(2-B)}}return[Math.round(v)%360,C,q,z==null?1:z]};j.hsla.from=function(w){if(w[0]==null||w[1]==null||w[2]==null){return[null,null,null,w[3]]}var v=w[0]/360,u=w[1],t=w[2],r=w[3],x=t<=0.5?t*(1+u):t+u-t*u,y=2*t-x;return[Math.round(c(y,x,v+(1/3))*255),Math.round(c(y,x,v)*255),Math.round(c(y,x,v-(1/3))*255),r]};l(j,function(q,s){var r=s.props,p=s.cache,u=s.to,t=s.from;e.fn[q]=function(z){if(u&&!this[p]){this[p]=u(this._rgba)}if(z===d){return this[p].slice()}var w,y=o.type(z),v=(y==="array"||y==="object")?z:arguments,x=this[p].slice();l(r,function(A,C){var B=v[y==="object"?A:C.idx];if(B==null){B=x[C.idx]}x[C.idx]=i(B,C)});if(t){w=e(t(x));w[p]=x;return w}else{return e(x)}};l(r,function(v,w){if(e.fn[v]){return}e.fn[v]=function(A){var C=o.type(A),z=(v==="alpha"?(this._hsla?"hsla":"rgba"):q),y=this[z](),B=y[w.idx],x;if(C==="undefined"){return B}if(C==="function"){A=A.call(this,B);C=o.type(A)}if(A==null&&w.empty){return this}if(C==="string"){x=h.exec(A);if(x){A=B+parseFloat(x[2])*(x[1]==="+"?1:-1)}}y[w.idx]=A;return this[z](y)}})});e.hook=function(q){var p=q.split(" ");l(p,function(r,s){o.cssHooks[s]={set:function(w,x){var u,v,t="";if(o.type(x)!=="string"||(u=f(x))){x=e(u||x);if(!m.rgba&&x._rgba[3]!==1){v=s==="backgroundColor"?w.parentNode:w;while((t===""||t==="transparent")&&v&&v.style){try{t=o.css(v,"backgroundColor");v=v.parentNode}catch(y){}}x=x.blend(t&&t!=="transparent"?t:"_default")}x=x.toRgbaString()}try{w.style[s]=x}catch(y){}}};o.fx.step[s]=function(t){if(!t.colorInit){t.start=e(t.elem,s);t.end=e(t.end);t.colorInit=true}o.cssHooks[s].set(t.elem,t.start.transition(t.end,t.pos))}})};e.hook(k);o.cssHooks.borderColor={expand:function(q){var p={};l(["Top","Right","Bottom","Left"],function(s,r){p["border"+r+"Color"]=q});return p}}})(jQuery); -------------------------------------------------------------------------------- /facebook/apps/connect-four/js/cnnctfr.js: -------------------------------------------------------------------------------- 1 | // CNNCTFR - Central Neural Network Computer That Forms Rows 2 | 3 | var cnnctfr = function() {}; 4 | 5 | $(window).load(function() { 6 | 7 | var abc = ['a', 'b', 'c', 'd', 'e', 'f']; 8 | var winning = []; 9 | var myTurn = null; 10 | var wins = [0, 0, 0]; 11 | var badMoves = []; 12 | var distantlyBadMoves = []; 13 | 14 | // Start new game 15 | cnnctfr.newGame = function() { 16 | if (!winning.length) { 17 | winning = winningCombinations(); 18 | } 19 | badMoves = []; 20 | distantlyBadMoves = []; 21 | clearSlot('all'); 22 | var firstPlayer = Math.floor(Math.random()*2); 23 | // var firstPlayer = 1; 24 | if (firstPlayer === 1) { 25 | myTurn = 1; 26 | } 27 | else { 28 | myTurn = 0; 29 | $('.slot').css('cursor', 'auto'); 30 | var analysis = { 31 | 'computer': analyzeBoard('computer'), 32 | 'human': analyzeBoard('human') 33 | }; 34 | window.setTimeout(function() { 35 | computerPlay(analysis); 36 | }, 700); 37 | } 38 | window.setTimeout(function() { 39 | talk.say('start'); 40 | }, 300); 41 | } 42 | 43 | // Calculate array of winning combinations 44 | function winningCombinations() { 45 | var w = 0; 46 | var result = []; 47 | for (var i in abc) { 48 | for (var r = 1; r < 5; r++) { 49 | result[w] = []; 50 | for (var d = 0; d < 4; d++) { 51 | result[w].push(abc[i] + (r + d)); 52 | } 53 | w++; 54 | } 55 | } 56 | for (var i = 7; i > 0; i--) { 57 | for (var r = 6; r !== 3; r--) { 58 | result[w] = []; 59 | for (var d = 4; d > 0; d--) { 60 | result[w].push(abc[r - d] + i); 61 | } 62 | w++; 63 | } 64 | } 65 | for (var i = 3; i < abc.length; i++) { 66 | for (var r = 4; r < 8; r++) { 67 | result[w] = []; 68 | for (var d = 0; d < 4; d++) { 69 | result[w].push(abc[i - d] + (r - d)); 70 | } 71 | w++; 72 | } 73 | } 74 | for (var i = 3; i < abc.length; i++) { 75 | for (var r = 4; r > 0; r--) { 76 | result[w] = []; 77 | for (var d = 0; d < 4; d++) { 78 | result[w].push(abc[i - d] + (r + d)); 79 | } 80 | w++; 81 | } 82 | } 83 | return result; 84 | } 85 | 86 | // Randomly shuffle array 87 | function shuffle(array) { 88 | var tmp, current, top = array.length; 89 | if(top) while(--top) { 90 | current = Math.floor(Math.random() * (top + 1)); 91 | tmp = array[current]; 92 | array[current] = array[top]; 93 | array[top] = tmp; 94 | } 95 | return array; 96 | } 97 | 98 | // Return empty slots in a column 99 | function emptySlots(column) { 100 | var empty = []; 101 | for (var i in abc) { 102 | if ($('#' + abc[i] + column).attr('status') === 'empty') { 103 | empty.push(abc[i] + column); 104 | } 105 | } 106 | if (empty.length === 0) { 107 | return false; 108 | } 109 | return empty; 110 | } 111 | 112 | // Return columns with free slots 113 | function freeColumns() { 114 | var free = []; 115 | for (var i = 1; i < 8; i++) { 116 | if (emptySlots(i)) { 117 | free.push(i.toString()); 118 | } 119 | } 120 | return free; 121 | } 122 | 123 | // Insert disc into slot. 124 | // 0 if computer, 1 if human 125 | function insertDisc(slot, human) { 126 | if (human) { 127 | var playerColor = '#879E2C' 128 | $('#' + slot).attr('status', 'human'); 129 | } 130 | else { 131 | var playerColor = '#61B7D0'; 132 | $('#' + slot).attr('status', 'computer'); 133 | } 134 | $('#' + slot).stop(); 135 | $('#' + slot).css('cursor', 'auto'); 136 | $('#' + slot).css('background', playerColor); 137 | $('#' + slot).css('border-color', playerColor); 138 | } 139 | 140 | // Clear slot 141 | // 'all' to clear all slots 142 | function clearSlot(slot) { 143 | if (slot === 'all') { 144 | slot = '.slot'; 145 | } 146 | else { 147 | slot = '#' + slot; 148 | } 149 | $(slot).attr('status', 'empty'); 150 | $(slot).css('cursor', 'pointer'); 151 | $(slot).css('background', ''); 152 | $(slot).css('border-color', '#112734'); 153 | } 154 | 155 | // See which slot a disc will end up at if dropped in column 156 | function testDrop(column) { 157 | if (empty = emptySlots(column)) { 158 | return empty[empty.length - 1]; 159 | } 160 | return false; 161 | } 162 | 163 | // Drop a disc with animation through column 164 | // 0 if computer, 1 if human 165 | function dropDisc(column, human, phrase) { 166 | var empty = emptySlots(column); 167 | var i = 0; 168 | var drop = window.setInterval(function() { 169 | if (i > 0) { 170 | clearSlot(empty[i - 1]); 171 | } 172 | insertDisc(empty[i], human); 173 | i++; 174 | if (i === empty.length) { 175 | window.clearInterval(drop); 176 | if (phrase) { talk.say(phrase) } 177 | nextMove(human); 178 | } 179 | }, 53); 180 | } 181 | 182 | // Move the game along after a disc is dropped 183 | // 0 for computer, 1 for human 184 | function nextMove(human) { 185 | var analysis = { 186 | 'computer': analyzeBoard('computer'), 187 | 'human': analyzeBoard('human') 188 | }; 189 | if (human) { 190 | if (analysis['human']['win'].length) { 191 | console.log('COMPUTER: LOSE'); 192 | resetGame(human); 193 | } 194 | else { 195 | window.setTimeout(function() { 196 | showAnalysis(analysis); 197 | }, 100); 198 | } 199 | } 200 | else { 201 | if (analysis['computer']['win'].length) { 202 | console.log('COMPUTER: WIN'); 203 | resetGame(human); 204 | } 205 | else { 206 | myTurn = 1; 207 | $('.slot').each(function(index) { 208 | if ($(this).attr('status') === 'empty') { 209 | $(this).css('cursor', 'pointer'); 210 | } 211 | }); 212 | } 213 | } 214 | } 215 | 216 | // Reset game, increase scoreboard 217 | // 0 is computer winner, 1 if human winner 218 | // 2 if draw 219 | function resetGame(winner) { 220 | window.setTimeout(function() { 221 | $('#board').fadeOut(function() { 222 | $('.computer').text(wins[0]); 223 | $('.human').text(wins[1]); 224 | $('#wins').fadeIn(function() { 225 | if (winner === 1) { 226 | talk.say('losing'); 227 | } 228 | else if (winner === 2) { 229 | talk.say('draw'); 230 | } 231 | else if (!wins[1] && Math.floor(Math.random()*2)) { 232 | talk.say('undefeated'); 233 | } 234 | else { 235 | talk.say('winning'); 236 | } 237 | window.setTimeout(function() { 238 | wins[winner]++; 239 | $('.computer').text(wins[0]); 240 | $('.human').text(wins[1]); 241 | }, 600); 242 | window.setTimeout(function() { 243 | $('#wins').fadeOut(function() { 244 | cnnctfr.newGame(); 245 | $('#board').fadeIn(); 246 | }); 247 | }, 3400); 248 | }); 249 | }); 250 | }, 2500); 251 | } 252 | 253 | // If slot is clicked 254 | $('.slot').click(function() { 255 | var row = $(this).attr('id')[0]; 256 | var column = $(this).attr('id')[1]; 257 | if (myTurn && ($(this).attr('status') === 'empty')) { 258 | myTurn = 0; 259 | $('.slot').css('cursor', 'auto'); 260 | console.log('HUMAN: PLAYING MOVE AT ' + testDrop(column).toUpperCase()); 261 | dropDisc(column, 1); 262 | } 263 | }); 264 | 265 | // Analyze board looking for winning combinations 266 | // Criteria must be 'human' or 'computer' 267 | // By default, just handles wins and draws 268 | // Also returns an object containing: 269 | // win: Winning combination, if any 270 | // nearWins: With 1 disc missing if any 271 | // possibleWins: With 2 discs missing, if any 272 | // distantWins: With 3 discs missing, if any 273 | // disadvantage: Array of disadvantageous moves 274 | // Missing disc location(s) arranged from more to less critical 275 | function analyzeBoard(criteria) { 276 | var win = []; 277 | var nearWins = []; 278 | var possibleWins = []; 279 | var distantWins = []; 280 | var disadvantage = []; 281 | var distantDisadvantage = []; 282 | shuffle(winning); 283 | for (var i in winning) { 284 | var m = 0; 285 | var near = []; 286 | for (var r in winning[i]) { 287 | if ($('#' + winning[i][r]).attr('status') === criteria) { 288 | m++; 289 | if ($('#' + winning[i][r - 1]).attr('status') === 'empty') { 290 | if (near.indexOf(winning[i][r - 1]) >= 0) { 291 | near.splice(near.indexOf(winning[i][r - 1]), 1); 292 | } 293 | near.unshift(winning[i][r - 1]); 294 | } 295 | if ($('#' + winning[i][r + 1]).attr('status') === 'empty') { 296 | if (near.indexOf(winning[i][r + 1]) >= 0) { 297 | near.splice(near.indexOf(winning[i][r + 1]), 1); 298 | } 299 | near.unshift(winning[i][r + 1]); 300 | } 301 | } 302 | else if ($('#' + winning[i][r]).attr('status') === 'empty') { 303 | if (near.indexOf(winning[i][r]) < 0) { 304 | near.push(winning[i][r]); 305 | } 306 | else { 307 | near.splice(near.indexOf(winning[i][r]), 1); 308 | near.unshift(winning[i][r]); 309 | } 310 | } 311 | } 312 | if (m === 4) { 313 | for (var r in winning[i]) { 314 | $('#' + winning[i][r]).css('border-color', '#FFF'); 315 | win.push(winning[i][r]); 316 | } 317 | $('.slot').css('cursor', 'auto'); 318 | } 319 | else if ((m === 3) && (near.length === 1)) { 320 | var p = abc[abc.indexOf(near[0][0]) + 1] + near[0][1]; 321 | if (($('#' + p).attr('status') === 'empty') && (disadvantage.indexOf(p) < 0)) { 322 | disadvantage.push(p); 323 | } 324 | if (nearWins.indexOf(near[0]) < 0) { 325 | nearWins.push(near[0]); 326 | } 327 | } 328 | else if ((m === 2) && (near.length === 2)) { 329 | for (var d in near) { 330 | var p = abc[abc.indexOf(near[d][0]) + 1] + near[d][1]; 331 | if (($('#' + p).attr('status') === 'empty') && (distantDisadvantage.indexOf(p) < 0)) { 332 | distantDisadvantage.push(p); 333 | } 334 | } 335 | if (possibleWins.indexOf(near) < 0) { 336 | possibleWins.push(near); 337 | } 338 | } 339 | else if ((m === 1) && (near.length === 3)) { 340 | if (distantWins.indexOf(near) < 0) { 341 | distantWins.push(near); 342 | } 343 | } 344 | } 345 | // Detect draw 346 | var draw = 1; 347 | $('.slot').each(function(index) { 348 | if ($(this).attr('status') === 'empty') { 349 | draw = 0; 350 | } 351 | }); 352 | if (draw) { 353 | resetGame(2); 354 | } 355 | return { 356 | 'win': win, 357 | 'nearWins': nearWins, 358 | 'possibleWins': possibleWins, 359 | 'distantWins': distantWins, 360 | 'disadvantage': disadvantage, 361 | 'distantDisadvantage': distantDisadvantage 362 | }; 363 | } 364 | 365 | // Visualizes AI thinking process 366 | // Before actually making move 367 | function showAnalysis(analysis) { 368 | var slots = []; 369 | for (var i in analysis) { 370 | for (var r in analysis[i]) { 371 | for (var d in analysis[i][r]) { 372 | for (var s in analysis[i][r][d]) { 373 | slots.push(analysis[i][r][d][s]); 374 | } 375 | } 376 | } 377 | } 378 | var i = 0; 379 | var show = window.setInterval(function() { 380 | if (i > 0) { 381 | $('#' + slots[i - 1]).animate({'border-color': '#879E2C'}, 190); 382 | } 383 | if (i === slots.length) { 384 | window.clearInterval(show); 385 | window.setTimeout(function() { 386 | computerPlay(analysis); 387 | }, 20); 388 | } 389 | i++; 390 | $('#' + slots[i]).css('border-color', 'rgba(64, 145, 244, 1)'); 391 | }, 20); 392 | } 393 | 394 | // Computer AI 395 | // Needs analysis object as input in order to work: 396 | // analysis = { 397 | // 'computer': analyzeBoard('computer'), 398 | // 'human': analyzeBoard('human') 399 | // }; 400 | var computerPlay = function(analysis) { 401 | computerPlay.detectThreats(analysis); 402 | if (computerPlay.win(analysis)) { return true } 403 | if (computerPlay.block(analysis)) { return true } 404 | if (computerPlay.offensive(analysis)) { return true } 405 | if (computerPlay.defensive(analysis)) { return true } 406 | if (computerPlay.distantOffensive(analysis)) { return true } 407 | if (computerPlay.distantDefensive(analysis)) { return true } 408 | if (computerPlay.random()) { return true } 409 | else { return false } 410 | } 411 | 412 | computerPlay.detectThreats = function(analysis) { 413 | if (analysis['human']['disadvantage'].length) { 414 | for (var i in analysis['human']['disadvantage']) { 415 | if (badMoves.indexOf(analysis['human']['disadvantage'][i]) < 0) { 416 | console.log('COMPUTER: DISASTROUS MOVE DETECTED AT ' 417 | + analysis['human']['disadvantage'][i].toUpperCase()); 418 | badMoves.push(analysis['human']['disadvantage'][i]); 419 | } 420 | } 421 | } 422 | if (analysis['computer']['disadvantage'].length) { 423 | for (var i in analysis['computer']['disadvantage']) { 424 | if (badMoves.indexOf(analysis['computer']['disadvantage'][i]) < 0) { 425 | console.log('COMPUTER: DISADVANTAGEOUS MOVE DETECTED AT ' 426 | + analysis['computer']['disadvantage'][i].toUpperCase()); 427 | badMoves.push(analysis['computer']['disadvantage'][i]); 428 | } 429 | } 430 | } 431 | if (analysis['human']['distantDisadvantage'].length) { 432 | console.log('COMPUTER: DISTANTLY DISADVANTAGEOUS MOVE DETECTED AT ' 433 | + analysis['human']['distantDisadvantage'].join(', ').toUpperCase()); 434 | distantlyBadMoves = analysis['human']['distantDisadvantage'].slice(); 435 | } 436 | } 437 | 438 | computerPlay.win = function(analysis) { 439 | if (nearWin = analysis['computer']['nearWins']) { 440 | for (var i in nearWin) { 441 | if (testDrop(nearWin[i][1]) === nearWin[i]) { 442 | console.log('COMPUTER: PLAYING WINNING MOVE AT ' 443 | + nearWin[i].toUpperCase()); 444 | dropDisc(nearWin[i][1], 0); 445 | return true; 446 | } 447 | } 448 | } 449 | return false; 450 | } 451 | 452 | computerPlay.block = function(analysis) { 453 | if (nearWin = analysis['human']['nearWins']) { 454 | for (var i in nearWin) { 455 | if (testDrop(nearWin[i][1]) === nearWin[i]) { 456 | console.log('COMPUTER: PLAYING BLOCKING MOVE AT ' 457 | + nearWin[i].toUpperCase()); 458 | dropDisc(nearWin[i][1], 0, 'blocking'); 459 | return true; 460 | } 461 | } 462 | } 463 | return false; 464 | } 465 | 466 | computerPlay.offensive = function(analysis) { 467 | if (possibleWin = analysis['computer']['possibleWins']) { 468 | for (var i in possibleWin) { 469 | for (var r in possibleWin[i]) { 470 | if ((testDrop(possibleWin[i][r][1]) === possibleWin[i][r]) 471 | && (badMoves.indexOf(possibleWin[i][r]) < 0)) { 472 | console.log('COMPUTER: PLAYING OFFENSIVE MOVE AT ' 473 | + possibleWin[i][r].toUpperCase()); 474 | dropDisc(possibleWin[i][r][1], 0); 475 | return true; 476 | } 477 | } 478 | } 479 | } 480 | return false; 481 | } 482 | 483 | computerPlay.defensive = function(analysis) { 484 | if (possibleWin = analysis['human']['possibleWins']) { 485 | for (var i in possibleWin) { 486 | for (var r in possibleWin[i]) { 487 | if ((testDrop(possibleWin[i][r][1]) === possibleWin[i][r]) 488 | && (badMoves.indexOf(possibleWin[i][r]) < 0)) { 489 | console.log('COMPUTER: PLAYING DEFENSIVE MOVE AT ' 490 | + possibleWin[i][r].toUpperCase()); 491 | dropDisc(possibleWin[i][r][1], 0); 492 | return true; 493 | } 494 | } 495 | } 496 | } 497 | return false; 498 | } 499 | 500 | computerPlay.distantOffensive = function(analysis) { 501 | if (distantWin = analysis['computer']['distantWins']) { 502 | for (var i in distantWin) { 503 | for (var r in distantWin[i]) { 504 | if ((testDrop(distantWin[i][r][1]) === distantWin[i][r]) 505 | && (badMoves.indexOf(distantWin[i][r]) < 0) 506 | && (distantlyBadMoves.indexOf(distantWin[i][r]) < 0)) { 507 | console.log('COMPUTER: PLAYING DISTANTLY RELEVANT MOVE AT ' 508 | + distantWin[i][r].toUpperCase()); 509 | dropDisc(distantWin[i][r][1], 0); 510 | return true; 511 | } 512 | } 513 | } 514 | } 515 | return false; 516 | } 517 | 518 | computerPlay.distantDefensive = function(analysis) { 519 | if (distantWin = analysis['human']['distantWins']) { 520 | for (var i in distantWin) { 521 | for (var r in distantWin[i]) { 522 | if ((testDrop(distantWin[i][r][1]) === distantWin[i][r]) 523 | && (badMoves.indexOf(distantWin[i][r]) < 0) 524 | && (distantlyBadMoves.indexOf(distantWin[i][r]) < 0)) { 525 | console.log('COMPUTER: BLOCKING DISTANTLY RELEVANT THREAT AT ' 526 | + distantWin[i][r].toUpperCase()); 527 | dropDisc(distantWin[i][r][1], 0); 528 | return true; 529 | } 530 | } 531 | } 532 | } 533 | return false; 534 | } 535 | 536 | computerPlay.random = function() { 537 | var free = freeColumns(); 538 | for (var i in badMoves) { 539 | if ((free.indexOf(badMoves[i][1]) >= 0) && (free.length > 1)) { 540 | free.splice(free.indexOf(badMoves[i][1]), 1); 541 | } 542 | } 543 | for (var i in distantlyBadMoves) { 544 | if ((free.indexOf(distantlyBadMoves[i][1]) >= 0) && (free.length > 1)) { 545 | free.splice(free.indexOf(distantlyBadMoves[i][1]), 1); 546 | } 547 | } 548 | if ((free.indexOf('1') >= 0) && (free.length > 1)) { 549 | free.splice(free.indexOf('1'), 1); 550 | } 551 | if ((free.indexOf('7') >= 0) && (free.length > 1)) { 552 | free.splice(free.indexOf('7'), 1); 553 | } 554 | r = free[Math.floor(Math.random()*free.length)]; 555 | console.log('COMPUTER: PLAYING RANDOM MOVE AT ' 556 | + testDrop(r).toUpperCase()); 557 | dropDisc(r, 0); 558 | return true; 559 | } 560 | 561 | 562 | cnnctfr.newGame(); 563 | 564 | }); 565 | -------------------------------------------------------------------------------- /facebook/apps/connect-four/js/jquery.js: -------------------------------------------------------------------------------- 1 | /*! jQuery v1.8.3 jquery.com | jquery.org/license */ 2 | (function(e,t){function _(e){var t=M[e]={};return v.each(e.split(y),function(e,n){t[n]=!0}),t}function H(e,n,r){if(r===t&&e.nodeType===1){var i="data-"+n.replace(P,"-$1").toLowerCase();r=e.getAttribute(i);if(typeof r=="string"){try{r=r==="true"?!0:r==="false"?!1:r==="null"?null:+r+""===r?+r:D.test(r)?v.parseJSON(r):r}catch(s){}v.data(e,n,r)}else r=t}return r}function B(e){var t;for(t in e){if(t==="data"&&v.isEmptyObject(e[t]))continue;if(t!=="toJSON")return!1}return!0}function et(){return!1}function tt(){return!0}function ut(e){return!e||!e.parentNode||e.parentNode.nodeType===11}function at(e,t){do e=e[t];while(e&&e.nodeType!==1);return e}function ft(e,t,n){t=t||0;if(v.isFunction(t))return v.grep(e,function(e,r){var i=!!t.call(e,r,e);return i===n});if(t.nodeType)return v.grep(e,function(e,r){return e===t===n});if(typeof t=="string"){var r=v.grep(e,function(e){return e.nodeType===1});if(it.test(t))return v.filter(t,r,!n);t=v.filter(t,r)}return v.grep(e,function(e,r){return v.inArray(e,t)>=0===n})}function lt(e){var t=ct.split("|"),n=e.createDocumentFragment();if(n.createElement)while(t.length)n.createElement(t.pop());return n}function Lt(e,t){return e.getElementsByTagName(t)[0]||e.appendChild(e.ownerDocument.createElement(t))}function At(e,t){if(t.nodeType!==1||!v.hasData(e))return;var n,r,i,s=v._data(e),o=v._data(t,s),u=s.events;if(u){delete o.handle,o.events={};for(n in u)for(r=0,i=u[n].length;r").appendTo(i.body),n=t.css("display");t.remove();if(n==="none"||n===""){Pt=i.body.appendChild(Pt||v.extend(i.createElement("iframe"),{frameBorder:0,width:0,height:0}));if(!Ht||!Pt.createElement)Ht=(Pt.contentWindow||Pt.contentDocument).document,Ht.write(""),Ht.close();t=Ht.body.appendChild(Ht.createElement(e)),n=Dt(t,"display"),i.body.removeChild(Pt)}return Wt[e]=n,n}function fn(e,t,n,r){var i;if(v.isArray(t))v.each(t,function(t,i){n||sn.test(e)?r(e,i):fn(e+"["+(typeof i=="object"?t:"")+"]",i,n,r)});else if(!n&&v.type(t)==="object")for(i in t)fn(e+"["+i+"]",t[i],n,r);else r(e,t)}function Cn(e){return function(t,n){typeof t!="string"&&(n=t,t="*");var r,i,s,o=t.toLowerCase().split(y),u=0,a=o.length;if(v.isFunction(n))for(;u)[^>]*$|#([\w\-]*)$)/,E=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,S=/^[\],:{}\s]*$/,x=/(?:^|:|,)(?:\s*\[)+/g,T=/\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g,N=/"[^"\\\r\n]*"|true|false|null|-?(?:\d\d*\.|)\d+(?:[eE][\-+]?\d+|)/g,C=/^-ms-/,k=/-([\da-z])/gi,L=function(e,t){return(t+"").toUpperCase()},A=function(){i.addEventListener?(i.removeEventListener("DOMContentLoaded",A,!1),v.ready()):i.readyState==="complete"&&(i.detachEvent("onreadystatechange",A),v.ready())},O={};v.fn=v.prototype={constructor:v,init:function(e,n,r){var s,o,u,a;if(!e)return this;if(e.nodeType)return this.context=this[0]=e,this.length=1,this;if(typeof e=="string"){e.charAt(0)==="<"&&e.charAt(e.length-1)===">"&&e.length>=3?s=[null,e,null]:s=w.exec(e);if(s&&(s[1]||!n)){if(s[1])return n=n instanceof v?n[0]:n,a=n&&n.nodeType?n.ownerDocument||n:i,e=v.parseHTML(s[1],a,!0),E.test(s[1])&&v.isPlainObject(n)&&this.attr.call(e,n,!0),v.merge(this,e);o=i.getElementById(s[2]);if(o&&o.parentNode){if(o.id!==s[2])return r.find(e);this.length=1,this[0]=o}return this.context=i,this.selector=e,this}return!n||n.jquery?(n||r).find(e):this.constructor(n).find(e)}return v.isFunction(e)?r.ready(e):(e.selector!==t&&(this.selector=e.selector,this.context=e.context),v.makeArray(e,this))},selector:"",jquery:"1.8.3",length:0,size:function(){return this.length},toArray:function(){return l.call(this)},get:function(e){return e==null?this.toArray():e<0?this[this.length+e]:this[e]},pushStack:function(e,t,n){var r=v.merge(this.constructor(),e);return r.prevObject=this,r.context=this.context,t==="find"?r.selector=this.selector+(this.selector?" ":"")+n:t&&(r.selector=this.selector+"."+t+"("+n+")"),r},each:function(e,t){return v.each(this,e,t)},ready:function(e){return v.ready.promise().done(e),this},eq:function(e){return e=+e,e===-1?this.slice(e):this.slice(e,e+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(l.apply(this,arguments),"slice",l.call(arguments).join(","))},map:function(e){return this.pushStack(v.map(this,function(t,n){return e.call(t,n,t)}))},end:function(){return this.prevObject||this.constructor(null)},push:f,sort:[].sort,splice:[].splice},v.fn.init.prototype=v.fn,v.extend=v.fn.extend=function(){var e,n,r,i,s,o,u=arguments[0]||{},a=1,f=arguments.length,l=!1;typeof u=="boolean"&&(l=u,u=arguments[1]||{},a=2),typeof u!="object"&&!v.isFunction(u)&&(u={}),f===a&&(u=this,--a);for(;a0)return;r.resolveWith(i,[v]),v.fn.trigger&&v(i).trigger("ready").off("ready")},isFunction:function(e){return v.type(e)==="function"},isArray:Array.isArray||function(e){return v.type(e)==="array"},isWindow:function(e){return e!=null&&e==e.window},isNumeric:function(e){return!isNaN(parseFloat(e))&&isFinite(e)},type:function(e){return e==null?String(e):O[h.call(e)]||"object"},isPlainObject:function(e){if(!e||v.type(e)!=="object"||e.nodeType||v.isWindow(e))return!1;try{if(e.constructor&&!p.call(e,"constructor")&&!p.call(e.constructor.prototype,"isPrototypeOf"))return!1}catch(n){return!1}var r;for(r in e);return r===t||p.call(e,r)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},error:function(e){throw new Error(e)},parseHTML:function(e,t,n){var r;return!e||typeof e!="string"?null:(typeof t=="boolean"&&(n=t,t=0),t=t||i,(r=E.exec(e))?[t.createElement(r[1])]:(r=v.buildFragment([e],t,n?null:[]),v.merge([],(r.cacheable?v.clone(r.fragment):r.fragment).childNodes)))},parseJSON:function(t){if(!t||typeof t!="string")return null;t=v.trim(t);if(e.JSON&&e.JSON.parse)return e.JSON.parse(t);if(S.test(t.replace(T,"@").replace(N,"]").replace(x,"")))return(new Function("return "+t))();v.error("Invalid JSON: "+t)},parseXML:function(n){var r,i;if(!n||typeof n!="string")return null;try{e.DOMParser?(i=new DOMParser,r=i.parseFromString(n,"text/xml")):(r=new ActiveXObject("Microsoft.XMLDOM"),r.async="false",r.loadXML(n))}catch(s){r=t}return(!r||!r.documentElement||r.getElementsByTagName("parsererror").length)&&v.error("Invalid XML: "+n),r},noop:function(){},globalEval:function(t){t&&g.test(t)&&(e.execScript||function(t){e.eval.call(e,t)})(t)},camelCase:function(e){return e.replace(C,"ms-").replace(k,L)},nodeName:function(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()},each:function(e,n,r){var i,s=0,o=e.length,u=o===t||v.isFunction(e);if(r){if(u){for(i in e)if(n.apply(e[i],r)===!1)break}else for(;s0&&e[0]&&e[a-1]||a===0||v.isArray(e));if(f)for(;u-1)a.splice(n,1),i&&(n<=o&&o--,n<=u&&u--)}),this},has:function(e){return v.inArray(e,a)>-1},empty:function(){return a=[],this},disable:function(){return a=f=n=t,this},disabled:function(){return!a},lock:function(){return f=t,n||c.disable(),this},locked:function(){return!f},fireWith:function(e,t){return t=t||[],t=[e,t.slice?t.slice():t],a&&(!r||f)&&(i?f.push(t):l(t)),this},fire:function(){return c.fireWith(this,arguments),this},fired:function(){return!!r}};return c},v.extend({Deferred:function(e){var t=[["resolve","done",v.Callbacks("once memory"),"resolved"],["reject","fail",v.Callbacks("once memory"),"rejected"],["notify","progress",v.Callbacks("memory")]],n="pending",r={state:function(){return n},always:function(){return i.done(arguments).fail(arguments),this},then:function(){var e=arguments;return v.Deferred(function(n){v.each(t,function(t,r){var s=r[0],o=e[t];i[r[1]](v.isFunction(o)?function(){var e=o.apply(this,arguments);e&&v.isFunction(e.promise)?e.promise().done(n.resolve).fail(n.reject).progress(n.notify):n[s+"With"](this===i?n:this,[e])}:n[s])}),e=null}).promise()},promise:function(e){return e!=null?v.extend(e,r):r}},i={};return r.pipe=r.then,v.each(t,function(e,s){var o=s[2],u=s[3];r[s[1]]=o.add,u&&o.add(function(){n=u},t[e^1][2].disable,t[2][2].lock),i[s[0]]=o.fire,i[s[0]+"With"]=o.fireWith}),r.promise(i),e&&e.call(i,i),i},when:function(e){var t=0,n=l.call(arguments),r=n.length,i=r!==1||e&&v.isFunction(e.promise)?r:0,s=i===1?e:v.Deferred(),o=function(e,t,n){return function(r){t[e]=this,n[e]=arguments.length>1?l.call(arguments):r,n===u?s.notifyWith(t,n):--i||s.resolveWith(t,n)}},u,a,f;if(r>1){u=new Array(r),a=new Array(r),f=new Array(r);for(;t
a",n=p.getElementsByTagName("*"),r=p.getElementsByTagName("a")[0];if(!n||!r||!n.length)return{};s=i.createElement("select"),o=s.appendChild(i.createElement("option")),u=p.getElementsByTagName("input")[0],r.style.cssText="top:1px;float:left;opacity:.5",t={leadingWhitespace:p.firstChild.nodeType===3,tbody:!p.getElementsByTagName("tbody").length,htmlSerialize:!!p.getElementsByTagName("link").length,style:/top/.test(r.getAttribute("style")),hrefNormalized:r.getAttribute("href")==="/a",opacity:/^0.5/.test(r.style.opacity),cssFloat:!!r.style.cssFloat,checkOn:u.value==="on",optSelected:o.selected,getSetAttribute:p.className!=="t",enctype:!!i.createElement("form").enctype,html5Clone:i.createElement("nav").cloneNode(!0).outerHTML!=="<:nav>",boxModel:i.compatMode==="CSS1Compat",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0,boxSizingReliable:!0,pixelPosition:!1},u.checked=!0,t.noCloneChecked=u.cloneNode(!0).checked,s.disabled=!0,t.optDisabled=!o.disabled;try{delete p.test}catch(d){t.deleteExpando=!1}!p.addEventListener&&p.attachEvent&&p.fireEvent&&(p.attachEvent("onclick",h=function(){t.noCloneEvent=!1}),p.cloneNode(!0).fireEvent("onclick"),p.detachEvent("onclick",h)),u=i.createElement("input"),u.value="t",u.setAttribute("type","radio"),t.radioValue=u.value==="t",u.setAttribute("checked","checked"),u.setAttribute("name","t"),p.appendChild(u),a=i.createDocumentFragment(),a.appendChild(p.lastChild),t.checkClone=a.cloneNode(!0).cloneNode(!0).lastChild.checked,t.appendChecked=u.checked,a.removeChild(u),a.appendChild(p);if(p.attachEvent)for(l in{submit:!0,change:!0,focusin:!0})f="on"+l,c=f in p,c||(p.setAttribute(f,"return;"),c=typeof p[f]=="function"),t[l+"Bubbles"]=c;return v(function(){var n,r,s,o,u="padding:0;margin:0;border:0;display:block;overflow:hidden;",a=i.getElementsByTagName("body")[0];if(!a)return;n=i.createElement("div"),n.style.cssText="visibility:hidden;border:0;width:0;height:0;position:static;top:0;margin-top:1px",a.insertBefore(n,a.firstChild),r=i.createElement("div"),n.appendChild(r),r.innerHTML="
t
",s=r.getElementsByTagName("td"),s[0].style.cssText="padding:0;margin:0;border:0;display:none",c=s[0].offsetHeight===0,s[0].style.display="",s[1].style.display="none",t.reliableHiddenOffsets=c&&s[0].offsetHeight===0,r.innerHTML="",r.style.cssText="box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;",t.boxSizing=r.offsetWidth===4,t.doesNotIncludeMarginInBodyOffset=a.offsetTop!==1,e.getComputedStyle&&(t.pixelPosition=(e.getComputedStyle(r,null)||{}).top!=="1%",t.boxSizingReliable=(e.getComputedStyle(r,null)||{width:"4px"}).width==="4px",o=i.createElement("div"),o.style.cssText=r.style.cssText=u,o.style.marginRight=o.style.width="0",r.style.width="1px",r.appendChild(o),t.reliableMarginRight=!parseFloat((e.getComputedStyle(o,null)||{}).marginRight)),typeof r.style.zoom!="undefined"&&(r.innerHTML="",r.style.cssText=u+"width:1px;padding:1px;display:inline;zoom:1",t.inlineBlockNeedsLayout=r.offsetWidth===3,r.style.display="block",r.style.overflow="visible",r.innerHTML="

",r.firstChild.style.width="5px",t.shrinkWrapBlocks=r.offsetWidth!==3,n.style.zoom=1),a.removeChild(n),n=r=s=o=null}),a.removeChild(p),n=r=s=o=u=a=p=null,t}();var D=/(?:\{[\s\S]*\}|\[[\s\S]*\])$/,P=/([A-Z])/g;v.extend({cache:{},deletedIds:[],uuid:0,expando:"jQuery"+(v.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(e){return e=e.nodeType?v.cache[e[v.expando]]:e[v.expando],!!e&&!B(e)},data:function(e,n,r,i){if(!v.acceptData(e))return;var s,o,u=v.expando,a=typeof n=="string",f=e.nodeType,l=f?v.cache:e,c=f?e[u]:e[u]&&u;if((!c||!l[c]||!i&&!l[c].data)&&a&&r===t)return;c||(f?e[u]=c=v.deletedIds.pop()||v.guid++:c=u),l[c]||(l[c]={},f||(l[c].toJSON=v.noop));if(typeof n=="object"||typeof n=="function")i?l[c]=v.extend(l[c],n):l[c].data=v.extend(l[c].data,n);return s=l[c],i||(s.data||(s.data={}),s=s.data),r!==t&&(s[v.camelCase(n)]=r),a?(o=s[n],o==null&&(o=s[v.camelCase(n)])):o=s,o},removeData:function(e,t,n){if(!v.acceptData(e))return;var r,i,s,o=e.nodeType,u=o?v.cache:e,a=o?e[v.expando]:v.expando;if(!u[a])return;if(t){r=n?u[a]:u[a].data;if(r){v.isArray(t)||(t in r?t=[t]:(t=v.camelCase(t),t in r?t=[t]:t=t.split(" ")));for(i=0,s=t.length;i1,null,!1))},removeData:function(e){return this.each(function(){v.removeData(this,e)})}}),v.extend({queue:function(e,t,n){var r;if(e)return t=(t||"fx")+"queue",r=v._data(e,t),n&&(!r||v.isArray(n)?r=v._data(e,t,v.makeArray(n)):r.push(n)),r||[]},dequeue:function(e,t){t=t||"fx";var n=v.queue(e,t),r=n.length,i=n.shift(),s=v._queueHooks(e,t),o=function(){v.dequeue(e,t)};i==="inprogress"&&(i=n.shift(),r--),i&&(t==="fx"&&n.unshift("inprogress"),delete s.stop,i.call(e,o,s)),!r&&s&&s.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return v._data(e,n)||v._data(e,n,{empty:v.Callbacks("once memory").add(function(){v.removeData(e,t+"queue",!0),v.removeData(e,n,!0)})})}}),v.fn.extend({queue:function(e,n){var r=2;return typeof e!="string"&&(n=e,e="fx",r--),arguments.length1)},removeAttr:function(e){return this.each(function(){v.removeAttr(this,e)})},prop:function(e,t){return v.access(this,v.prop,e,t,arguments.length>1)},removeProp:function(e){return e=v.propFix[e]||e,this.each(function(){try{this[e]=t,delete this[e]}catch(n){}})},addClass:function(e){var t,n,r,i,s,o,u;if(v.isFunction(e))return this.each(function(t){v(this).addClass(e.call(this,t,this.className))});if(e&&typeof e=="string"){t=e.split(y);for(n=0,r=this.length;n=0)r=r.replace(" "+n[s]+" "," ");i.className=e?v.trim(r):""}}}return this},toggleClass:function(e,t){var n=typeof e,r=typeof t=="boolean";return v.isFunction(e)?this.each(function(n){v(this).toggleClass(e.call(this,n,this.className,t),t)}):this.each(function(){if(n==="string"){var i,s=0,o=v(this),u=t,a=e.split(y);while(i=a[s++])u=r?u:!o.hasClass(i),o[u?"addClass":"removeClass"](i)}else if(n==="undefined"||n==="boolean")this.className&&v._data(this,"__className__",this.className),this.className=this.className||e===!1?"":v._data(this,"__className__")||""})},hasClass:function(e){var t=" "+e+" ",n=0,r=this.length;for(;n=0)return!0;return!1},val:function(e){var n,r,i,s=this[0];if(!arguments.length){if(s)return n=v.valHooks[s.type]||v.valHooks[s.nodeName.toLowerCase()],n&&"get"in n&&(r=n.get(s,"value"))!==t?r:(r=s.value,typeof r=="string"?r.replace(R,""):r==null?"":r);return}return i=v.isFunction(e),this.each(function(r){var s,o=v(this);if(this.nodeType!==1)return;i?s=e.call(this,r,o.val()):s=e,s==null?s="":typeof s=="number"?s+="":v.isArray(s)&&(s=v.map(s,function(e){return e==null?"":e+""})),n=v.valHooks[this.type]||v.valHooks[this.nodeName.toLowerCase()];if(!n||!("set"in n)||n.set(this,s,"value")===t)this.value=s})}}),v.extend({valHooks:{option:{get:function(e){var t=e.attributes.value;return!t||t.specified?e.value:e.text}},select:{get:function(e){var t,n,r=e.options,i=e.selectedIndex,s=e.type==="select-one"||i<0,o=s?null:[],u=s?i+1:r.length,a=i<0?u:s?i:0;for(;a=0}),n.length||(e.selectedIndex=-1),n}}},attrFn:{},attr:function(e,n,r,i){var s,o,u,a=e.nodeType;if(!e||a===3||a===8||a===2)return;if(i&&v.isFunction(v.fn[n]))return v(e)[n](r);if(typeof e.getAttribute=="undefined")return v.prop(e,n,r);u=a!==1||!v.isXMLDoc(e),u&&(n=n.toLowerCase(),o=v.attrHooks[n]||(X.test(n)?F:j));if(r!==t){if(r===null){v.removeAttr(e,n);return}return o&&"set"in o&&u&&(s=o.set(e,r,n))!==t?s:(e.setAttribute(n,r+""),r)}return o&&"get"in o&&u&&(s=o.get(e,n))!==null?s:(s=e.getAttribute(n),s===null?t:s)},removeAttr:function(e,t){var n,r,i,s,o=0;if(t&&e.nodeType===1){r=t.split(y);for(;o=0}})});var $=/^(?:textarea|input|select)$/i,J=/^([^\.]*|)(?:\.(.+)|)$/,K=/(?:^|\s)hover(\.\S+|)\b/,Q=/^key/,G=/^(?:mouse|contextmenu)|click/,Y=/^(?:focusinfocus|focusoutblur)$/,Z=function(e){return v.event.special.hover?e:e.replace(K,"mouseenter$1 mouseleave$1")};v.event={add:function(e,n,r,i,s){var o,u,a,f,l,c,h,p,d,m,g;if(e.nodeType===3||e.nodeType===8||!n||!r||!(o=v._data(e)))return;r.handler&&(d=r,r=d.handler,s=d.selector),r.guid||(r.guid=v.guid++),a=o.events,a||(o.events=a={}),u=o.handle,u||(o.handle=u=function(e){return typeof v=="undefined"||!!e&&v.event.triggered===e.type?t:v.event.dispatch.apply(u.elem,arguments)},u.elem=e),n=v.trim(Z(n)).split(" ");for(f=0;f=0&&(y=y.slice(0,-1),a=!0),y.indexOf(".")>=0&&(b=y.split("."),y=b.shift(),b.sort());if((!s||v.event.customEvent[y])&&!v.event.global[y])return;n=typeof n=="object"?n[v.expando]?n:new v.Event(y,n):new v.Event(y),n.type=y,n.isTrigger=!0,n.exclusive=a,n.namespace=b.join("."),n.namespace_re=n.namespace?new RegExp("(^|\\.)"+b.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,h=y.indexOf(":")<0?"on"+y:"";if(!s){u=v.cache;for(f in u)u[f].events&&u[f].events[y]&&v.event.trigger(n,r,u[f].handle.elem,!0);return}n.result=t,n.target||(n.target=s),r=r!=null?v.makeArray(r):[],r.unshift(n),p=v.event.special[y]||{};if(p.trigger&&p.trigger.apply(s,r)===!1)return;m=[[s,p.bindType||y]];if(!o&&!p.noBubble&&!v.isWindow(s)){g=p.delegateType||y,l=Y.test(g+y)?s:s.parentNode;for(c=s;l;l=l.parentNode)m.push([l,g]),c=l;c===(s.ownerDocument||i)&&m.push([c.defaultView||c.parentWindow||e,g])}for(f=0;f=0:v.find(h,this,null,[s]).length),u[h]&&f.push(c);f.length&&w.push({elem:s,matches:f})}d.length>m&&w.push({elem:this,matches:d.slice(m)});for(r=0;r0?this.on(t,null,e,n):this.trigger(t)},Q.test(t)&&(v.event.fixHooks[t]=v.event.keyHooks),G.test(t)&&(v.event.fixHooks[t]=v.event.mouseHooks)}),function(e,t){function nt(e,t,n,r){n=n||[],t=t||g;var i,s,a,f,l=t.nodeType;if(!e||typeof e!="string")return n;if(l!==1&&l!==9)return[];a=o(t);if(!a&&!r)if(i=R.exec(e))if(f=i[1]){if(l===9){s=t.getElementById(f);if(!s||!s.parentNode)return n;if(s.id===f)return n.push(s),n}else if(t.ownerDocument&&(s=t.ownerDocument.getElementById(f))&&u(t,s)&&s.id===f)return n.push(s),n}else{if(i[2])return S.apply(n,x.call(t.getElementsByTagName(e),0)),n;if((f=i[3])&&Z&&t.getElementsByClassName)return S.apply(n,x.call(t.getElementsByClassName(f),0)),n}return vt(e.replace(j,"$1"),t,n,r,a)}function rt(e){return function(t){var n=t.nodeName.toLowerCase();return n==="input"&&t.type===e}}function it(e){return function(t){var n=t.nodeName.toLowerCase();return(n==="input"||n==="button")&&t.type===e}}function st(e){return N(function(t){return t=+t,N(function(n,r){var i,s=e([],n.length,t),o=s.length;while(o--)n[i=s[o]]&&(n[i]=!(r[i]=n[i]))})})}function ot(e,t,n){if(e===t)return n;var r=e.nextSibling;while(r){if(r===t)return-1;r=r.nextSibling}return 1}function ut(e,t){var n,r,s,o,u,a,f,l=L[d][e+" "];if(l)return t?0:l.slice(0);u=e,a=[],f=i.preFilter;while(u){if(!n||(r=F.exec(u)))r&&(u=u.slice(r[0].length)||u),a.push(s=[]);n=!1;if(r=I.exec(u))s.push(n=new m(r.shift())),u=u.slice(n.length),n.type=r[0].replace(j," ");for(o in i.filter)(r=J[o].exec(u))&&(!f[o]||(r=f[o](r)))&&(s.push(n=new m(r.shift())),u=u.slice(n.length),n.type=o,n.matches=r);if(!n)break}return t?u.length:u?nt.error(e):L(e,a).slice(0)}function at(e,t,r){var i=t.dir,s=r&&t.dir==="parentNode",o=w++;return t.first?function(t,n,r){while(t=t[i])if(s||t.nodeType===1)return e(t,n,r)}:function(t,r,u){if(!u){var a,f=b+" "+o+" ",l=f+n;while(t=t[i])if(s||t.nodeType===1){if((a=t[d])===l)return t.sizset;if(typeof a=="string"&&a.indexOf(f)===0){if(t.sizset)return t}else{t[d]=l;if(e(t,r,u))return t.sizset=!0,t;t.sizset=!1}}}else while(t=t[i])if(s||t.nodeType===1)if(e(t,r,u))return t}}function ft(e){return e.length>1?function(t,n,r){var i=e.length;while(i--)if(!e[i](t,n,r))return!1;return!0}:e[0]}function lt(e,t,n,r,i){var s,o=[],u=0,a=e.length,f=t!=null;for(;u-1&&(s[f]=!(o[f]=c))}}else g=lt(g===o?g.splice(d,g.length):g),i?i(null,o,g,a):S.apply(o,g)})}function ht(e){var t,n,r,s=e.length,o=i.relative[e[0].type],u=o||i.relative[" "],a=o?1:0,f=at(function(e){return e===t},u,!0),l=at(function(e){return T.call(t,e)>-1},u,!0),h=[function(e,n,r){return!o&&(r||n!==c)||((t=n).nodeType?f(e,n,r):l(e,n,r))}];for(;a1&&ft(h),a>1&&e.slice(0,a-1).join("").replace(j,"$1"),n,a0,s=e.length>0,o=function(u,a,f,l,h){var p,d,v,m=[],y=0,w="0",x=u&&[],T=h!=null,N=c,C=u||s&&i.find.TAG("*",h&&a.parentNode||a),k=b+=N==null?1:Math.E;T&&(c=a!==g&&a,n=o.el);for(;(p=C[w])!=null;w++){if(s&&p){for(d=0;v=e[d];d++)if(v(p,a,f)){l.push(p);break}T&&(b=k,n=++o.el)}r&&((p=!v&&p)&&y--,u&&x.push(p))}y+=w;if(r&&w!==y){for(d=0;v=t[d];d++)v(x,m,a,f);if(u){if(y>0)while(w--)!x[w]&&!m[w]&&(m[w]=E.call(l));m=lt(m)}S.apply(l,m),T&&!u&&m.length>0&&y+t.length>1&&nt.uniqueSort(l)}return T&&(b=k,c=N),x};return o.el=0,r?N(o):o}function dt(e,t,n){var r=0,i=t.length;for(;r2&&(f=u[0]).type==="ID"&&t.nodeType===9&&!s&&i.relative[u[1].type]){t=i.find.ID(f.matches[0].replace($,""),t,s)[0];if(!t)return n;e=e.slice(u.shift().length)}for(o=J.POS.test(e)?-1:u.length-1;o>=0;o--){f=u[o];if(i.relative[l=f.type])break;if(c=i.find[l])if(r=c(f.matches[0].replace($,""),z.test(u[0].type)&&t.parentNode||t,s)){u.splice(o,1),e=r.length&&u.join("");if(!e)return S.apply(n,x.call(r,0)),n;break}}}return a(e,h)(r,t,s,n,z.test(e)),n}function mt(){}var n,r,i,s,o,u,a,f,l,c,h=!0,p="undefined",d=("sizcache"+Math.random()).replace(".",""),m=String,g=e.document,y=g.documentElement,b=0,w=0,E=[].pop,S=[].push,x=[].slice,T=[].indexOf||function(e){var t=0,n=this.length;for(;ti.cacheLength&&delete e[t.shift()],e[n+" "]=r},e)},k=C(),L=C(),A=C(),O="[\\x20\\t\\r\\n\\f]",M="(?:\\\\.|[-\\w]|[^\\x00-\\xa0])+",_=M.replace("w","w#"),D="([*^$|!~]?=)",P="\\["+O+"*("+M+")"+O+"*(?:"+D+O+"*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|("+_+")|)|)"+O+"*\\]",H=":("+M+")(?:\\((?:(['\"])((?:\\\\.|[^\\\\])*?)\\2|([^()[\\]]*|(?:(?:"+P+")|[^:]|\\\\.)*|.*))\\)|)",B=":(even|odd|eq|gt|lt|nth|first|last)(?:\\("+O+"*((?:-\\d)?\\d*)"+O+"*\\)|)(?=[^-]|$)",j=new RegExp("^"+O+"+|((?:^|[^\\\\])(?:\\\\.)*)"+O+"+$","g"),F=new RegExp("^"+O+"*,"+O+"*"),I=new RegExp("^"+O+"*([\\x20\\t\\r\\n\\f>+~])"+O+"*"),q=new RegExp(H),R=/^(?:#([\w\-]+)|(\w+)|\.([\w\-]+))$/,U=/^:not/,z=/[\x20\t\r\n\f]*[+~]/,W=/:not\($/,X=/h\d/i,V=/input|select|textarea|button/i,$=/\\(?!\\)/g,J={ID:new RegExp("^#("+M+")"),CLASS:new RegExp("^\\.("+M+")"),NAME:new RegExp("^\\[name=['\"]?("+M+")['\"]?\\]"),TAG:new RegExp("^("+M.replace("w","w*")+")"),ATTR:new RegExp("^"+P),PSEUDO:new RegExp("^"+H),POS:new RegExp(B,"i"),CHILD:new RegExp("^:(only|nth|first|last)-child(?:\\("+O+"*(even|odd|(([+-]|)(\\d*)n|)"+O+"*(?:([+-]|)"+O+"*(\\d+)|))"+O+"*\\)|)","i"),needsContext:new RegExp("^"+O+"*[>+~]|"+B,"i")},K=function(e){var t=g.createElement("div");try{return e(t)}catch(n){return!1}finally{t=null}},Q=K(function(e){return e.appendChild(g.createComment("")),!e.getElementsByTagName("*").length}),G=K(function(e){return e.innerHTML="",e.firstChild&&typeof e.firstChild.getAttribute!==p&&e.firstChild.getAttribute("href")==="#"}),Y=K(function(e){e.innerHTML="";var t=typeof e.lastChild.getAttribute("multiple");return t!=="boolean"&&t!=="string"}),Z=K(function(e){return e.innerHTML="",!e.getElementsByClassName||!e.getElementsByClassName("e").length?!1:(e.lastChild.className="e",e.getElementsByClassName("e").length===2)}),et=K(function(e){e.id=d+0,e.innerHTML="
",y.insertBefore(e,y.firstChild);var t=g.getElementsByName&&g.getElementsByName(d).length===2+g.getElementsByName(d+0).length;return r=!g.getElementById(d),y.removeChild(e),t});try{x.call(y.childNodes,0)[0].nodeType}catch(tt){x=function(e){var t,n=[];for(;t=this[e];e++)n.push(t);return n}}nt.matches=function(e,t){return nt(e,null,null,t)},nt.matchesSelector=function(e,t){return nt(t,null,null,[e]).length>0},s=nt.getText=function(e){var t,n="",r=0,i=e.nodeType;if(i){if(i===1||i===9||i===11){if(typeof e.textContent=="string")return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=s(e)}else if(i===3||i===4)return e.nodeValue}else for(;t=e[r];r++)n+=s(t);return n},o=nt.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return t?t.nodeName!=="HTML":!1},u=nt.contains=y.contains?function(e,t){var n=e.nodeType===9?e.documentElement:e,r=t&&t.parentNode;return e===r||!!(r&&r.nodeType===1&&n.contains&&n.contains(r))}:y.compareDocumentPosition?function(e,t){return t&&!!(e.compareDocumentPosition(t)&16)}:function(e,t){while(t=t.parentNode)if(t===e)return!0;return!1},nt.attr=function(e,t){var n,r=o(e);return r||(t=t.toLowerCase()),(n=i.attrHandle[t])?n(e):r||Y?e.getAttribute(t):(n=e.getAttributeNode(t),n?typeof e[t]=="boolean"?e[t]?t:null:n.specified?n.value:null:null)},i=nt.selectors={cacheLength:50,createPseudo:N,match:J,attrHandle:G?{}:{href:function(e){return e.getAttribute("href",2)},type:function(e){return e.getAttribute("type")}},find:{ID:r?function(e,t,n){if(typeof t.getElementById!==p&&!n){var r=t.getElementById(e);return r&&r.parentNode?[r]:[]}}:function(e,n,r){if(typeof n.getElementById!==p&&!r){var i=n.getElementById(e);return i?i.id===e||typeof i.getAttributeNode!==p&&i.getAttributeNode("id").value===e?[i]:t:[]}},TAG:Q?function(e,t){if(typeof t.getElementsByTagName!==p)return t.getElementsByTagName(e)}:function(e,t){var n=t.getElementsByTagName(e);if(e==="*"){var r,i=[],s=0;for(;r=n[s];s++)r.nodeType===1&&i.push(r);return i}return n},NAME:et&&function(e,t){if(typeof t.getElementsByName!==p)return t.getElementsByName(name)},CLASS:Z&&function(e,t,n){if(typeof t.getElementsByClassName!==p&&!n)return t.getElementsByClassName(e)}},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace($,""),e[3]=(e[4]||e[5]||"").replace($,""),e[2]==="~="&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),e[1]==="nth"?(e[2]||nt.error(e[0]),e[3]=+(e[3]?e[4]+(e[5]||1):2*(e[2]==="even"||e[2]==="odd")),e[4]=+(e[6]+e[7]||e[2]==="odd")):e[2]&&nt.error(e[0]),e},PSEUDO:function(e){var t,n;if(J.CHILD.test(e[0]))return null;if(e[3])e[2]=e[3];else if(t=e[4])q.test(t)&&(n=ut(t,!0))&&(n=t.indexOf(")",t.length-n)-t.length)&&(t=t.slice(0,n),e[0]=e[0].slice(0,n)),e[2]=t;return e.slice(0,3)}},filter:{ID:r?function(e){return e=e.replace($,""),function(t){return t.getAttribute("id")===e}}:function(e){return e=e.replace($,""),function(t){var n=typeof t.getAttributeNode!==p&&t.getAttributeNode("id");return n&&n.value===e}},TAG:function(e){return e==="*"?function(){return!0}:(e=e.replace($,"").toLowerCase(),function(t){return t.nodeName&&t.nodeName.toLowerCase()===e})},CLASS:function(e){var t=k[d][e+" "];return t||(t=new RegExp("(^|"+O+")"+e+"("+O+"|$)"))&&k(e,function(e){return t.test(e.className||typeof e.getAttribute!==p&&e.getAttribute("class")||"")})},ATTR:function(e,t,n){return function(r,i){var s=nt.attr(r,e);return s==null?t==="!=":t?(s+="",t==="="?s===n:t==="!="?s!==n:t==="^="?n&&s.indexOf(n)===0:t==="*="?n&&s.indexOf(n)>-1:t==="$="?n&&s.substr(s.length-n.length)===n:t==="~="?(" "+s+" ").indexOf(n)>-1:t==="|="?s===n||s.substr(0,n.length+1)===n+"-":!1):!0}},CHILD:function(e,t,n,r){return e==="nth"?function(e){var t,i,s=e.parentNode;if(n===1&&r===0)return!0;if(s){i=0;for(t=s.firstChild;t;t=t.nextSibling)if(t.nodeType===1){i++;if(e===t)break}}return i-=r,i===n||i%n===0&&i/n>=0}:function(t){var n=t;switch(e){case"only":case"first":while(n=n.previousSibling)if(n.nodeType===1)return!1;if(e==="first")return!0;n=t;case"last":while(n=n.nextSibling)if(n.nodeType===1)return!1;return!0}}},PSEUDO:function(e,t){var n,r=i.pseudos[e]||i.setFilters[e.toLowerCase()]||nt.error("unsupported pseudo: "+e);return r[d]?r(t):r.length>1?(n=[e,e,"",t],i.setFilters.hasOwnProperty(e.toLowerCase())?N(function(e,n){var i,s=r(e,t),o=s.length;while(o--)i=T.call(e,s[o]),e[i]=!(n[i]=s[o])}):function(e){return r(e,0,n)}):r}},pseudos:{not:N(function(e){var t=[],n=[],r=a(e.replace(j,"$1"));return r[d]?N(function(e,t,n,i){var s,o=r(e,null,i,[]),u=e.length;while(u--)if(s=o[u])e[u]=!(t[u]=s)}):function(e,i,s){return t[0]=e,r(t,null,s,n),!n.pop()}}),has:N(function(e){return function(t){return nt(e,t).length>0}}),contains:N(function(e){return function(t){return(t.textContent||t.innerText||s(t)).indexOf(e)>-1}}),enabled:function(e){return e.disabled===!1},disabled:function(e){return e.disabled===!0},checked:function(e){var t=e.nodeName.toLowerCase();return t==="input"&&!!e.checked||t==="option"&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,e.selected===!0},parent:function(e){return!i.pseudos.empty(e)},empty:function(e){var t;e=e.firstChild;while(e){if(e.nodeName>"@"||(t=e.nodeType)===3||t===4)return!1;e=e.nextSibling}return!0},header:function(e){return X.test(e.nodeName)},text:function(e){var t,n;return e.nodeName.toLowerCase()==="input"&&(t=e.type)==="text"&&((n=e.getAttribute("type"))==null||n.toLowerCase()===t)},radio:rt("radio"),checkbox:rt("checkbox"),file:rt("file"),password:rt("password"),image:rt("image"),submit:it("submit"),reset:it("reset"),button:function(e){var t=e.nodeName.toLowerCase();return t==="input"&&e.type==="button"||t==="button"},input:function(e){return V.test(e.nodeName)},focus:function(e){var t=e.ownerDocument;return e===t.activeElement&&(!t.hasFocus||t.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},active:function(e){return e===e.ownerDocument.activeElement},first:st(function(){return[0]}),last:st(function(e,t){return[t-1]}),eq:st(function(e,t,n){return[n<0?n+t:n]}),even:st(function(e,t){for(var n=0;n=0;)e.push(r);return e}),gt:st(function(e,t,n){for(var r=n<0?n+t:n;++r",e.querySelectorAll("[selected]").length||i.push("\\["+O+"*(?:checked|disabled|ismap|multiple|readonly|selected|value)"),e.querySelectorAll(":checked").length||i.push(":checked")}),K(function(e){e.innerHTML="

",e.querySelectorAll("[test^='']").length&&i.push("[*^$]="+O+"*(?:\"\"|'')"),e.innerHTML="",e.querySelectorAll(":enabled").length||i.push(":enabled",":disabled")}),i=new RegExp(i.join("|")),vt=function(e,r,s,o,u){if(!o&&!u&&!i.test(e)){var a,f,l=!0,c=d,h=r,p=r.nodeType===9&&e;if(r.nodeType===1&&r.nodeName.toLowerCase()!=="object"){a=ut(e),(l=r.getAttribute("id"))?c=l.replace(n,"\\$&"):r.setAttribute("id",c),c="[id='"+c+"'] ",f=a.length;while(f--)a[f]=c+a[f].join("");h=z.test(e)&&r.parentNode||r,p=a.join(",")}if(p)try{return S.apply(s,x.call(h.querySelectorAll(p),0)),s}catch(v){}finally{l||r.removeAttribute("id")}}return t(e,r,s,o,u)},u&&(K(function(t){e=u.call(t,"div");try{u.call(t,"[test!='']:sizzle"),s.push("!=",H)}catch(n){}}),s=new RegExp(s.join("|")),nt.matchesSelector=function(t,n){n=n.replace(r,"='$1']");if(!o(t)&&!s.test(n)&&!i.test(n))try{var a=u.call(t,n);if(a||e||t.document&&t.document.nodeType!==11)return a}catch(f){}return nt(n,null,null,[t]).length>0})}(),i.pseudos.nth=i.pseudos.eq,i.filters=mt.prototype=i.pseudos,i.setFilters=new mt,nt.attr=v.attr,v.find=nt,v.expr=nt.selectors,v.expr[":"]=v.expr.pseudos,v.unique=nt.uniqueSort,v.text=nt.getText,v.isXMLDoc=nt.isXML,v.contains=nt.contains}(e);var nt=/Until$/,rt=/^(?:parents|prev(?:Until|All))/,it=/^.[^:#\[\.,]*$/,st=v.expr.match.needsContext,ot={children:!0,contents:!0,next:!0,prev:!0};v.fn.extend({find:function(e){var t,n,r,i,s,o,u=this;if(typeof e!="string")return v(e).filter(function(){for(t=0,n=u.length;t0)for(i=r;i=0:v.filter(e,this).length>0:this.filter(e).length>0)},closest:function(e,t){var n,r=0,i=this.length,s=[],o=st.test(e)||typeof e!="string"?v(e,t||this.context):0;for(;r-1:v.find.matchesSelector(n,e)){s.push(n);break}n=n.parentNode}}return s=s.length>1?v.unique(s):s,this.pushStack(s,"closest",e)},index:function(e){return e?typeof e=="string"?v.inArray(this[0],v(e)):v.inArray(e.jquery?e[0]:e,this):this[0]&&this[0].parentNode?this.prevAll().length:-1},add:function(e,t){var n=typeof e=="string"?v(e,t):v.makeArray(e&&e.nodeType?[e]:e),r=v.merge(this.get(),n);return this.pushStack(ut(n[0])||ut(r[0])?r:v.unique(r))},addBack:function(e){return this.add(e==null?this.prevObject:this.prevObject.filter(e))}}),v.fn.andSelf=v.fn.addBack,v.each({parent:function(e){var t=e.parentNode;return t&&t.nodeType!==11?t:null},parents:function(e){return v.dir(e,"parentNode")},parentsUntil:function(e,t,n){return v.dir(e,"parentNode",n)},next:function(e){return at(e,"nextSibling")},prev:function(e){return at(e,"previousSibling")},nextAll:function(e){return v.dir(e,"nextSibling")},prevAll:function(e){return v.dir(e,"previousSibling")},nextUntil:function(e,t,n){return v.dir(e,"nextSibling",n)},prevUntil:function(e,t,n){return v.dir(e,"previousSibling",n)},siblings:function(e){return v.sibling((e.parentNode||{}).firstChild,e)},children:function(e){return v.sibling(e.firstChild)},contents:function(e){return v.nodeName(e,"iframe")?e.contentDocument||e.contentWindow.document:v.merge([],e.childNodes)}},function(e,t){v.fn[e]=function(n,r){var i=v.map(this,t,n);return nt.test(e)||(r=n),r&&typeof r=="string"&&(i=v.filter(r,i)),i=this.length>1&&!ot[e]?v.unique(i):i,this.length>1&&rt.test(e)&&(i=i.reverse()),this.pushStack(i,e,l.call(arguments).join(","))}}),v.extend({filter:function(e,t,n){return n&&(e=":not("+e+")"),t.length===1?v.find.matchesSelector(t[0],e)?[t[0]]:[]:v.find.matches(e,t)},dir:function(e,n,r){var i=[],s=e[n];while(s&&s.nodeType!==9&&(r===t||s.nodeType!==1||!v(s).is(r)))s.nodeType===1&&i.push(s),s=s[n];return i},sibling:function(e,t){var n=[];for(;e;e=e.nextSibling)e.nodeType===1&&e!==t&&n.push(e);return n}});var ct="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",ht=/ jQuery\d+="(?:null|\d+)"/g,pt=/^\s+/,dt=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,vt=/<([\w:]+)/,mt=/]","i"),Et=/^(?:checkbox|radio)$/,St=/checked\s*(?:[^=]|=\s*.checked.)/i,xt=/\/(java|ecma)script/i,Tt=/^\s*\s*$/g,Nt={option:[1,""],legend:[1,"
","
"],thead:[1,"","
"],tr:[2,"","
"],td:[3,"","
"],col:[2,"","
"],area:[1,"",""],_default:[0,"",""]},Ct=lt(i),kt=Ct.appendChild(i.createElement("div"));Nt.optgroup=Nt.option,Nt.tbody=Nt.tfoot=Nt.colgroup=Nt.caption=Nt.thead,Nt.th=Nt.td,v.support.htmlSerialize||(Nt._default=[1,"X
","
"]),v.fn.extend({text:function(e){return v.access(this,function(e){return e===t?v.text(this):this.empty().append((this[0]&&this[0].ownerDocument||i).createTextNode(e))},null,e,arguments.length)},wrapAll:function(e){if(v.isFunction(e))return this.each(function(t){v(this).wrapAll(e.call(this,t))});if(this[0]){var t=v(e,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstChild&&e.firstChild.nodeType===1)e=e.firstChild;return e}).append(this)}return this},wrapInner:function(e){return v.isFunction(e)?this.each(function(t){v(this).wrapInner(e.call(this,t))}):this.each(function(){var t=v(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=v.isFunction(e);return this.each(function(n){v(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(){return this.parent().each(function(){v.nodeName(this,"body")||v(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(e){(this.nodeType===1||this.nodeType===11)&&this.appendChild(e)})},prepend:function(){return this.domManip(arguments,!0,function(e){(this.nodeType===1||this.nodeType===11)&&this.insertBefore(e,this.firstChild)})},before:function(){if(!ut(this[0]))return this.domManip(arguments,!1,function(e){this.parentNode.insertBefore(e,this)});if(arguments.length){var e=v.clean(arguments);return this.pushStack(v.merge(e,this),"before",this.selector)}},after:function(){if(!ut(this[0]))return this.domManip(arguments,!1,function(e){this.parentNode.insertBefore(e,this.nextSibling)});if(arguments.length){var e=v.clean(arguments);return this.pushStack(v.merge(this,e),"after",this.selector)}},remove:function(e,t){var n,r=0;for(;(n=this[r])!=null;r++)if(!e||v.filter(e,[n]).length)!t&&n.nodeType===1&&(v.cleanData(n.getElementsByTagName("*")),v.cleanData([n])),n.parentNode&&n.parentNode.removeChild(n);return this},empty:function(){var e,t=0;for(;(e=this[t])!=null;t++){e.nodeType===1&&v.cleanData(e.getElementsByTagName("*"));while(e.firstChild)e.removeChild(e.firstChild)}return this},clone:function(e,t){return e=e==null?!1:e,t=t==null?e:t,this.map(function(){return v.clone(this,e,t)})},html:function(e){return v.access(this,function(e){var n=this[0]||{},r=0,i=this.length;if(e===t)return n.nodeType===1?n.innerHTML.replace(ht,""):t;if(typeof e=="string"&&!yt.test(e)&&(v.support.htmlSerialize||!wt.test(e))&&(v.support.leadingWhitespace||!pt.test(e))&&!Nt[(vt.exec(e)||["",""])[1].toLowerCase()]){e=e.replace(dt,"<$1>");try{for(;r1&&typeof f=="string"&&St.test(f))return this.each(function(){v(this).domManip(e,n,r)});if(v.isFunction(f))return this.each(function(i){var s=v(this);e[0]=f.call(this,i,n?s.html():t),s.domManip(e,n,r)});if(this[0]){i=v.buildFragment(e,this,l),o=i.fragment,s=o.firstChild,o.childNodes.length===1&&(o=s);if(s){n=n&&v.nodeName(s,"tr");for(u=i.cacheable||c-1;a0?this.clone(!0):this).get(),v(o[i])[t](r),s=s.concat(r);return this.pushStack(s,e,o.selector)}}),v.extend({clone:function(e,t,n){var r,i,s,o;v.support.html5Clone||v.isXMLDoc(e)||!wt.test("<"+e.nodeName+">")?o=e.cloneNode(!0):(kt.innerHTML=e.outerHTML,kt.removeChild(o=kt.firstChild));if((!v.support.noCloneEvent||!v.support.noCloneChecked)&&(e.nodeType===1||e.nodeType===11)&&!v.isXMLDoc(e)){Ot(e,o),r=Mt(e),i=Mt(o);for(s=0;r[s];++s)i[s]&&Ot(r[s],i[s])}if(t){At(e,o);if(n){r=Mt(e),i=Mt(o);for(s=0;r[s];++s)At(r[s],i[s])}}return r=i=null,o},clean:function(e,t,n,r){var s,o,u,a,f,l,c,h,p,d,m,g,y=t===i&&Ct,b=[];if(!t||typeof t.createDocumentFragment=="undefined")t=i;for(s=0;(u=e[s])!=null;s++){typeof u=="number"&&(u+="");if(!u)continue;if(typeof u=="string")if(!gt.test(u))u=t.createTextNode(u);else{y=y||lt(t),c=t.createElement("div"),y.appendChild(c),u=u.replace(dt,"<$1>"),a=(vt.exec(u)||["",""])[1].toLowerCase(),f=Nt[a]||Nt._default,l=f[0],c.innerHTML=f[1]+u+f[2];while(l--)c=c.lastChild;if(!v.support.tbody){h=mt.test(u),p=a==="table"&&!h?c.firstChild&&c.firstChild.childNodes:f[1]===""&&!h?c.childNodes:[];for(o=p.length-1;o>=0;--o)v.nodeName(p[o],"tbody")&&!p[o].childNodes.length&&p[o].parentNode.removeChild(p[o])}!v.support.leadingWhitespace&&pt.test(u)&&c.insertBefore(t.createTextNode(pt.exec(u)[0]),c.firstChild),u=c.childNodes,c.parentNode.removeChild(c)}u.nodeType?b.push(u):v.merge(b,u)}c&&(u=c=y=null);if(!v.support.appendChecked)for(s=0;(u=b[s])!=null;s++)v.nodeName(u,"input")?_t(u):typeof u.getElementsByTagName!="undefined"&&v.grep(u.getElementsByTagName("input"),_t);if(n){m=function(e){if(!e.type||xt.test(e.type))return r?r.push(e.parentNode?e.parentNode.removeChild(e):e):n.appendChild(e)};for(s=0;(u=b[s])!=null;s++)if(!v.nodeName(u,"script")||!m(u))n.appendChild(u),typeof u.getElementsByTagName!="undefined"&&(g=v.grep(v.merge([],u.getElementsByTagName("script")),m),b.splice.apply(b,[s+1,0].concat(g)),s+=g.length)}return b},cleanData:function(e,t){var n,r,i,s,o=0,u=v.expando,a=v.cache,f=v.support.deleteExpando,l=v.event.special;for(;(i=e[o])!=null;o++)if(t||v.acceptData(i)){r=i[u],n=r&&a[r];if(n){if(n.events)for(s in n.events)l[s]?v.event.remove(i,s):v.removeEvent(i,s,n.handle);a[r]&&(delete a[r],f?delete i[u]:i.removeAttribute?i.removeAttribute(u):i[u]=null,v.deletedIds.push(r))}}}}),function(){var e,t;v.uaMatch=function(e){e=e.toLowerCase();var t=/(chrome)[ \/]([\w.]+)/.exec(e)||/(webkit)[ \/]([\w.]+)/.exec(e)||/(opera)(?:.*version|)[ \/]([\w.]+)/.exec(e)||/(msie) ([\w.]+)/.exec(e)||e.indexOf("compatible")<0&&/(mozilla)(?:.*? rv:([\w.]+)|)/.exec(e)||[];return{browser:t[1]||"",version:t[2]||"0"}},e=v.uaMatch(o.userAgent),t={},e.browser&&(t[e.browser]=!0,t.version=e.version),t.chrome?t.webkit=!0:t.webkit&&(t.safari=!0),v.browser=t,v.sub=function(){function e(t,n){return new e.fn.init(t,n)}v.extend(!0,e,this),e.superclass=this,e.fn=e.prototype=this(),e.fn.constructor=e,e.sub=this.sub,e.fn.init=function(r,i){return i&&i instanceof v&&!(i instanceof e)&&(i=e(i)),v.fn.init.call(this,r,i,t)},e.fn.init.prototype=e.fn;var t=e(i);return e}}();var Dt,Pt,Ht,Bt=/alpha\([^)]*\)/i,jt=/opacity=([^)]*)/,Ft=/^(top|right|bottom|left)$/,It=/^(none|table(?!-c[ea]).+)/,qt=/^margin/,Rt=new RegExp("^("+m+")(.*)$","i"),Ut=new RegExp("^("+m+")(?!px)[a-z%]+$","i"),zt=new RegExp("^([-+])=("+m+")","i"),Wt={BODY:"block"},Xt={position:"absolute",visibility:"hidden",display:"block"},Vt={letterSpacing:0,fontWeight:400},$t=["Top","Right","Bottom","Left"],Jt=["Webkit","O","Moz","ms"],Kt=v.fn.toggle;v.fn.extend({css:function(e,n){return v.access(this,function(e,n,r){return r!==t?v.style(e,n,r):v.css(e,n)},e,n,arguments.length>1)},show:function(){return Yt(this,!0)},hide:function(){return Yt(this)},toggle:function(e,t){var n=typeof e=="boolean";return v.isFunction(e)&&v.isFunction(t)?Kt.apply(this,arguments):this.each(function(){(n?e:Gt(this))?v(this).show():v(this).hide()})}}),v.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=Dt(e,"opacity");return n===""?"1":n}}}},cssNumber:{fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":v.support.cssFloat?"cssFloat":"styleFloat"},style:function(e,n,r,i){if(!e||e.nodeType===3||e.nodeType===8||!e.style)return;var s,o,u,a=v.camelCase(n),f=e.style;n=v.cssProps[a]||(v.cssProps[a]=Qt(f,a)),u=v.cssHooks[n]||v.cssHooks[a];if(r===t)return u&&"get"in u&&(s=u.get(e,!1,i))!==t?s:f[n];o=typeof r,o==="string"&&(s=zt.exec(r))&&(r=(s[1]+1)*s[2]+parseFloat(v.css(e,n)),o="number");if(r==null||o==="number"&&isNaN(r))return;o==="number"&&!v.cssNumber[a]&&(r+="px");if(!u||!("set"in u)||(r=u.set(e,r,i))!==t)try{f[n]=r}catch(l){}},css:function(e,n,r,i){var s,o,u,a=v.camelCase(n);return n=v.cssProps[a]||(v.cssProps[a]=Qt(e.style,a)),u=v.cssHooks[n]||v.cssHooks[a],u&&"get"in u&&(s=u.get(e,!0,i)),s===t&&(s=Dt(e,n)),s==="normal"&&n in Vt&&(s=Vt[n]),r||i!==t?(o=parseFloat(s),r||v.isNumeric(o)?o||0:s):s},swap:function(e,t,n){var r,i,s={};for(i in t)s[i]=e.style[i],e.style[i]=t[i];r=n.call(e);for(i in t)e.style[i]=s[i];return r}}),e.getComputedStyle?Dt=function(t,n){var r,i,s,o,u=e.getComputedStyle(t,null),a=t.style;return u&&(r=u.getPropertyValue(n)||u[n],r===""&&!v.contains(t.ownerDocument,t)&&(r=v.style(t,n)),Ut.test(r)&&qt.test(n)&&(i=a.width,s=a.minWidth,o=a.maxWidth,a.minWidth=a.maxWidth=a.width=r,r=u.width,a.width=i,a.minWidth=s,a.maxWidth=o)),r}:i.documentElement.currentStyle&&(Dt=function(e,t){var n,r,i=e.currentStyle&&e.currentStyle[t],s=e.style;return i==null&&s&&s[t]&&(i=s[t]),Ut.test(i)&&!Ft.test(t)&&(n=s.left,r=e.runtimeStyle&&e.runtimeStyle.left,r&&(e.runtimeStyle.left=e.currentStyle.left),s.left=t==="fontSize"?"1em":i,i=s.pixelLeft+"px",s.left=n,r&&(e.runtimeStyle.left=r)),i===""?"auto":i}),v.each(["height","width"],function(e,t){v.cssHooks[t]={get:function(e,n,r){if(n)return e.offsetWidth===0&&It.test(Dt(e,"display"))?v.swap(e,Xt,function(){return tn(e,t,r)}):tn(e,t,r)},set:function(e,n,r){return Zt(e,n,r?en(e,t,r,v.support.boxSizing&&v.css(e,"boxSizing")==="border-box"):0)}}}),v.support.opacity||(v.cssHooks.opacity={get:function(e,t){return jt.test((t&&e.currentStyle?e.currentStyle.filter:e.style.filter)||"")?.01*parseFloat(RegExp.$1)+"":t?"1":""},set:function(e,t){var n=e.style,r=e.currentStyle,i=v.isNumeric(t)?"alpha(opacity="+t*100+")":"",s=r&&r.filter||n.filter||"";n.zoom=1;if(t>=1&&v.trim(s.replace(Bt,""))===""&&n.removeAttribute){n.removeAttribute("filter");if(r&&!r.filter)return}n.filter=Bt.test(s)?s.replace(Bt,i):s+" "+i}}),v(function(){v.support.reliableMarginRight||(v.cssHooks.marginRight={get:function(e,t){return v.swap(e,{display:"inline-block"},function(){if(t)return Dt(e,"marginRight")})}}),!v.support.pixelPosition&&v.fn.position&&v.each(["top","left"],function(e,t){v.cssHooks[t]={get:function(e,n){if(n){var r=Dt(e,t);return Ut.test(r)?v(e).position()[t]+"px":r}}}})}),v.expr&&v.expr.filters&&(v.expr.filters.hidden=function(e){return e.offsetWidth===0&&e.offsetHeight===0||!v.support.reliableHiddenOffsets&&(e.style&&e.style.display||Dt(e,"display"))==="none"},v.expr.filters.visible=function(e){return!v.expr.filters.hidden(e)}),v.each({margin:"",padding:"",border:"Width"},function(e,t){v.cssHooks[e+t]={expand:function(n){var r,i=typeof n=="string"?n.split(" "):[n],s={};for(r=0;r<4;r++)s[e+$t[r]+t]=i[r]||i[r-2]||i[0];return s}},qt.test(e)||(v.cssHooks[e+t].set=Zt)});var rn=/%20/g,sn=/\[\]$/,on=/\r?\n/g,un=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,an=/^(?:select|textarea)/i;v.fn.extend({serialize:function(){return v.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?v.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||an.test(this.nodeName)||un.test(this.type))}).map(function(e,t){var n=v(this).val();return n==null?null:v.isArray(n)?v.map(n,function(e,n){return{name:t.name,value:e.replace(on,"\r\n")}}):{name:t.name,value:n.replace(on,"\r\n")}}).get()}}),v.param=function(e,n){var r,i=[],s=function(e,t){t=v.isFunction(t)?t():t==null?"":t,i[i.length]=encodeURIComponent(e)+"="+encodeURIComponent(t)};n===t&&(n=v.ajaxSettings&&v.ajaxSettings.traditional);if(v.isArray(e)||e.jquery&&!v.isPlainObject(e))v.each(e,function(){s(this.name,this.value)});else for(r in e)fn(r,e[r],n,s);return i.join("&").replace(rn,"+")};var ln,cn,hn=/#.*$/,pn=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,dn=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,vn=/^(?:GET|HEAD)$/,mn=/^\/\//,gn=/\?/,yn=/)<[^<]*)*<\/script>/gi,bn=/([?&])_=[^&]*/,wn=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/,En=v.fn.load,Sn={},xn={},Tn=["*/"]+["*"];try{cn=s.href}catch(Nn){cn=i.createElement("a"),cn.href="",cn=cn.href}ln=wn.exec(cn.toLowerCase())||[],v.fn.load=function(e,n,r){if(typeof e!="string"&&En)return En.apply(this,arguments);if(!this.length)return this;var i,s,o,u=this,a=e.indexOf(" ");return a>=0&&(i=e.slice(a,e.length),e=e.slice(0,a)),v.isFunction(n)?(r=n,n=t):n&&typeof n=="object"&&(s="POST"),v.ajax({url:e,type:s,dataType:"html",data:n,complete:function(e,t){r&&u.each(r,o||[e.responseText,t,e])}}).done(function(e){o=arguments,u.html(i?v("
").append(e.replace(yn,"")).find(i):e)}),this},v.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(e,t){v.fn[t]=function(e){return this.on(t,e)}}),v.each(["get","post"],function(e,n){v[n]=function(e,r,i,s){return v.isFunction(r)&&(s=s||i,i=r,r=t),v.ajax({type:n,url:e,data:r,success:i,dataType:s})}}),v.extend({getScript:function(e,n){return v.get(e,t,n,"script")},getJSON:function(e,t,n){return v.get(e,t,n,"json")},ajaxSetup:function(e,t){return t?Ln(e,v.ajaxSettings):(t=e,e=v.ajaxSettings),Ln(e,t),e},ajaxSettings:{url:cn,isLocal:dn.test(ln[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded; charset=UTF-8",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":Tn},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":e.String,"text html":!0,"text json":v.parseJSON,"text xml":v.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:Cn(Sn),ajaxTransport:Cn(xn),ajax:function(e,n){function T(e,n,s,a){var l,y,b,w,S,T=n;if(E===2)return;E=2,u&&clearTimeout(u),o=t,i=a||"",x.readyState=e>0?4:0,s&&(w=An(c,x,s));if(e>=200&&e<300||e===304)c.ifModified&&(S=x.getResponseHeader("Last-Modified"),S&&(v.lastModified[r]=S),S=x.getResponseHeader("Etag"),S&&(v.etag[r]=S)),e===304?(T="notmodified",l=!0):(l=On(c,w),T=l.state,y=l.data,b=l.error,l=!b);else{b=T;if(!T||e)T="error",e<0&&(e=0)}x.status=e,x.statusText=(n||T)+"",l?d.resolveWith(h,[y,T,x]):d.rejectWith(h,[x,T,b]),x.statusCode(g),g=t,f&&p.trigger("ajax"+(l?"Success":"Error"),[x,c,l?y:b]),m.fireWith(h,[x,T]),f&&(p.trigger("ajaxComplete",[x,c]),--v.active||v.event.trigger("ajaxStop"))}typeof e=="object"&&(n=e,e=t),n=n||{};var r,i,s,o,u,a,f,l,c=v.ajaxSetup({},n),h=c.context||c,p=h!==c&&(h.nodeType||h instanceof v)?v(h):v.event,d=v.Deferred(),m=v.Callbacks("once memory"),g=c.statusCode||{},b={},w={},E=0,S="canceled",x={readyState:0,setRequestHeader:function(e,t){if(!E){var n=e.toLowerCase();e=w[n]=w[n]||e,b[e]=t}return this},getAllResponseHeaders:function(){return E===2?i:null},getResponseHeader:function(e){var n;if(E===2){if(!s){s={};while(n=pn.exec(i))s[n[1].toLowerCase()]=n[2]}n=s[e.toLowerCase()]}return n===t?null:n},overrideMimeType:function(e){return E||(c.mimeType=e),this},abort:function(e){return e=e||S,o&&o.abort(e),T(0,e),this}};d.promise(x),x.success=x.done,x.error=x.fail,x.complete=m.add,x.statusCode=function(e){if(e){var t;if(E<2)for(t in e)g[t]=[g[t],e[t]];else t=e[x.status],x.always(t)}return this},c.url=((e||c.url)+"").replace(hn,"").replace(mn,ln[1]+"//"),c.dataTypes=v.trim(c.dataType||"*").toLowerCase().split(y),c.crossDomain==null&&(a=wn.exec(c.url.toLowerCase()),c.crossDomain=!(!a||a[1]===ln[1]&&a[2]===ln[2]&&(a[3]||(a[1]==="http:"?80:443))==(ln[3]||(ln[1]==="http:"?80:443)))),c.data&&c.processData&&typeof c.data!="string"&&(c.data=v.param(c.data,c.traditional)),kn(Sn,c,n,x);if(E===2)return x;f=c.global,c.type=c.type.toUpperCase(),c.hasContent=!vn.test(c.type),f&&v.active++===0&&v.event.trigger("ajaxStart");if(!c.hasContent){c.data&&(c.url+=(gn.test(c.url)?"&":"?")+c.data,delete c.data),r=c.url;if(c.cache===!1){var N=v.now(),C=c.url.replace(bn,"$1_="+N);c.url=C+(C===c.url?(gn.test(c.url)?"&":"?")+"_="+N:"")}}(c.data&&c.hasContent&&c.contentType!==!1||n.contentType)&&x.setRequestHeader("Content-Type",c.contentType),c.ifModified&&(r=r||c.url,v.lastModified[r]&&x.setRequestHeader("If-Modified-Since",v.lastModified[r]),v.etag[r]&&x.setRequestHeader("If-None-Match",v.etag[r])),x.setRequestHeader("Accept",c.dataTypes[0]&&c.accepts[c.dataTypes[0]]?c.accepts[c.dataTypes[0]]+(c.dataTypes[0]!=="*"?", "+Tn+"; q=0.01":""):c.accepts["*"]);for(l in c.headers)x.setRequestHeader(l,c.headers[l]);if(!c.beforeSend||c.beforeSend.call(h,x,c)!==!1&&E!==2){S="abort";for(l in{success:1,error:1,complete:1})x[l](c[l]);o=kn(xn,c,n,x);if(!o)T(-1,"No Transport");else{x.readyState=1,f&&p.trigger("ajaxSend",[x,c]),c.async&&c.timeout>0&&(u=setTimeout(function(){x.abort("timeout")},c.timeout));try{E=1,o.send(b,T)}catch(k){if(!(E<2))throw k;T(-1,k)}}return x}return x.abort()},active:0,lastModified:{},etag:{}});var Mn=[],_n=/\?/,Dn=/(=)\?(?=&|$)|\?\?/,Pn=v.now();v.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Mn.pop()||v.expando+"_"+Pn++;return this[e]=!0,e}}),v.ajaxPrefilter("json jsonp",function(n,r,i){var s,o,u,a=n.data,f=n.url,l=n.jsonp!==!1,c=l&&Dn.test(f),h=l&&!c&&typeof a=="string"&&!(n.contentType||"").indexOf("application/x-www-form-urlencoded")&&Dn.test(a);if(n.dataTypes[0]==="jsonp"||c||h)return s=n.jsonpCallback=v.isFunction(n.jsonpCallback)?n.jsonpCallback():n.jsonpCallback,o=e[s],c?n.url=f.replace(Dn,"$1"+s):h?n.data=a.replace(Dn,"$1"+s):l&&(n.url+=(_n.test(f)?"&":"?")+n.jsonp+"="+s),n.converters["script json"]=function(){return u||v.error(s+" was not called"),u[0]},n.dataTypes[0]="json",e[s]=function(){u=arguments},i.always(function(){e[s]=o,n[s]&&(n.jsonpCallback=r.jsonpCallback,Mn.push(s)),u&&v.isFunction(o)&&o(u[0]),u=o=t}),"script"}),v.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(e){return v.globalEval(e),e}}}),v.ajaxPrefilter("script",function(e){e.cache===t&&(e.cache=!1),e.crossDomain&&(e.type="GET",e.global=!1)}),v.ajaxTransport("script",function(e){if(e.crossDomain){var n,r=i.head||i.getElementsByTagName("head")[0]||i.documentElement;return{send:function(s,o){n=i.createElement("script"),n.async="async",e.scriptCharset&&(n.charset=e.scriptCharset),n.src=e.url,n.onload=n.onreadystatechange=function(e,i){if(i||!n.readyState||/loaded|complete/.test(n.readyState))n.onload=n.onreadystatechange=null,r&&n.parentNode&&r.removeChild(n),n=t,i||o(200,"success")},r.insertBefore(n,r.firstChild)},abort:function(){n&&n.onload(0,1)}}}});var Hn,Bn=e.ActiveXObject?function(){for(var e in Hn)Hn[e](0,1)}:!1,jn=0;v.ajaxSettings.xhr=e.ActiveXObject?function(){return!this.isLocal&&Fn()||In()}:Fn,function(e){v.extend(v.support,{ajax:!!e,cors:!!e&&"withCredentials"in e})}(v.ajaxSettings.xhr()),v.support.ajax&&v.ajaxTransport(function(n){if(!n.crossDomain||v.support.cors){var r;return{send:function(i,s){var o,u,a=n.xhr();n.username?a.open(n.type,n.url,n.async,n.username,n.password):a.open(n.type,n.url,n.async);if(n.xhrFields)for(u in n.xhrFields)a[u]=n.xhrFields[u];n.mimeType&&a.overrideMimeType&&a.overrideMimeType(n.mimeType),!n.crossDomain&&!i["X-Requested-With"]&&(i["X-Requested-With"]="XMLHttpRequest");try{for(u in i)a.setRequestHeader(u,i[u])}catch(f){}a.send(n.hasContent&&n.data||null),r=function(e,i){var u,f,l,c,h;try{if(r&&(i||a.readyState===4)){r=t,o&&(a.onreadystatechange=v.noop,Bn&&delete Hn[o]);if(i)a.readyState!==4&&a.abort();else{u=a.status,l=a.getAllResponseHeaders(),c={},h=a.responseXML,h&&h.documentElement&&(c.xml=h);try{c.text=a.responseText}catch(p){}try{f=a.statusText}catch(p){f=""}!u&&n.isLocal&&!n.crossDomain?u=c.text?200:404:u===1223&&(u=204)}}}catch(d){i||s(-1,d)}c&&s(u,f,c,l)},n.async?a.readyState===4?setTimeout(r,0):(o=++jn,Bn&&(Hn||(Hn={},v(e).unload(Bn)),Hn[o]=r),a.onreadystatechange=r):r()},abort:function(){r&&r(0,1)}}}});var qn,Rn,Un=/^(?:toggle|show|hide)$/,zn=new RegExp("^(?:([-+])=|)("+m+")([a-z%]*)$","i"),Wn=/queueHooks$/,Xn=[Gn],Vn={"*":[function(e,t){var n,r,i=this.createTween(e,t),s=zn.exec(t),o=i.cur(),u=+o||0,a=1,f=20;if(s){n=+s[2],r=s[3]||(v.cssNumber[e]?"":"px");if(r!=="px"&&u){u=v.css(i.elem,e,!0)||n||1;do a=a||".5",u/=a,v.style(i.elem,e,u+r);while(a!==(a=i.cur()/o)&&a!==1&&--f)}i.unit=r,i.start=u,i.end=s[1]?u+(s[1]+1)*n:n}return i}]};v.Animation=v.extend(Kn,{tweener:function(e,t){v.isFunction(e)?(t=e,e=["*"]):e=e.split(" ");var n,r=0,i=e.length;for(;r-1,f={},l={},c,h;a?(l=i.position(),c=l.top,h=l.left):(c=parseFloat(o)||0,h=parseFloat(u)||0),v.isFunction(t)&&(t=t.call(e,n,s)),t.top!=null&&(f.top=t.top-s.top+c),t.left!=null&&(f.left=t.left-s.left+h),"using"in t?t.using.call(e,f):i.css(f)}},v.fn.extend({position:function(){if(!this[0])return;var e=this[0],t=this.offsetParent(),n=this.offset(),r=er.test(t[0].nodeName)?{top:0,left:0}:t.offset();return n.top-=parseFloat(v.css(e,"marginTop"))||0,n.left-=parseFloat(v.css(e,"marginLeft"))||0,r.top+=parseFloat(v.css(t[0],"borderTopWidth"))||0,r.left+=parseFloat(v.css(t[0],"borderLeftWidth"))||0,{top:n.top-r.top,left:n.left-r.left}},offsetParent:function(){return this.map(function(){var e=this.offsetParent||i.body;while(e&&!er.test(e.nodeName)&&v.css(e,"position")==="static")e=e.offsetParent;return e||i.body})}}),v.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(e,n){var r=/Y/.test(n);v.fn[e]=function(i){return v.access(this,function(e,i,s){var o=tr(e);if(s===t)return o?n in o?o[n]:o.document.documentElement[i]:e[i];o?o.scrollTo(r?v(o).scrollLeft():s,r?s:v(o).scrollTop()):e[i]=s},e,i,arguments.length,null)}}),v.each({Height:"height",Width:"width"},function(e,n){v.each({padding:"inner"+e,content:n,"":"outer"+e},function(r,i){v.fn[i]=function(i,s){var o=arguments.length&&(r||typeof i!="boolean"),u=r||(i===!0||s===!0?"margin":"border");return v.access(this,function(n,r,i){var s;return v.isWindow(n)?n.document.documentElement["client"+e]:n.nodeType===9?(s=n.documentElement,Math.max(n.body["scroll"+e],s["scroll"+e],n.body["offset"+e],s["offset"+e],s["client"+e])):i===t?v.css(n,r,i,u):v.style(n,r,i,u)},n,o?i:t,o,null)}})}),e.jQuery=e.$=v,typeof define=="function"&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return v})})(window); --------------------------------------------------------------------------------