diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..6c45e2d --- /dev/null +++ b/Dockerfile @@ -0,0 +1,10 @@ +FROM node:lts-alpine + +ENV instDir /Hatjitsu +WORKDIR ${instDir} +COPY . . +RUN npm install -d + +EXPOSE 5000 + +CMD node server diff --git a/LICENCE b/LICENCE new file mode 100644 index 0000000..d8fbae2 --- /dev/null +++ b/LICENCE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2016 Rich Archer + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/Makefile b/Makefile deleted file mode 100644 index 66464e6..0000000 --- a/Makefile +++ /dev/null @@ -1,4 +0,0 @@ -test: - ./node_modules/.bin/mocha - -.PHONY: test \ No newline at end of file diff --git a/Procfile b/Procfile new file mode 100644 index 0000000..7bba92d --- /dev/null +++ b/Procfile @@ -0,0 +1 @@ +web: app_port=$PORT node server.js diff --git a/README.md b/README.md index 30a441e..2ecbace 100644 --- a/README.md +++ b/README.md @@ -1,23 +1,38 @@ -Online planning poker -===================== +Hatjitsu +======== + +Create disposable online [Planning Poker](http://en.wikipedia.org/wiki/Planning_poker) rooms for quick and easy estimations. + +Features +======== -It will change your life. +* Simple interface +* No login/signup required +* Votes are kept hidden until all have voted to prevent coercion +* 'Observer feature' - watch the planning session without having to vote +* Multiple planning card decks +* Adaptive design allows to work on desktop, tablet and mobile - npm install -d - node app +Installation +============ + + npm install -d + node server [http://localhost:5000](http://localhost:5000) -Testing done with [Mocha](http://visionmedia.github.com/mocha/) and [Should.js](http://github.com/visionmedia/should.js) - -* Terminal tab #1: `node app` -* Terminal tab #2: `make test` +Installation (Docker) +===================== + +Just checkout the repository and run: -*Boom.* + docker-compose up -d TODOs ------ +===== -* Cookie-based administrator -* Administrator panel -* That'll do for now +* [x] Collapsible card view / jump to votes on vote +* [x] Update favicon, iOS splash page, Twitter avatar etc with new design +* [ ] Unicode symbol fallback (coffee/ace/king) +* [x] Improve CTA buttons +* [ ] Testing harness diff --git a/app/css/app.css b/app/css/app.css index ee8ed9d..ff8874c 100644 --- a/app/css/app.css +++ b/app/css/app.css @@ -1,533 +1,926 @@ -body { - background: #FFFFFF url(/img/noise.png) -50% -10%; -} -a:hover, -a:focus { - text-decoration: none; +html, body { + height: 100%; } -a, -a:hover, -a:focus { - color: #dddddd; +body { + margin: 0; } -select { - width: 100%; +hr { + clear: both; } -button { - -webkit-transition: .3s opacity ease; - -moz-transition: .3s opacity ease; - -ms-transition: .3s opacity ease; - -o-transition: .3s opacity ease; - transition: .3s opacity ease; +/* + Links + +*/ +a { + -webkit-transition: color .1s ease-out; + -moz-transition: color .1s ease-out; + -ms-transition: color .1s ease-out; + -o-transition: color .1s ease-out; + transition: color .1s ease-out; } -hr { - border-top: none; +a, +a:visited, +a:active { + color: #493e27; } -.container { - width: 100%; - margin: 0 auto; - overflow: hidden; +a:hover, +a:focus { + color: rgb(189, 27, 27); } +/* + Body -/* HEADER/FOOTER */ - header { - overflow: hidden; +*/ + + .body { + font: 16px/1.3em 'Helvetica neue', 'Helvetica', 'Arial', sans-serif; + background-color: #c5bdab; + color: #3d3938; + text-shadow: 0px 0px 1px #f4f0e9; + min-height: 100%; + -webkit-transition: .4s background-color ease; + -moz-transition: .4s background-color ease; + -ms-transition: .4s background-color ease; + -o-transition: .4s background-color ease; + transition: .4s background-color ease; + } + .body--green { background-color: #c5c2ad; } + .body--yellow { background-color: #c5bca1; } + .body--red { background-color: #d1bdad; } + +/* + Header + +*/ + .header { position: relative; + z-index: 3; + padding-top: 8px; + padding-bottom: 67px; /* allow for absolutely positioned mountain */ + zoom: 1; + border: 1px solid #B9AAA7; + border-width: 0 1px; + } + .header:before, + .header:after { + content: "\0020"; + display: block; + height: 0; + overflow: hidden; } - header a { + .header:after { + clear: both; + } + .header a { display: block; - position: relative; overflow: hidden; - height: 8em; + text-decoration: none; + position: relative; } - header h1 { + .header__text { + line-height: 1; font-size: 3em; - margin-top: 0.8em; - margin-left: 2.6em; + margin: 0.5em 0 0 0.5em; + position: relative; + z-index: 1; + text-align: left; + height: 56px; + width: 155px; + text-indent: -1000px; + background-image: url(/img/title.png); + background-repeat: no-repeat; } - #roomNumber { - position: absolute; - top: 71px; - left: 103px; - color: #999; + @media (-webkit-min-device-pixel-ratio: 2), (min-resolution: 192dpi) { + background-image: url(/img/title@2x.png); } - .logo { - position: absolute; - top: 1em; - left: 1em; - background: url('/img/hatchet.svg') no-repeat center; - background-size: 100%; + @media screen and (min-width: 17em) { + .header__text { + position: relative; + margin-left: 2.5em; + right: auto; + width: auto; + } + } + .header__text > * { + font-size: 1em; + } + .header__logo { + float: left; display: block; - border-radius: 50%; + margin-left: 1em; width: 6em; height: 6em; - z-index: 1; - background-color: color; + border-radius: 50%; + background-size: 100%; -webkit-transition: .3s background-color ease; -moz-transition: .3s background-color ease; -ms-transition: .3s background-color ease; -o-transition: .3s background-color ease; transition: .3s background-color ease; + z-index: 1; + background-color: rgb(226, 222, 212); + background-color: rgba(226, 222, 212, 0.8); } - .logo.green { - background-color: lawngreen; + .header__logo--green { + background-color: rgb(209, 229, 181); + background-color: rgba(209, 229, 181, 0.9); } - .logo.yellow { - background-color: gold; + .header__logo--yellow { + background-color: rgb(237, 226, 177); + background-color: rgba(237, 226, 177, 0.9); } - .logo.red { - background-color: brown; + .header__logo--red { + background-color: rgb(224, 157, 154); + background-color: rgba(224, 157, 154, 0.9); } - footer { - clear: both; - text-align: center; - color: #AAA; - padding-top: 1.4em; - } - - footer a { - color: #555; - } - footer a:hover, - footer a:focus { - color: #444; - text-decoration: underline; + .no-svg .header__logo { + position: relative; } + .no-svg .header__logo:after { + content: " "; + position: absolute; + top: 0; + left: 0; + display: block; + width: 100%; + height: 100%; + background: url(/img/sun-mask.png) no-repeat center; + } -/* NOTIFICATIONS */ - #activity { - background: url(/img/led.gif) no-repeat; - height: 5px; - width: 12px; + .roomNumber { position: absolute; - top: 0px; - left: 0px; - z-index: 1000; + z-index: 4; + top: 4.3em; + left: 7.7em; } - .notification { - position: absolute; - top: 0; - opacity: 0; - padding: 3px; - padding-left: 8px; - padding-right: 8px; - font-size: 11px; - font-weight: bold; - -webkit-transition: .5s all ease; - -moz-transition: .5s all ease; - -ms-transition: .5s all ease; - -o-transition: .5s all ease; - transition: .5s all ease; - } - #appError { - left: 100px; - background-color: red; - color: white; - } - #message { - left: 100px; - background-color: blue; - color: white; - } - #socketMessage { - right: 0px; - background-color: yellow; - color: black; - } - .ui-show { - opacity: 0.7; - } - -/* LOBBY PAGE */ - #lobby { - margin: 2em; - text-align: center; - } - #lobby h1 { - color: white; + +/* + + Footer + +*/ + .footer { + overflow: hidden; text-align: center; + position: relative; + border: 1px solid #b9aaa7; + border-width: 0 1px; } - #lobby h3 span { - font-weight: 300; - } - #lobby label { - color: white; + +/* + + Panel layouts + +*/ + + .lobby { + padding: 0 8px; + position: relative; + overflow: hidden; + border: 1px solid #b9aaa7; + border-width: 0 1px; + } + .lobby p, + .lobby .subheading, + .lobby label { + padding-left: 0.5em; + padding-right: 0.5em; + } + .votePanel { + overflow: hidden; + padding: 1em 8px 0; + position: relative; + border: 1px solid #b9aaa7; + border-width: 0 1px; } - #lobby button#creator { - margin: 1em; - padding: 1em; + .cardPanel { + padding: 0 8px; + text-align: center; + position: relative; + -webkit-box-shadow: inset 0px 1px 1px rgba(0,0,0,0.3); + -moz-box-shadow: inset 0px 1px 1px rgba(0,0,0,0.3); + box-shadow: inset 0px 1px 1px rgba(0,0,0,0.3); + -webkit-transition: all .4s ease-in-out; + -moz-transition: all .4s ease-in-out; + -ms-transition: all .4s ease-in-out; + -o-transition: all .4s ease-in-out; + transition: all .4s ease-in-out; + } - #lobby input.roomUrl { - width: 56px; + .cardPanel:before { + content: ""; + display: block; + position: absolute; + width: 100%; + height: 100%; + background-color: rgba(0,0,0,0.1); + top: 0; + left: 0; + } + .cardPanel p { + text-align: left; + } + @media screen and (min-width: 28em) { + .cardPanel { + text-align: left; + } + } + .cardPanel-meta { + padding: 1em 0; } - @media all and (min-width: 600px) { - #lobby h1 { - color: white; - text-align: right; - left: -49%; - position: relative; - } + .container { + margin: 0 auto; + max-width: 55em; + overflow: hidden; + position: relative; } -/* VOTING PAGE */ +/* - #cardPanel, - #adminPanel { - background: #D9D0D0; + Grid + +*/ + .row { + width: 100%; + display: block; + text-align: left; } - #votePanel h2 { - float: left; - margin-right: 0.5em; + .row:before, + .row:after { + content: "\0020"; + display: block; + height: 0; + overflow: hidden; } - span.sub { - float: left; - font-size: 13px; - font-weight: normal; - color: #999; - padding-top: 1em; + .row:after { + clear: both; } + .row .span2, .row .span1 { + display: block; + width: 100% + } + @media screen and (min-width: 16em) { + .row .span1 { + width: 16em; + } + .row .span2 { + display: inline-block; + width: 16em; + } + } -/* CARDS */ +/* + + Cards + +*/ .cards { overflow: hidden; - margin: 0; - padding: 1%; - clear: both; } - .cards .card { - display: block; - float: left; + .cards .card { + margin-bottom: 0.5em; + margin-right: 0.5em; + } + .card { + display: inline-block; width: 2em; height: 3em; + margin: 0; + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); + -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); + border: 1px solid transparent; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + border-bottom-color: #A2A2A2; + position: relative; + -webkit-border-radius: 0.2em; + border-radius: 0.2em; + + color: #25201c; font-size: 1.5em; - background-color: #FAFAFA; - margin: 0 4% 0.5em 0; text-align: center; + text-shadow: 0 1px 1px rgba(255, 255, 255, 0.75); line-height: 3em; - } - .cards.finished .card div, - #votePanel .cards.finished .mine-true .hidden, - #votePanel .cards.finished .mine-true .vote { - cursor: default; - } - #cardPanel .cards .card { - box-shadow: 1px 0px 0px #aaa; - border-radius: 0.2em; - cursor: pointer; - } - #cardPanel .cards .card.mine-true { - box-shadow: none; cursor: pointer; - background-color: gold; - } - #cardPanel .cards.finished .card { - opacity: 0.7; - color: rgba(0,0,0,0.7); - box-shadow: none; - } - #cardPanel .cards.finished .card { - -webkit-transition: .5s all ease; - -moz-transition: .5s all ease; - -ms-transition: .5s all ease; - -o-transition: .5s all ease; - transition: .5s all ease; - } - #votePanel .cards .mine-true div { - background-color: gold; - cursor: pointer; - } - #votePanel .cards div { - position: absolute; - left: 0; - top: 0; + + background-color: rgb(224, 217, 207); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(rgb(224, 217, 207)), to(rgb(216, 208, 197))); + background-image: -webkit-linear-gradient(rgb(224, 217, 207), rgb(216, 208, 197)); + background-image: -moz-linear-gradient(rgb(224, 217, 207), rgb(216, 208, 197)); + background-image: -o-linear-gradient(rgb(224, 217, 207), rgb(216, 208, 197)); + background-image: linear-gradient(rgb(224, 217, 207), rgb(216, 208, 197)); + background-repeat: repeat-x; + } + .card:hover, + .card:focus { + background-color: rgb(216, 208, 197); + background-position: 0 -30px; + border-color: transparent; + -webkit-transition: background-position 0.1s ease; + -moz-transition: background-position 0.1s ease; + -ms-transition: background-position 0.1s ease; + -o-transition: background-position 0.1s ease; + transition: background-position 0.1s ease; + } + .card--2-sided { + -webkit-box-shadow: none; + -moz-box-shadow: none; + box-shadow: none; + background-color: transparent; + background-image: none; + border: none; + float: left; + } + .card--selected { + background-color: gold; + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(gold), to(gold)); + background-image: -webkit-linear-gradient(top, gold, gold); + background-image: -moz-linear-gradient(top, gold, gold); + background-image: -o-linear-gradient(top, gold, gold); + background-image: linear-gradient(to bottom, gold, gold); + background-repeat: repeat-x; + cursor: default; + } + .card--selected:hover, + .card--selected:focus { + background-position: 0 0; + background-color: gold; + } + .card--2-sided > * { + position: absolute; + display: inline-block; + width: 100%; + top: 0; + left: 0; + -webkit-border-radius: 0.2em; + border-radius: 0.2em; + -webkit-transform-style: preserve-3d; + -moz-transform-style: preserve-3d; + -ms-transform-style: preserve-3d; + -o-transform-style: preserve-3d; + transform-style: preserve-3d; + -webkit-backface-visibility: hidden; + -moz-backface-visibility: hidden; + -ms-backface-visibility: hidden; + -o-backface-visibility: hidden; + backface-visibility: hidden; + -webkit-transition: -webkit-transform .4s ease-in-out; + -moz-transition: -moz-transform .4s ease-in-out; + -ms-transition: -ms-transform .4s ease-in-out; + -o-transition: -o-transform .4s ease-in-out; + transition: transform .4s ease-in-out; + -webkit-transform-style: preserve-3d; + -moz-transform-style: preserve-3d; + -ms-transform-style: preserve-3d; + -o-transform-style: preserve-3d; + transform-style: preserve-3d; + background-color: #E0D9CF; + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(rgb(224, 217, 207)), to(rgb(216, 208, 197))); + background-image: -webkit-linear-gradient(top, rgb(224, 217, 207), rgb(216, 208, 197)); + background-image: -moz-linear-gradient(top, rgb(224, 217, 207), rgb(216, 208, 197)); + background-image: -o-linear-gradient(top, rgb(224, 217, 207), rgb(216, 208, 197)); + background-image: linear-gradient(to bottom, rgb(224, 217, 207), rgb(216, 208, 197)); + background-repeat: repeat-x; + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); + -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); + border: 1px solid #BBB; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + border-bottom-color: #A2A2A2; + } + .card--2-sided > *:hover { + border-color: transparent; + } + .card--2-sided.card--selected { + background-color: transparent; + background-image: none; + } + .card--2-sided > .card--selected, + .card--2-sided.card--selected > * { + background-color: gold; + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(gold), to(gold)); + background-image: -webkit-linear-gradient(top, gold, gold); + background-image: -moz-linear-gradient(top, gold, gold); + background-image: -o-linear-gradient(top, gold, gold); + background-image: linear-gradient(to bottom, gold, gold); + background-repeat: repeat-x; + } + .card--2-sided > .card--disabled, + .card--2-sided.card--disabled { + opacity: 0.5; + background-color: transparent; + color: #AAA; + } + .no-csstransforms3d .card--2-sided > .card--disabled, + .no-csstransforms3d .card--2-sided.card--disabled { + background-color: rgb(224, 217, 207); + } + .card--2-sided.card--disabled > * { + opacity: 0.5; + } + .no-csstransforms3d .card--2-sided.card--disabled > * { + opacity: 1; + } + .card--placeholder { + background-color: #cccccc; + background-color: rgba(0, 0, 0, 0); + -webkit-box-shadow: inset 0px 0px 3px rgba(15, 14, 12, 0.7); + -moz-box-shadow: inset 0px 0px 3px rgba(15, 14, 12, 0.7); + box-shadow: inset 0px 0px 3px rgba(15, 14, 12, 0.7); + background-image: none; + border: none; + border-top: 1px solid transparent; + cursor: default; + } + .card--placeholder:hover, + .card--placeholder:focus { + background-image: none; + background-color: #cccccc; + background-color: rgba(0, 0, 0, 0); + } + .card--disabled, + .card--disabled > * { + cursor: default; + } + .card--disabled { + opacity: 0.5; + } + .card--side-1 { z-index: 2; } + .card--side-2 { z-index: 1; } + /* Step 1: by default, the second side is reversed */ + .csstransforms3d .card--side-2{ + -webkit-transform: rotateY(-180deg); + -moz-transform: rotateY(-180deg); + -ms-transform: rotateY(-180deg); + -o-transform: rotateY(-180deg); + transform: rotateY(-180deg); + } + /* Step 2: adding .flipped to a parent triggers animation */ + .csstransforms3d .flipped .card--side-1 { + -webkit-transform: rotateY(-180deg); + -moz-transform: rotateY(-180deg); + -ms-transform: rotateY(-180deg); + -o-transform: rotateY(-180deg); + transform: rotateY(-180deg); + } + .csstransforms3d .flipped .card--side-2 { + -webkit-transform: rotateX(0deg) rotateY(0deg); + -moz-transform: rotateX(0deg) rotateY(0deg); + -ms-transform: rotateX(0deg) rotateY(0deg); + -o-transform: rotateX(0deg) rotateY(0deg); + transform: rotateX(0deg) rotateY(0deg); + } + .no-csstransforms3d .card--side-1 { z-index: 2; } + .no-csstransforms3d .card--side-2 { z-index: 1; } + .no-csstransforms3d .flipped .card--side-1 { z-index: 1; } + .no-csstransforms3d .flipped .card--side-2 { z-index: 2; } + /* Step 2b: adding .flipped-stagger to a parent triggers staggered animation */ + .csstransforms3d .flipped-stagger .card--side-1 { + -webkit-transform: rotateY(180deg); + -moz-transform: rotateY(180deg); + -ms-transform: rotateY(180deg); + -o-transform: rotateY(180deg); + transform: rotateY(180deg); + } + .csstransforms3d .flipped-stagger .card--side-2 { + -webkit-transform: rotateX(0deg) rotateY(0deg); + -moz-transform: rotateX(0deg) rotateY(0deg); + -ms-transform: rotateX(0deg) rotateY(0deg); + -o-transform: rotateX(0deg) rotateY(0deg); + transform: rotateX(0deg) rotateY(0deg); + } + .csstransforms3d .flipped-stagger .card:nth-child(1) > * { + -webkit-transition-delay: 0.1s; + -moz-transition-delay: 0.1s; + -ms-transition-delay: 0.1s; + -o-transition-delay: 0.1s; + transition-delay: 0.1s; + } + .csstransforms3d .flipped-stagger .card:nth-child(2) > * { + -webkit-transition-delay: 0.2s; + -moz-transition-delay: 0.2s; + -ms-transition-delay: 0.2s; + -o-transition-delay: 0.2s; + transition-delay: 0.2s; + } + .csstransforms3d .flipped-stagger .card:nth-child(3) > * { + -webkit-transition-delay: 0.3s; + -moz-transition-delay: 0.3s; + -ms-transition-delay: 0.3s; + -o-transition-delay: 0.3s; + transition-delay: 0.3s; + } + .csstransforms3d .flipped-stagger .card:nth-child(4) > * { + -webkit-transition-delay: 0.4s; + -moz-transition-delay: 0.4s; + -ms-transition-delay: 0.4s; + -o-transition-delay: 0.4s; + transition-delay: 0.4s; + } + .csstransforms3d .flipped-stagger .card:nth-child(5) > *{ + -webkit-transition-delay: 0.5s; + -moz-transition-delay: 0.5s; + -ms-transition-delay: 0.5s; + -o-transition-delay: 0.5s; + transition-delay: 0.5s; + } + .csstransforms3d .flipped-stagger .card:nth-child(6) > *{ + -webkit-transition-delay: 0.6s; + -moz-transition-delay: 0.6s; + -ms-transition-delay: 0.6s; + -o-transition-delay: 0.6s; + transition-delay: 0.6s; + } + .csstransforms3d .flipped-stagger .card:nth-child(7) > *{ + -webkit-transition-delay: 0.7s; + -moz-transition-delay: 0.7s; + -ms-transition-delay: 0.7s; + -o-transition-delay: 0.7s; + transition-delay: 0.7s; + } + .csstransforms3d .flipped-stagger .card:nth-child(8) > *{ + -webkit-transition-delay: 0.8s; + -moz-transition-delay: 0.8s; + -ms-transition-delay: 0.8s; + -o-transition-delay: 0.8s; + transition-delay: 0.8s; + } + .csstransforms3d .flipped-stagger .card > *{ + -webkit-transition-delay: 1s; + -moz-transition-delay: 1s; + -ms-transition-delay: 1s; + -o-transition-delay: 1s; + transition-delay: 1s; + } + .no-csstransforms3d .flipped-stagger .card--side-1 { z-index: 1; } + .no-csstransforms3d .flipped-stagger .card--side-2 { z-index: 2; } + .vote.card { cursor: default; } + .vote.card--selected { cursor: pointer; } + +/* + + Buttons + +*/ + + .btn { + padding: 4px 12px; + margin: 2px 0 0; + line-height: 31px; + display: inline-block; width: 100%; - background-color: linen; - border-radius: 0.2em; - box-shadow: 0px 0px 2px #555; - } - #votePanel .cards .hidden { - background-image: url(/img/card-back.png); + min-height: 44px; + color: #333; + font-size: 16px; + text-align: left; + text-shadow: 0 1px 1px rgba(255, 255, 255, 0.75); + vertical-align: middle; + cursor: pointer; + background-color: rgb(216, 208, 197); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(rgb(224, 217, 207)), to(rgb(216, 208, 197))); + background-image: -webkit-linear-gradient(top, rgb(224, 217, 207), rgb(216, 208, 197)); + background-image: -moz-linear-gradient(top, rgb(224, 217, 207), rgb(216, 208, 197)); + background-image: -o-linear-gradient(top, rgb(224, 217, 207), rgb(216, 208, 197)); + background-image: linear-gradient(to bottom, rgb(224, 217, 207), rgb(216, 208, 197)); + background-repeat: repeat-x; + border: 1px solid transparent; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); + -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); + -webkit-transition: background-position 0.1s ease; + -moz-transition: background-position 0.1s ease; + -ms-transition: background-position 0.1s ease; + -o-transition: background-position 0.1s ease; + transition: background-position 0.1s ease; + } + @media screen and (min-width: 16em) { + .btn { + width: 16em; + } + } + .btn:hover, + .btn:focus { + background-position: 0 -40px; + border-color: transparent; + } + .icon { + display: inline-block; + width: 14px; + height: 14px; + margin-top: 2px; + line-height: 14px; + vertical-align: text-top; + background-image: url(/img/glyphicons.png); background-repeat: no-repeat; - background-position: center; - text-indent: -9999px; + background-position: 14px 14px; } - @media only screen and (-webkit-min-device-pixel-ratio: 2) { - #votePanel .cards .hidden { - background-image: url(/img/card-back_@2x.png); - background-size: 50%; - } + .icon-refresh { + background-position: 0px 0px; } - #votePanel .cards li { - position: relative; + .icon-exclamation-sign { + background-position: -90px 0px; } - .csstransforms3d #votePanel .cards.active .vote, - .csstransforms3d #votePanel .cards.finished .vote, - .csstransforms3d #votePanel .cards.active .hidden, - .csstransforms3d #votePanel .cards.finished .hidden { - -webkit-transform-style: preserve-3d; - -moz-transform-style: preserve-3d; -/* -ms-transform-style: preserve-3d; - transform-style: preserve-3d;*/ - -webkit-backface-visibility: hidden; - -moz-backface-visibility: hidden; -/* -ms-backface-visibility: hidden; - backface-visibility: hidden;*/ - -webkit-transition: all .4s ease-in-out; - -moz-transition: all .4s ease-in-out; -/* -ms-transition: all .4s ease-in-out; - transition: all .4s ease-in-out;*/ - -webkit-transform-style: preserve-3d; - -moz-transform-style: preserve-3d; -/* -ms-transform-style: preserve-3d; - transform-style: preserve-3d;*/ - } - .csstransforms3d #votePanel .cards.active .vote { - -webkit-transform: rotateY(-180deg); - -moz-transform: rotateY(-180deg); -/* -ms-transform: rotateY(-180deg); - transform: rotateY(-180deg);*/ - } - .csstransforms3d #votePanel .cards.active .hidden { - -webkit-transform: rotateX(0deg) rotateY(0deg); - -moz-transform: rotateX(0deg) rotateY(0deg); -/* -ms-transform: rotateX(0deg) rotateY(0deg); - transform: rotateX(0deg) rotateY(0deg);*/ - } - .csstransforms3d #votePanel .cards.finished .vote { - -webkit-transition-delay: 1s; - -moz-transition-delay: 1s; -/* -ms-transition-delay: 3s; - transition-delay: 3s;*/ - -webkit-transform: rotateX(0deg) rotateY(0deg); - -moz-transform: rotateX(0deg) rotateY(0deg); -/* -ms-transform: rotateX(0deg) rotateY(0deg); - transform: rotateX(0deg) rotateY(0deg);*/ - } - .csstransforms3d #votePanel .cards.finished .hidden { - -webkit-transition-delay: 1s; - -moz-transition-delay: 1s; -/* -ms-transition-delay: 1s; - transition-delay: 1s;*/ - -webkit-transform: rotateY(180deg); - -moz-transform: rotateY(180deg); -/* -ms-transform: rotateY(180deg); - transform: rotateY(180deg);*/ - } - #votePanel .cards.finished .vote {z-index: 900;} - #votePanel .cards.finished .hidden {z-index: 800;} - #votePanel .cards.active .vote {z-index: 800;} - #votePanel .cards.active .hidden {z-index: 900;} - -/* POSITIONING OF SECTIONS */ - .wrapper { - width: 300%; - height: 100%; - overflow: hidden; + .icon-sort, + .icon-sort::after, + .icon-sort::before { + box-sizing: border-box; + height: 2px; + border-radius: 4px; + background: currentColor } - #cardPanel, - #votePanel, - #adminPanel { - height: 100%; - padding: 2em 3%; + .icon-sort { + display: block; + position: relative; + transform: scale(var(--ggs,1)); + width: 8px; + top: 4px; + left: 2px + } + .icon-sort::after, + .icon-sort::before { + content: ""; + position: absolute + } + .icon-sort::before { + width: 12px; + top: -4px; + left: -2px + } + .icon-sort::after { + width: 4px; + top: 4px; + left: 2px + } + + .switch { position: relative; + margin: 2px 0 0; + width: 100%; } - #cardPanel { - padding-left: 1%; - padding-right: 5%; + @media screen and (min-width: 16em) { + .switch { + width: 16em; + } + } + + .switch input { + position: absolute; + width: 100%; + height: 100%; + z-index: 100; + opacity: 0; + cursor: pointer; + margin: 0; + } + .switch .btn { + padding: 0; + text-indent: -100%; + line-height: 40px; + color: #B4573A; + margin: 0; + -webkit-transition: background-position 0.1s ease; + -moz-transition: background-position 0.1s ease; + -ms-transition: background-position 0.1s ease; + -o-transition: background-position 0.1s ease; + transition: background-position 0.1s ease; } - #adminPanel { - padding-left: 5%; - padding-right: 0%; + .switch:hover .btn, + .switch:focus .btn { + background-position: 0 -40px; + border-color: transparent; } - .wrapper { - -webkit-transition: .2s all ease; - -moz-transition: .2s all ease; - -ms-transition: .2s all ease; - -o-transition: .2s all ease; - transition: .2s all ease; + + .switch .btn:after { + content: attr(data-off); + position: absolute; + z-index: 1; + width: 100%; + height: 100%; + top: 0px; + left: 0px; + text-indent: 31px; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + line-height: 40px; } - #cardPanel { - float: left; - width: 27%; + .switch .btn:before { + content: ""; + position: absolute; + z-index: 1; + width: 15px; + height: 13px; + background-image: url(/img/glyphicons.png); + background-position: -58px 0px; + top: 15px; + left: 11px; + } + .switch input:checked ~ .btn { + color: #408F21; + background-position: 0 -40px; + } + .switch input:checked ~ .btn:after { + content: attr(data-on); + } + .switch input:checked ~ .btn:before { + background-position: -28px 0; + } + .no-checked .switch .btn:before, + .no-checked .switch .btn:after { + display: none; + } + .no-checked .switch .btn { + text-indent: 1.5em; + color: #333; + } + .no-checked .switch input { + width: auto; + height: auto; + top: 11px; + left: 2px; + } + .roomUrl { + font-size: 16px; + line-height: 31px; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + padding: 4px 12px; + margin-bottom: 0; + vertical-align: middle; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + border-width: 0px; } - #votePanel { - float: left; - margin-left: 3%; - width: 22%; + +/* + + Typography + +*/ + + .subheading { + font-size: 1.1em; + font-weight: bold; + letter-spacing: -0.1px; + line-height: 1.2em; + text-align: left; } - #adminPanel { - float: right; - width: 27%; - } - .wrapper { - -webkit-transform: translate(-33%, 0); - -moz-transform: translate(-33%, 0); - -ms-transform: translate(-33%, 0); - -o-transform: translate(-33%, 0); - transform: translate(-33%, 0); - } - .active-cardPanel .wrapper { - -webkit-transform: translate(0, 0); - -moz-transform: translate(0, 0); - -ms-transform: translate(0, 0); - -o-transform: translate(0, 0); - transform: translate(0, 0); - } - .active-settings .wrapper { - -webkit-transform: translate(-66%, 0); - -moz-transform: translate(-66%, 0); - -ms-transform: translate(-66%, 0); - -o-transform: translate(-66%, 0); - transform: translate(-66%, 0); - } - @media all and (min-width: 400px) { - #cardPanel { - padding-right: 3%; - width: 24%; + +/* + + Dropdown + +*/ + .dropdown-wrapper { + position: relative; + max-width: 13em; + padding: 0 1em; + outline: none; + cursor: pointer; + min-height: 34px; + } + .dropdown-wrapper:after { + content: ""; + width: 0; + height: 0; + position: absolute; + right: 16px; + top: 50%; + margin-top: -6px; + border-width: 6px 0 6px 6px; + border-style: solid; + border-color: transparent #fff; + } + .dropdown-wrapper .dropdown { + position: absolute; + top: 98%; + left: 0; + right: 0; + background: #fff; + opacity: 0; + pointer-events: none; + margin: 0; + padding: 0; + z-index: 3; } - #votePanel { - margin-left: 0; - width: 30%; + .dropdown-wrapper.active .dropdown { + opacity: 1; + pointer-events: auto; } - .wrapper { - width: 150%; - -webkit-transform: translate(0, 0); - -moz-transform: translate(0, 0); - -ms-transform: translate(0, 0); - -o-transform: translate(0, 0); - transform: translate(0, 0); + .dropdown-wrapper.active:after { + border-width: 6px 6px 0 6px; + border-color: rgb(189, 27, 27) transparent; + margin-top: -3px; + } + + .dropdown li { + list-style-type: none; } - .active-settings .wrapper { - -webkit-transform: translate(-28%, 0); - -moz-transform: translate(-28%, 0); - -ms-transform: translate(-28%, 0); - -o-transform: translate(-28%, 0); - transform: translate(-28%, 0); + .dropdown .dropdown__item { + display: block; + text-decoration: none; + padding: 10px 20px; } + +/* + + Alerts + +*/ + .alert { + z-index: 3; + top: 0; + left: 0; + width: 100%; + position: fixed; } - @media all and (min-width: 800px) { - .wrapper { - width: 100%; - -webkit-transform: translate(0, 0); - -moz-transform: translate(0, 0); - -ms-transform: translate(0, 0); - -o-transform: translate(0, 0); - transform: translate(0, 0); + @media screen and (min-width: 55em) { + .alert { + position: absolute; } - .active-settings .wrapper { - } } + .alert .activity { + width: 1em; + height: 1em; + background: url(/img/led.gif); + text-indent: 100%; + margin-top: 0.2em; + margin-bottom: 0.2em; + margin-right: 0.2em; + float: right; + text-align: right; + -webkit-border-radius: 0.5em; + -moz-border-radius: 0.5em; + border-radius: 0.5em; + } + .socketMessage, + .appError, + .message { + padding: 0 2em 0 0.5em; + line-height: 1.5em; + } + .message { + background-color: rgb(255, 255, 111); + background-color: rgba(255, 255, 111, 0.4); + color: rgb(129, 129, 15); + } + .socketMessage { + background-color: rgba(0, 255, 255, 0.2); + } + .appError { + background-color: rgba(255, 0, 0, 0.3); + color: rgb(102, 43, 43); + text-shadow: none; + } +/* -/* TAB BUTTONS */ - .vote-item { - position: absolute; - top: 0; - display: block; - width: 13%; - height: 100%; - overflow: hidden; + Surgical classes + +*/ + .no-js-hide { + display: none; } - .vote-item span { - position: relative; - display: block; - width: 100%; - height: 100%; - text-indent: -300%; - background-color: #D9D0D0; - border-radius: 1em; - cursor: pointer; - /*-webkit-tap-highlight-color: rgba(0,0,0,0);*/ + + .pullright { + float: right; } - .vote-item { - -webkit-transition: .2s all ease; - -moz-transition: .2s all ease; - -ms-transition: .2s all ease; - -o-transition: .2s all ease; - transition: .2s all ease; +/* + + Decorators + +*/ + .bg { + background-image: url(data:image/png;base64,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); } - .vote-item span:after { + + .bg-mount { display: block; - background-color: #BBBBBB; - background-image: url(/img/vert-ribbing.png); - background-size:5px 1px; + background: url(/img/bg-mount.png) no-repeat -100px bottom; position: absolute; - content: "."; - top: 1em; - bottom: 1em; - width: 80%; - border-radius: 0.75em; - } - #cardPanel .vote-item { - /*right: -13%;*/ - right: 0; - -webkit-transform: translate(100%, 0); - -moz-transform: translate(100%, 0); - -ms-transform: translate(100%, 0); - -o-transform: translate(100%, 0); - transform: translate(100%, 0); - } - #adminPanel .vote-item { - /*left: -18%;*/ - left: 0; - -webkit-transform: translate(-140%, 0); - -moz-transform: translate(-140%, 0); - -ms-transform: translate(-140%, 0); - -o-transform: translate(-140%, 0); - transform: translate(-140%, 0); - } - #cardPanel .vote-item span, - #cardPanel .vote-item span:after { - border-top-left-radius: 0; - border-bottom-left-radius: 0; - } - #adminPanel .vote-item span, - #adminPanel .vote-item span:after { - border-top-right-radius: 0; - border-bottom-right-radius: 0; - } - #cardPanel .vote-item span:after { - box-shadow: -2px 1px 0px #aaa inset; - } - #adminPanel .vote-item span:after { - box-shadow: 2px 1px 0px #aaa inset; - right: 0; - } - .active-cardPanel #cardPanel .vote-item { - -webkit-transform: translate(0%, 0); - -moz-transform: translate(0%, 0); - -ms-transform: translate(0%, 0); - -o-transform: translate(0%, 0); - transform: translate(0%, 0); - } - .active-settings #adminPanel .vote-item { - -webkit-transform: translate(0%, 0); - -moz-transform: translate(0%, 0); - -ms-transform: translate(0%, 0); - -o-transform: translate(0%, 0); - transform: translate(0%, 0); - } - @media all and (min-width: 400px) { - #cardPanel .vote-item { - display: none; - } + width: 100%; + height: 135px; + top: 51px; + left: -1%; } - @media all and (min-width: 800px) { - #adminPanel .vote-item { - display: none; + .no-svg .bg-mount { + z-index: 2; } + .bg-tree { + display: none; + position: absolute; + width: 320px; + height: 200px; + bottom: 33px; + right: 0; + z-index: 2; } - -/* Used to allow JS to plug into @media query state */ - @media all and (min-width: 400px) { - body:after { - content: 'narrow'; - display: none; - } - } - @media all and (min-width: 800px) { - body:after { - content: 'widescreen'; - display: none; - } - } \ No newline at end of file diff --git a/app/css/bootstrap-responsive.min.css b/app/css/bootstrap-responsive.min.css deleted file mode 100644 index 1f55036..0000000 --- a/app/css/bootstrap-responsive.min.css +++ /dev/null @@ -1,9 +0,0 @@ -/*! - * Bootstrap Responsive v2.0.4 - * - * Copyright 2012 Twitter, Inc - * Licensed under the Apache License v2.0 - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Designed and built with all the love in the world @twitter by @mdo and @fat. - */.clearfix{*zoom:1}.clearfix:before,.clearfix:after{display:table;content:""}.clearfix:after{clear:both}.hide-text{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.input-block-level{display:block;width:100%;min-height:28px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box}.hidden{display:none;visibility:hidden}.visible-phone{display:none!important}.visible-tablet{display:none!important}.hidden-desktop{display:none!important}@media(max-width:767px){.visible-phone{display:inherit!important}.hidden-phone{display:none!important}.hidden-desktop{display:inherit!important}.visible-desktop{display:none!important}}@media(min-width:768px) and (max-width:979px){.visible-tablet{display:inherit!important}.hidden-tablet{display:none!important}.hidden-desktop{display:inherit!important}.visible-desktop{display:none!important}}@media(max-width:480px){.nav-collapse{-webkit-transform:translate3d(0,0,0)}.page-header h1 small{display:block;line-height:18px}input[type="checkbox"],input[type="radio"]{border:1px solid #ccc}.form-horizontal .control-group>label{float:none;width:auto;padding-top:0;text-align:left}.form-horizontal .controls{margin-left:0}.form-horizontal .control-list{padding-top:0}.form-horizontal .form-actions{padding-right:10px;padding-left:10px}.modal{position:absolute;top:10px;right:10px;left:10px;width:auto;margin:0}.modal.fade.in{top:auto}.modal-header .close{padding:10px;margin:-10px}.carousel-caption{position:static}}@media(max-width:767px){body{padding-right:20px;padding-left:20px}.navbar-fixed-top,.navbar-fixed-bottom{margin-right:-20px;margin-left:-20px}.container-fluid{padding:0}.dl-horizontal dt{float:none;width:auto;clear:none;text-align:left}.dl-horizontal dd{margin-left:0}.container{width:auto}.row-fluid{width:100%}.row,.thumbnails{margin-left:0}[class*="span"],.row-fluid [class*="span"]{display:block;float:none;width:auto;margin-left:0}.input-large,.input-xlarge,.input-xxlarge,input[class*="span"],select[class*="span"],textarea[class*="span"],.uneditable-input{display:block;width:100%;min-height:28px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box}.input-prepend input,.input-append input,.input-prepend input[class*="span"],.input-append input[class*="span"]{display:inline-block;width:auto}}@media(min-width:768px) and (max-width:979px){.row{margin-left:-20px;*zoom:1}.row:before,.row:after{display:table;content:""}.row:after{clear:both}[class*="span"]{float:left;margin-left:20px}.container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:724px}.span12{width:724px}.span11{width:662px}.span10{width:600px}.span9{width:538px}.span8{width:476px}.span7{width:414px}.span6{width:352px}.span5{width:290px}.span4{width:228px}.span3{width:166px}.span2{width:104px}.span1{width:42px}.offset12{margin-left:764px}.offset11{margin-left:702px}.offset10{margin-left:640px}.offset9{margin-left:578px}.offset8{margin-left:516px}.offset7{margin-left:454px}.offset6{margin-left:392px}.offset5{margin-left:330px}.offset4{margin-left:268px}.offset3{margin-left:206px}.offset2{margin-left:144px}.offset1{margin-left:82px}.row-fluid{width:100%;*zoom:1}.row-fluid:before,.row-fluid:after{display:table;content:""}.row-fluid:after{clear:both}.row-fluid [class*="span"]{display:block;float:left;width:100%;min-height:28px;margin-left:2.762430939%;*margin-left:2.709239449638298%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box}.row-fluid [class*="span"]:first-child{margin-left:0}.row-fluid .span12{width:99.999999993%;*width:99.9468085036383%}.row-fluid .span11{width:91.436464082%;*width:91.38327259263829%}.row-fluid .span10{width:82.87292817100001%;*width:82.8197366816383%}.row-fluid .span9{width:74.30939226%;*width:74.25620077063829%}.row-fluid .span8{width:65.74585634900001%;*width:65.6926648596383%}.row-fluid .span7{width:57.182320438000005%;*width:57.129128948638304%}.row-fluid .span6{width:48.618784527%;*width:48.5655930376383%}.row-fluid .span5{width:40.055248616%;*width:40.0020571266383%}.row-fluid .span4{width:31.491712705%;*width:31.4385212156383%}.row-fluid .span3{width:22.928176794%;*width:22.874985304638297%}.row-fluid .span2{width:14.364640883%;*width:14.311449393638298%}.row-fluid .span1{width:5.801104972%;*width:5.747913482638298%}input,textarea,.uneditable-input{margin-left:0}input.span12,textarea.span12,.uneditable-input.span12{width:714px}input.span11,textarea.span11,.uneditable-input.span11{width:652px}input.span10,textarea.span10,.uneditable-input.span10{width:590px}input.span9,textarea.span9,.uneditable-input.span9{width:528px}input.span8,textarea.span8,.uneditable-input.span8{width:466px}input.span7,textarea.span7,.uneditable-input.span7{width:404px}input.span6,textarea.span6,.uneditable-input.span6{width:342px}input.span5,textarea.span5,.uneditable-input.span5{width:280px}input.span4,textarea.span4,.uneditable-input.span4{width:218px}input.span3,textarea.span3,.uneditable-input.span3{width:156px}input.span2,textarea.span2,.uneditable-input.span2{width:94px}input.span1,textarea.span1,.uneditable-input.span1{width:32px}}@media(min-width:1200px){.row{margin-left:-30px;*zoom:1}.row:before,.row:after{display:table;content:""}.row:after{clear:both}[class*="span"]{float:left;margin-left:30px}.container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:1170px}.span12{width:1170px}.span11{width:1070px}.span10{width:970px}.span9{width:870px}.span8{width:770px}.span7{width:670px}.span6{width:570px}.span5{width:470px}.span4{width:370px}.span3{width:270px}.span2{width:170px}.span1{width:70px}.offset12{margin-left:1230px}.offset11{margin-left:1130px}.offset10{margin-left:1030px}.offset9{margin-left:930px}.offset8{margin-left:830px}.offset7{margin-left:730px}.offset6{margin-left:630px}.offset5{margin-left:530px}.offset4{margin-left:430px}.offset3{margin-left:330px}.offset2{margin-left:230px}.offset1{margin-left:130px}.row-fluid{width:100%;*zoom:1}.row-fluid:before,.row-fluid:after{display:table;content:""}.row-fluid:after{clear:both}.row-fluid [class*="span"]{display:block;float:left;width:100%;min-height:28px;margin-left:2.564102564%;*margin-left:2.510911074638298%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box}.row-fluid [class*="span"]:first-child{margin-left:0}.row-fluid .span12{width:100%;*width:99.94680851063829%}.row-fluid .span11{width:91.45299145300001%;*width:91.3997999636383%}.row-fluid .span10{width:82.905982906%;*width:82.8527914166383%}.row-fluid .span9{width:74.358974359%;*width:74.30578286963829%}.row-fluid .span8{width:65.81196581200001%;*width:65.7587743226383%}.row-fluid .span7{width:57.264957265%;*width:57.2117657756383%}.row-fluid .span6{width:48.717948718%;*width:48.6647572286383%}.row-fluid .span5{width:40.170940171000005%;*width:40.117748681638304%}.row-fluid .span4{width:31.623931624%;*width:31.5707401346383%}.row-fluid .span3{width:23.076923077%;*width:23.0237315876383%}.row-fluid .span2{width:14.529914530000001%;*width:14.4767230406383%}.row-fluid .span1{width:5.982905983%;*width:5.929714493638298%}input,textarea,.uneditable-input{margin-left:0}input.span12,textarea.span12,.uneditable-input.span12{width:1160px}input.span11,textarea.span11,.uneditable-input.span11{width:1060px}input.span10,textarea.span10,.uneditable-input.span10{width:960px}input.span9,textarea.span9,.uneditable-input.span9{width:860px}input.span8,textarea.span8,.uneditable-input.span8{width:760px}input.span7,textarea.span7,.uneditable-input.span7{width:660px}input.span6,textarea.span6,.uneditable-input.span6{width:560px}input.span5,textarea.span5,.uneditable-input.span5{width:460px}input.span4,textarea.span4,.uneditable-input.span4{width:360px}input.span3,textarea.span3,.uneditable-input.span3{width:260px}input.span2,textarea.span2,.uneditable-input.span2{width:160px}input.span1,textarea.span1,.uneditable-input.span1{width:60px}.thumbnails{margin-left:-30px}.thumbnails>li{margin-left:30px}.row-fluid .thumbnails{margin-left:0}}@media(max-width:979px){body{padding-top:0}.navbar-fixed-top,.navbar-fixed-bottom{position:static}.navbar-fixed-top{margin-bottom:18px}.navbar-fixed-bottom{margin-top:18px}.navbar-fixed-top .navbar-inner,.navbar-fixed-bottom .navbar-inner{padding:5px}.navbar .container{width:auto;padding:0}.navbar .brand{padding-right:10px;padding-left:10px;margin:0 0 0 -5px}.nav-collapse{clear:both}.nav-collapse .nav{float:none;margin:0 0 9px}.nav-collapse .nav>li{float:none}.nav-collapse .nav>li>a{margin-bottom:2px}.nav-collapse .nav>.divider-vertical{display:none}.nav-collapse .nav .nav-header{color:#999;text-shadow:none}.nav-collapse .nav>li>a,.nav-collapse .dropdown-menu a{padding:6px 15px;font-weight:bold;color:#999;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.nav-collapse .btn{padding:4px 10px 4px;font-weight:normal;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.nav-collapse .dropdown-menu li+li a{margin-bottom:2px}.nav-collapse .nav>li>a:hover,.nav-collapse .dropdown-menu a:hover{background-color:#222}.nav-collapse.in .btn-group{padding:0;margin-top:5px}.nav-collapse .dropdown-menu{position:static;top:auto;left:auto;display:block;float:none;max-width:none;padding:0;margin:0 15px;background-color:transparent;border:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.nav-collapse .dropdown-menu:before,.nav-collapse .dropdown-menu:after{display:none}.nav-collapse .dropdown-menu .divider{display:none}.nav-collapse .navbar-form,.nav-collapse .navbar-search{float:none;padding:9px 15px;margin:9px 0;border-top:1px solid #222;border-bottom:1px solid #222;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1);box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1)}.navbar .nav-collapse .nav.pull-right{float:none;margin-left:0}.nav-collapse,.nav-collapse.collapse{height:0;overflow:hidden}.navbar .btn-navbar{display:block}.navbar-static .navbar-inner{padding-right:10px;padding-left:10px}}@media(min-width:980px){.nav-collapse.collapse{height:auto!important;overflow:visible!important}} diff --git a/app/css/bootstrap.min.css b/app/css/bootstrap.min.css deleted file mode 100644 index b74b454..0000000 --- a/app/css/bootstrap.min.css +++ /dev/null @@ -1,9 +0,0 @@ -/*! - * Bootstrap v2.0.4 - * - * Copyright 2012 Twitter, Inc - * Licensed under the Apache License v2.0 - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Designed and built with all the love in the world @twitter by @mdo and @fat. - */article,aside,details,figcaption,figure,footer,header,hgroup,nav,section{display:block}audio,canvas,video{display:inline-block;*display:inline;*zoom:1}audio:not([controls]){display:none}html{font-size:100%;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}a:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}a:hover,a:active{outline:0}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-0.5em}sub{bottom:-0.25em}img{max-width:100%;vertical-align:middle;border:0;-ms-interpolation-mode:bicubic}#map_canvas img{max-width:none}button,input,select,textarea{margin:0;font-size:100%;vertical-align:middle}button,input{*overflow:visible;line-height:normal}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}button,input[type="button"],input[type="reset"],input[type="submit"]{cursor:pointer;-webkit-appearance:button}input[type="search"]{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield}input[type="search"]::-webkit-search-decoration,input[type="search"]::-webkit-search-cancel-button{-webkit-appearance:none}textarea{overflow:auto;vertical-align:top}.clearfix{*zoom:1}.clearfix:before,.clearfix:after{display:table;content:""}.clearfix:after{clear:both}.hide-text{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.input-block-level{display:block;width:100%;min-height:28px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box}body{margin:0;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:13px;line-height:18px;color:#333;background-color:#fff}a{color:#08c;text-decoration:none}a:hover{color:#005580;text-decoration:underline}.row{margin-left:-20px;*zoom:1}.row:before,.row:after{display:table;content:""}.row:after{clear:both}[class*="span"]{float:left;margin-left:20px}.container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:940px}.span12{width:940px}.span11{width:860px}.span10{width:780px}.span9{width:700px}.span8{width:620px}.span7{width:540px}.span6{width:460px}.span5{width:380px}.span4{width:300px}.span3{width:220px}.span2{width:140px}.span1{width:60px}.offset12{margin-left:980px}.offset11{margin-left:900px}.offset10{margin-left:820px}.offset9{margin-left:740px}.offset8{margin-left:660px}.offset7{margin-left:580px}.offset6{margin-left:500px}.offset5{margin-left:420px}.offset4{margin-left:340px}.offset3{margin-left:260px}.offset2{margin-left:180px}.offset1{margin-left:100px}.row-fluid{width:100%;*zoom:1}.row-fluid:before,.row-fluid:after{display:table;content:""}.row-fluid:after{clear:both}.row-fluid [class*="span"]{display:block;float:left;width:100%;min-height:28px;margin-left:2.127659574%;*margin-left:2.0744680846382977%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box}.row-fluid [class*="span"]:first-child{margin-left:0}.row-fluid .span12{width:99.99999998999999%;*width:99.94680850063828%}.row-fluid .span11{width:91.489361693%;*width:91.4361702036383%}.row-fluid .span10{width:82.97872339599999%;*width:82.92553190663828%}.row-fluid .span9{width:74.468085099%;*width:74.4148936096383%}.row-fluid .span8{width:65.95744680199999%;*width:65.90425531263828%}.row-fluid .span7{width:57.446808505%;*width:57.3936170156383%}.row-fluid .span6{width:48.93617020799999%;*width:48.88297871863829%}.row-fluid .span5{width:40.425531911%;*width:40.3723404216383%}.row-fluid .span4{width:31.914893614%;*width:31.8617021246383%}.row-fluid .span3{width:23.404255317%;*width:23.3510638276383%}.row-fluid .span2{width:14.89361702%;*width:14.8404255306383%}.row-fluid .span1{width:6.382978723%;*width:6.329787233638298%}.container{margin-right:auto;margin-left:auto;*zoom:1}.container:before,.container:after{display:table;content:""}.container:after{clear:both}.container-fluid{padding-right:20px;padding-left:20px;*zoom:1}.container-fluid:before,.container-fluid:after{display:table;content:""}.container-fluid:after{clear:both}p{margin:0 0 9px}p small{font-size:11px;color:#999}.lead{margin-bottom:18px;font-size:20px;font-weight:200;line-height:27px}h1,h2,h3,h4,h5,h6{margin:0;font-family:inherit;font-weight:bold;color:inherit;text-rendering:optimizelegibility}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small{font-weight:normal;color:#999}h1{font-size:30px;line-height:36px}h1 small{font-size:18px}h2{font-size:24px;line-height:36px}h2 small{font-size:18px}h3{font-size:18px;line-height:27px}h3 small{font-size:14px}h4,h5,h6{line-height:18px}h4{font-size:14px}h4 small{font-size:12px}h5{font-size:12px}h6{font-size:11px;color:#999;text-transform:uppercase}.page-header{padding-bottom:17px;margin:18px 0;border-bottom:1px solid #eee}.page-header h1{line-height:1}ul,ol{padding:0;margin:0 0 9px 25px}ul ul,ul ol,ol ol,ol ul{margin-bottom:0}ul{list-style:disc}ol{list-style:decimal}li{line-height:18px}ul.unstyled,ol.unstyled{margin-left:0;list-style:none}dl{margin-bottom:18px}dt,dd{line-height:18px}dt{font-weight:bold;line-height:17px}dd{margin-left:9px}.dl-horizontal dt{float:left;width:120px;overflow:hidden;clear:left;text-align:right;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:130px}hr{margin:18px 0;border:0;border-top:1px solid #eee;border-bottom:1px solid #fff}strong{font-weight:bold}em{font-style:italic}.muted{color:#999}abbr[title]{cursor:help;border-bottom:1px dotted #999}abbr.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:0 0 0 15px;margin:0 0 18px;border-left:5px solid #eee}blockquote p{margin-bottom:0;font-size:16px;font-weight:300;line-height:22.5px}blockquote small{display:block;line-height:18px;color:#999}blockquote small:before{content:'\2014 \00A0'}blockquote.pull-right{float:right;padding-right:15px;padding-left:0;border-right:5px solid #eee;border-left:0}blockquote.pull-right p,blockquote.pull-right small{text-align:right}q:before,q:after,blockquote:before,blockquote:after{content:""}address{display:block;margin-bottom:18px;font-style:normal;line-height:18px}small{font-size:100%}cite{font-style:normal}code,pre{padding:0 3px 2px;font-family:Menlo,Monaco,Consolas,"Courier New",monospace;font-size:12px;color:#333;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}code{padding:2px 4px;color:#d14;background-color:#f7f7f9;border:1px solid #e1e1e8}pre{display:block;padding:8.5px;margin:0 0 9px;font-size:12.025px;line-height:18px;word-break:break-all;word-wrap:break-word;white-space:pre;white-space:pre-wrap;background-color:#f5f5f5;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.15);-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}pre.prettyprint{margin-bottom:18px}pre code{padding:0;color:inherit;background-color:transparent;border:0}.pre-scrollable{max-height:340px;overflow-y:scroll}form{margin:0 0 18px}fieldset{padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:27px;font-size:19.5px;line-height:36px;color:#333;border:0;border-bottom:1px solid #e5e5e5}legend small{font-size:13.5px;color:#999}label,input,button,select,textarea{font-size:13px;font-weight:normal;line-height:18px}input,button,select,textarea{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif}label{display:block;margin-bottom:5px}select,textarea,input[type="text"],input[type="password"],input[type="datetime"],input[type="datetime-local"],input[type="date"],input[type="month"],input[type="time"],input[type="week"],input[type="number"],input[type="email"],input[type="url"],input[type="search"],input[type="tel"],input[type="color"],.uneditable-input{display:inline-block;height:18px;padding:4px;margin-bottom:9px;font-size:13px;line-height:18px;color:#555}input,textarea{width:210px}textarea{height:auto}textarea,input[type="text"],input[type="password"],input[type="datetime"],input[type="datetime-local"],input[type="date"],input[type="month"],input[type="time"],input[type="week"],input[type="number"],input[type="email"],input[type="url"],input[type="search"],input[type="tel"],input[type="color"],.uneditable-input{background-color:#fff;border:1px solid #ccc;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-webkit-transition:border linear .2s,box-shadow linear .2s;-moz-transition:border linear .2s,box-shadow linear .2s;-ms-transition:border linear .2s,box-shadow linear .2s;-o-transition:border linear .2s,box-shadow linear .2s;transition:border linear .2s,box-shadow linear .2s}textarea:focus,input[type="text"]:focus,input[type="password"]:focus,input[type="datetime"]:focus,input[type="datetime-local"]:focus,input[type="date"]:focus,input[type="month"]:focus,input[type="time"]:focus,input[type="week"]:focus,input[type="number"]:focus,input[type="email"]:focus,input[type="url"]:focus,input[type="search"]:focus,input[type="tel"]:focus,input[type="color"]:focus,.uneditable-input:focus{border-color:rgba(82,168,236,0.8);outline:0;outline:thin dotted \9;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(82,168,236,0.6);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(82,168,236,0.6);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(82,168,236,0.6)}input[type="radio"],input[type="checkbox"]{margin:3px 0;*margin-top:0;line-height:normal;cursor:pointer}input[type="submit"],input[type="reset"],input[type="button"],input[type="radio"],input[type="checkbox"]{width:auto}.uneditable-textarea{width:auto;height:auto}select,input[type="file"]{height:28px;*margin-top:4px;line-height:28px}select{width:220px;border:1px solid #bbb}select[multiple],select[size]{height:auto}select:focus,input[type="file"]:focus,input[type="radio"]:focus,input[type="checkbox"]:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.radio,.checkbox{min-height:18px;padding-left:18px}.radio input[type="radio"],.checkbox input[type="checkbox"]{float:left;margin-left:-18px}.controls>.radio:first-child,.controls>.checkbox:first-child{padding-top:5px}.radio.inline,.checkbox.inline{display:inline-block;padding-top:5px;margin-bottom:0;vertical-align:middle}.radio.inline+.radio.inline,.checkbox.inline+.checkbox.inline{margin-left:10px}.input-mini{width:60px}.input-small{width:90px}.input-medium{width:150px}.input-large{width:210px}.input-xlarge{width:270px}.input-xxlarge{width:530px}input[class*="span"],select[class*="span"],textarea[class*="span"],.uneditable-input[class*="span"],.row-fluid input[class*="span"],.row-fluid select[class*="span"],.row-fluid textarea[class*="span"],.row-fluid .uneditable-input[class*="span"]{float:none;margin-left:0}.input-append input[class*="span"],.input-append .uneditable-input[class*="span"],.input-prepend input[class*="span"],.input-prepend .uneditable-input[class*="span"],.row-fluid .input-prepend [class*="span"],.row-fluid .input-append [class*="span"]{display:inline-block}input,textarea,.uneditable-input{margin-left:0}input.span12,textarea.span12,.uneditable-input.span12{width:930px}input.span11,textarea.span11,.uneditable-input.span11{width:850px}input.span10,textarea.span10,.uneditable-input.span10{width:770px}input.span9,textarea.span9,.uneditable-input.span9{width:690px}input.span8,textarea.span8,.uneditable-input.span8{width:610px}input.span7,textarea.span7,.uneditable-input.span7{width:530px}input.span6,textarea.span6,.uneditable-input.span6{width:450px}input.span5,textarea.span5,.uneditable-input.span5{width:370px}input.span4,textarea.span4,.uneditable-input.span4{width:290px}input.span3,textarea.span3,.uneditable-input.span3{width:210px}input.span2,textarea.span2,.uneditable-input.span2{width:130px}input.span1,textarea.span1,.uneditable-input.span1{width:50px}input[disabled],select[disabled],textarea[disabled],input[readonly],select[readonly],textarea[readonly]{cursor:not-allowed;background-color:#eee;border-color:#ddd}input[type="radio"][disabled],input[type="checkbox"][disabled],input[type="radio"][readonly],input[type="checkbox"][readonly]{background-color:transparent}.control-group.warning>label,.control-group.warning .help-block,.control-group.warning .help-inline{color:#c09853}.control-group.warning .checkbox,.control-group.warning .radio,.control-group.warning input,.control-group.warning select,.control-group.warning textarea{color:#c09853;border-color:#c09853}.control-group.warning .checkbox:focus,.control-group.warning .radio:focus,.control-group.warning input:focus,.control-group.warning select:focus,.control-group.warning textarea:focus{border-color:#a47e3c;-webkit-box-shadow:0 0 6px #dbc59e;-moz-box-shadow:0 0 6px #dbc59e;box-shadow:0 0 6px #dbc59e}.control-group.warning .input-prepend .add-on,.control-group.warning .input-append .add-on{color:#c09853;background-color:#fcf8e3;border-color:#c09853}.control-group.error>label,.control-group.error .help-block,.control-group.error .help-inline{color:#b94a48}.control-group.error .checkbox,.control-group.error .radio,.control-group.error input,.control-group.error select,.control-group.error textarea{color:#b94a48;border-color:#b94a48}.control-group.error .checkbox:focus,.control-group.error .radio:focus,.control-group.error input:focus,.control-group.error select:focus,.control-group.error textarea:focus{border-color:#953b39;-webkit-box-shadow:0 0 6px #d59392;-moz-box-shadow:0 0 6px #d59392;box-shadow:0 0 6px #d59392}.control-group.error .input-prepend .add-on,.control-group.error .input-append .add-on{color:#b94a48;background-color:#f2dede;border-color:#b94a48}.control-group.success>label,.control-group.success .help-block,.control-group.success .help-inline{color:#468847}.control-group.success .checkbox,.control-group.success .radio,.control-group.success input,.control-group.success select,.control-group.success textarea{color:#468847;border-color:#468847}.control-group.success .checkbox:focus,.control-group.success .radio:focus,.control-group.success input:focus,.control-group.success select:focus,.control-group.success textarea:focus{border-color:#356635;-webkit-box-shadow:0 0 6px #7aba7b;-moz-box-shadow:0 0 6px #7aba7b;box-shadow:0 0 6px #7aba7b}.control-group.success .input-prepend .add-on,.control-group.success .input-append .add-on{color:#468847;background-color:#dff0d8;border-color:#468847}input:focus:required:invalid,textarea:focus:required:invalid,select:focus:required:invalid{color:#b94a48;border-color:#ee5f5b}input:focus:required:invalid:focus,textarea:focus:required:invalid:focus,select:focus:required:invalid:focus{border-color:#e9322d;-webkit-box-shadow:0 0 6px #f8b9b7;-moz-box-shadow:0 0 6px #f8b9b7;box-shadow:0 0 6px #f8b9b7}.form-actions{padding:17px 20px 18px;margin-top:18px;margin-bottom:18px;background-color:#f5f5f5;border-top:1px solid #e5e5e5;*zoom:1}.form-actions:before,.form-actions:after{display:table;content:""}.form-actions:after{clear:both}.uneditable-input{overflow:hidden;white-space:nowrap;cursor:not-allowed;background-color:#fff;border-color:#eee;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.025);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,0.025);box-shadow:inset 0 1px 2px rgba(0,0,0,0.025)}:-moz-placeholder{color:#999}:-ms-input-placeholder{color:#999}::-webkit-input-placeholder{color:#999}.help-block,.help-inline{color:#555}.help-block{display:block;margin-bottom:9px}.help-inline{display:inline-block;*display:inline;padding-left:5px;vertical-align:middle;*zoom:1}.input-prepend,.input-append{margin-bottom:5px}.input-prepend input,.input-append input,.input-prepend select,.input-append select,.input-prepend .uneditable-input,.input-append .uneditable-input{position:relative;margin-bottom:0;*margin-left:0;vertical-align:middle;-webkit-border-radius:0 3px 3px 0;-moz-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0}.input-prepend input:focus,.input-append input:focus,.input-prepend select:focus,.input-append select:focus,.input-prepend .uneditable-input:focus,.input-append .uneditable-input:focus{z-index:2}.input-prepend .uneditable-input,.input-append .uneditable-input{border-left-color:#ccc}.input-prepend .add-on,.input-append .add-on{display:inline-block;width:auto;height:18px;min-width:16px;padding:4px 5px;font-weight:normal;line-height:18px;text-align:center;text-shadow:0 1px 0 #fff;vertical-align:middle;background-color:#eee;border:1px solid #ccc}.input-prepend .add-on,.input-append .add-on,.input-prepend .btn,.input-append .btn{margin-left:-1px;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.input-prepend .active,.input-append .active{background-color:#a9dba9;border-color:#46a546}.input-prepend .add-on,.input-prepend .btn{margin-right:-1px}.input-prepend .add-on:first-child,.input-prepend .btn:first-child{-webkit-border-radius:3px 0 0 3px;-moz-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px}.input-append input,.input-append select,.input-append .uneditable-input{-webkit-border-radius:3px 0 0 3px;-moz-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px}.input-append .uneditable-input{border-right-color:#ccc;border-left-color:#eee}.input-append .add-on:last-child,.input-append .btn:last-child{-webkit-border-radius:0 3px 3px 0;-moz-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0}.input-prepend.input-append input,.input-prepend.input-append select,.input-prepend.input-append .uneditable-input{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.input-prepend.input-append .add-on:first-child,.input-prepend.input-append .btn:first-child{margin-right:-1px;-webkit-border-radius:3px 0 0 3px;-moz-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px}.input-prepend.input-append .add-on:last-child,.input-prepend.input-append .btn:last-child{margin-left:-1px;-webkit-border-radius:0 3px 3px 0;-moz-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0}.search-query{padding-right:14px;padding-right:4px \9;padding-left:14px;padding-left:4px \9;margin-bottom:0;-webkit-border-radius:14px;-moz-border-radius:14px;border-radius:14px}.form-search input,.form-inline input,.form-horizontal input,.form-search textarea,.form-inline textarea,.form-horizontal textarea,.form-search select,.form-inline select,.form-horizontal select,.form-search .help-inline,.form-inline .help-inline,.form-horizontal .help-inline,.form-search .uneditable-input,.form-inline .uneditable-input,.form-horizontal .uneditable-input,.form-search .input-prepend,.form-inline .input-prepend,.form-horizontal .input-prepend,.form-search .input-append,.form-inline .input-append,.form-horizontal .input-append{display:inline-block;*display:inline;margin-bottom:0;*zoom:1}.form-search .hide,.form-inline .hide,.form-horizontal .hide{display:none}.form-search label,.form-inline label{display:inline-block}.form-search .input-append,.form-inline .input-append,.form-search .input-prepend,.form-inline .input-prepend{margin-bottom:0}.form-search .radio,.form-search .checkbox,.form-inline .radio,.form-inline .checkbox{padding-left:0;margin-bottom:0;vertical-align:middle}.form-search .radio input[type="radio"],.form-search .checkbox input[type="checkbox"],.form-inline .radio input[type="radio"],.form-inline .checkbox input[type="checkbox"]{float:left;margin-right:3px;margin-left:0}.control-group{margin-bottom:9px}legend+.control-group{margin-top:18px;-webkit-margin-top-collapse:separate}.form-horizontal .control-group{margin-bottom:18px;*zoom:1}.form-horizontal .control-group:before,.form-horizontal .control-group:after{display:table;content:""}.form-horizontal .control-group:after{clear:both}.form-horizontal .control-label{float:left;width:140px;padding-top:5px;text-align:right}.form-horizontal .controls{*display:inline-block;*padding-left:20px;margin-left:160px;*margin-left:0}.form-horizontal .controls:first-child{*padding-left:160px}.form-horizontal .help-block{margin-top:9px;margin-bottom:0}.form-horizontal .form-actions{padding-left:160px}table{max-width:100%;background-color:transparent;border-collapse:collapse;border-spacing:0}.table{width:100%;margin-bottom:18px}.table th,.table td{padding:8px;line-height:18px;text-align:left;vertical-align:top;border-top:1px solid #ddd}.table th{font-weight:bold}.table thead th{vertical-align:bottom}.table caption+thead tr:first-child th,.table caption+thead tr:first-child td,.table colgroup+thead tr:first-child th,.table colgroup+thead tr:first-child td,.table thead:first-child tr:first-child th,.table thead:first-child tr:first-child td{border-top:0}.table tbody+tbody{border-top:2px solid #ddd}.table-condensed th,.table-condensed td{padding:4px 5px}.table-bordered{border:1px solid #ddd;border-collapse:separate;*border-collapse:collapsed;border-left:0;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.table-bordered th,.table-bordered td{border-left:1px solid #ddd}.table-bordered caption+thead tr:first-child th,.table-bordered caption+tbody tr:first-child th,.table-bordered caption+tbody tr:first-child td,.table-bordered colgroup+thead tr:first-child th,.table-bordered colgroup+tbody tr:first-child th,.table-bordered colgroup+tbody tr:first-child td,.table-bordered thead:first-child tr:first-child th,.table-bordered tbody:first-child tr:first-child th,.table-bordered tbody:first-child tr:first-child td{border-top:0}.table-bordered thead:first-child tr:first-child th:first-child,.table-bordered tbody:first-child tr:first-child td:first-child{-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-topleft:4px}.table-bordered thead:first-child tr:first-child th:last-child,.table-bordered tbody:first-child tr:first-child td:last-child{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-moz-border-radius-topright:4px}.table-bordered thead:last-child tr:last-child th:first-child,.table-bordered tbody:last-child tr:last-child td:first-child{-webkit-border-radius:0 0 0 4px;-moz-border-radius:0 0 0 4px;border-radius:0 0 0 4px;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;-moz-border-radius-bottomleft:4px}.table-bordered thead:last-child tr:last-child th:last-child,.table-bordered tbody:last-child tr:last-child td:last-child{-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-moz-border-radius-bottomright:4px}.table-striped tbody tr:nth-child(odd) td,.table-striped tbody tr:nth-child(odd) th{background-color:#f9f9f9}.table tbody tr:hover td,.table tbody tr:hover th{background-color:#f5f5f5}table .span1{float:none;width:44px;margin-left:0}table .span2{float:none;width:124px;margin-left:0}table .span3{float:none;width:204px;margin-left:0}table .span4{float:none;width:284px;margin-left:0}table .span5{float:none;width:364px;margin-left:0}table .span6{float:none;width:444px;margin-left:0}table .span7{float:none;width:524px;margin-left:0}table .span8{float:none;width:604px;margin-left:0}table .span9{float:none;width:684px;margin-left:0}table .span10{float:none;width:764px;margin-left:0}table .span11{float:none;width:844px;margin-left:0}table .span12{float:none;width:924px;margin-left:0}table .span13{float:none;width:1004px;margin-left:0}table .span14{float:none;width:1084px;margin-left:0}table .span15{float:none;width:1164px;margin-left:0}table .span16{float:none;width:1244px;margin-left:0}table .span17{float:none;width:1324px;margin-left:0}table .span18{float:none;width:1404px;margin-left:0}table .span19{float:none;width:1484px;margin-left:0}table .span20{float:none;width:1564px;margin-left:0}table .span21{float:none;width:1644px;margin-left:0}table .span22{float:none;width:1724px;margin-left:0}table .span23{float:none;width:1804px;margin-left:0}table .span24{float:none;width:1884px;margin-left:0}[class^="icon-"],[class*=" icon-"]{display:inline-block;width:14px;height:14px;*margin-right:.3em;line-height:14px;vertical-align:text-top;background-image:url("../img/glyphicons-halflings.png");background-position:14px 14px;background-repeat:no-repeat}[class^="icon-"]:last-child,[class*=" icon-"]:last-child{*margin-left:0}.icon-white{background-image:url("../img/glyphicons-halflings-white.png")}.icon-glass{background-position:0 0}.icon-music{background-position:-24px 0}.icon-search{background-position:-48px 0}.icon-envelope{background-position:-72px 0}.icon-heart{background-position:-96px 0}.icon-star{background-position:-120px 0}.icon-star-empty{background-position:-144px 0}.icon-user{background-position:-168px 0}.icon-film{background-position:-192px 0}.icon-th-large{background-position:-216px 0}.icon-th{background-position:-240px 0}.icon-th-list{background-position:-264px 0}.icon-ok{background-position:-288px 0}.icon-remove{background-position:-312px 0}.icon-zoom-in{background-position:-336px 0}.icon-zoom-out{background-position:-360px 0}.icon-off{background-position:-384px 0}.icon-signal{background-position:-408px 0}.icon-cog{background-position:-432px 0}.icon-trash{background-position:-456px 0}.icon-home{background-position:0 -24px}.icon-file{background-position:-24px -24px}.icon-time{background-position:-48px -24px}.icon-road{background-position:-72px -24px}.icon-download-alt{background-position:-96px -24px}.icon-download{background-position:-120px -24px}.icon-upload{background-position:-144px -24px}.icon-inbox{background-position:-168px -24px}.icon-play-circle{background-position:-192px -24px}.icon-repeat{background-position:-216px -24px}.icon-refresh{background-position:-240px -24px}.icon-list-alt{background-position:-264px -24px}.icon-lock{background-position:-287px -24px}.icon-flag{background-position:-312px -24px}.icon-headphones{background-position:-336px -24px}.icon-volume-off{background-position:-360px -24px}.icon-volume-down{background-position:-384px -24px}.icon-volume-up{background-position:-408px -24px}.icon-qrcode{background-position:-432px -24px}.icon-barcode{background-position:-456px -24px}.icon-tag{background-position:0 -48px}.icon-tags{background-position:-25px -48px}.icon-book{background-position:-48px -48px}.icon-bookmark{background-position:-72px -48px}.icon-print{background-position:-96px -48px}.icon-camera{background-position:-120px -48px}.icon-font{background-position:-144px -48px}.icon-bold{background-position:-167px -48px}.icon-italic{background-position:-192px -48px}.icon-text-height{background-position:-216px -48px}.icon-text-width{background-position:-240px -48px}.icon-align-left{background-position:-264px -48px}.icon-align-center{background-position:-288px -48px}.icon-align-right{background-position:-312px -48px}.icon-align-justify{background-position:-336px -48px}.icon-list{background-position:-360px -48px}.icon-indent-left{background-position:-384px -48px}.icon-indent-right{background-position:-408px -48px}.icon-facetime-video{background-position:-432px -48px}.icon-picture{background-position:-456px -48px}.icon-pencil{background-position:0 -72px}.icon-map-marker{background-position:-24px -72px}.icon-adjust{background-position:-48px -72px}.icon-tint{background-position:-72px -72px}.icon-edit{background-position:-96px -72px}.icon-share{background-position:-120px -72px}.icon-check{background-position:-144px -72px}.icon-move{background-position:-168px -72px}.icon-step-backward{background-position:-192px -72px}.icon-fast-backward{background-position:-216px -72px}.icon-backward{background-position:-240px -72px}.icon-play{background-position:-264px -72px}.icon-pause{background-position:-288px -72px}.icon-stop{background-position:-312px -72px}.icon-forward{background-position:-336px -72px}.icon-fast-forward{background-position:-360px -72px}.icon-step-forward{background-position:-384px -72px}.icon-eject{background-position:-408px -72px}.icon-chevron-left{background-position:-432px -72px}.icon-chevron-right{background-position:-456px -72px}.icon-plus-sign{background-position:0 -96px}.icon-minus-sign{background-position:-24px -96px}.icon-remove-sign{background-position:-48px -96px}.icon-ok-sign{background-position:-72px -96px}.icon-question-sign{background-position:-96px -96px}.icon-info-sign{background-position:-120px -96px}.icon-screenshot{background-position:-144px -96px}.icon-remove-circle{background-position:-168px -96px}.icon-ok-circle{background-position:-192px -96px}.icon-ban-circle{background-position:-216px -96px}.icon-arrow-left{background-position:-240px -96px}.icon-arrow-right{background-position:-264px -96px}.icon-arrow-up{background-position:-289px -96px}.icon-arrow-down{background-position:-312px -96px}.icon-share-alt{background-position:-336px -96px}.icon-resize-full{background-position:-360px -96px}.icon-resize-small{background-position:-384px -96px}.icon-plus{background-position:-408px -96px}.icon-minus{background-position:-433px -96px}.icon-asterisk{background-position:-456px -96px}.icon-exclamation-sign{background-position:0 -120px}.icon-gift{background-position:-24px -120px}.icon-leaf{background-position:-48px -120px}.icon-fire{background-position:-72px -120px}.icon-eye-open{background-position:-96px -120px}.icon-eye-close{background-position:-120px -120px}.icon-warning-sign{background-position:-144px -120px}.icon-plane{background-position:-168px -120px}.icon-calendar{background-position:-192px -120px}.icon-random{background-position:-216px -120px}.icon-comment{background-position:-240px -120px}.icon-magnet{background-position:-264px -120px}.icon-chevron-up{background-position:-288px -120px}.icon-chevron-down{background-position:-313px -119px}.icon-retweet{background-position:-336px -120px}.icon-shopping-cart{background-position:-360px -120px}.icon-folder-close{background-position:-384px -120px}.icon-folder-open{background-position:-408px -120px}.icon-resize-vertical{background-position:-432px -119px}.icon-resize-horizontal{background-position:-456px -118px}.icon-hdd{background-position:0 -144px}.icon-bullhorn{background-position:-24px -144px}.icon-bell{background-position:-48px -144px}.icon-certificate{background-position:-72px -144px}.icon-thumbs-up{background-position:-96px -144px}.icon-thumbs-down{background-position:-120px -144px}.icon-hand-right{background-position:-144px -144px}.icon-hand-left{background-position:-168px -144px}.icon-hand-up{background-position:-192px -144px}.icon-hand-down{background-position:-216px -144px}.icon-circle-arrow-right{background-position:-240px -144px}.icon-circle-arrow-left{background-position:-264px -144px}.icon-circle-arrow-up{background-position:-288px -144px}.icon-circle-arrow-down{background-position:-312px -144px}.icon-globe{background-position:-336px -144px}.icon-wrench{background-position:-360px -144px}.icon-tasks{background-position:-384px -144px}.icon-filter{background-position:-408px -144px}.icon-briefcase{background-position:-432px -144px}.icon-fullscreen{background-position:-456px -144px}.dropup,.dropdown{position:relative}.dropdown-toggle{*margin-bottom:-3px}.dropdown-toggle:active,.open .dropdown-toggle{outline:0}.caret{display:inline-block;width:0;height:0;vertical-align:top;border-top:4px solid #000;border-right:4px solid transparent;border-left:4px solid transparent;content:"";opacity:.3;filter:alpha(opacity=30)}.dropdown .caret{margin-top:8px;margin-left:2px}.dropdown:hover .caret,.open .caret{opacity:1;filter:alpha(opacity=100)}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:4px 0;margin:1px 0 0;list-style:none;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);*border-right-width:2px;*border-bottom-width:2px;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,0.2);-moz-box-shadow:0 5px 10px rgba(0,0,0,0.2);box-shadow:0 5px 10px rgba(0,0,0,0.2);-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{*width:100%;height:1px;margin:8px 1px;*margin:-5px 0 5px;overflow:hidden;background-color:#e5e5e5;border-bottom:1px solid #fff}.dropdown-menu a{display:block;padding:3px 15px;clear:both;font-weight:normal;line-height:18px;color:#333;white-space:nowrap}.dropdown-menu li>a:hover,.dropdown-menu .active>a,.dropdown-menu .active>a:hover{color:#fff;text-decoration:none;background-color:#08c}.open{*z-index:1000}.open>.dropdown-menu{display:block}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-top:0;border-bottom:4px solid #000;content:"\2191"}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:1px}.typeahead{margin-top:2px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #eee;border:1px solid rgba(0,0,0,0.05);-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.05);box-shadow:inset 0 1px 1px rgba(0,0,0,0.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,0.15)}.well-large{padding:24px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.well-small{padding:9px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.fade{opacity:0;-webkit-transition:opacity .15s linear;-moz-transition:opacity .15s linear;-ms-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{position:relative;height:0;overflow:hidden;-webkit-transition:height .35s ease;-moz-transition:height .35s ease;-ms-transition:height .35s ease;-o-transition:height .35s ease;transition:height .35s ease}.collapse.in{height:auto}.close{float:right;font-size:20px;font-weight:bold;line-height:18px;color:#000;text-shadow:0 1px 0 #fff;opacity:.2;filter:alpha(opacity=20)}.close:hover{color:#000;text-decoration:none;cursor:pointer;opacity:.4;filter:alpha(opacity=40)}button.close{padding:0;cursor:pointer;background:transparent;border:0;-webkit-appearance:none}.btn{display:inline-block;*display:inline;padding:4px 10px 4px;margin-bottom:0;*margin-left:.3em;font-size:13px;line-height:18px;*line-height:20px;color:#333;text-align:center;text-shadow:0 1px 1px rgba(255,255,255,0.75);vertical-align:middle;cursor:pointer;background-color:#f5f5f5;*background-color:#e6e6e6;background-image:-ms-linear-gradient(top,#fff,#e6e6e6);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fff),to(#e6e6e6));background-image:-webkit-linear-gradient(top,#fff,#e6e6e6);background-image:-o-linear-gradient(top,#fff,#e6e6e6);background-image:linear-gradient(top,#fff,#e6e6e6);background-image:-moz-linear-gradient(top,#fff,#e6e6e6);background-repeat:repeat-x;border:1px solid #ccc;*border:0;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);border-color:#e6e6e6 #e6e6e6 #bfbfbf;border-bottom-color:#b3b3b3;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;filter:progid:dximagetransform.microsoft.gradient(startColorstr='#ffffff',endColorstr='#e6e6e6',GradientType=0);filter:progid:dximagetransform.microsoft.gradient(enabled=false);*zoom:1;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05)}.btn:hover,.btn:active,.btn.active,.btn.disabled,.btn[disabled]{background-color:#e6e6e6;*background-color:#d9d9d9}.btn:active,.btn.active{background-color:#ccc \9}.btn:first-child{*margin-left:0}.btn:hover{color:#333;text-decoration:none;background-color:#e6e6e6;*background-color:#d9d9d9;background-position:0 -15px;-webkit-transition:background-position .1s linear;-moz-transition:background-position .1s linear;-ms-transition:background-position .1s linear;-o-transition:background-position .1s linear;transition:background-position .1s linear}.btn:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn.active,.btn:active{background-color:#e6e6e6;background-color:#d9d9d9 \9;background-image:none;outline:0;-webkit-box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05)}.btn.disabled,.btn[disabled]{cursor:default;background-color:#e6e6e6;background-image:none;opacity:.65;filter:alpha(opacity=65);-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.btn-large{padding:9px 14px;font-size:15px;line-height:normal;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.btn-large [class^="icon-"]{margin-top:1px}.btn-small{padding:5px 9px;font-size:11px;line-height:16px}.btn-small [class^="icon-"]{margin-top:-1px}.btn-mini{padding:2px 6px;font-size:11px;line-height:14px}.btn-primary,.btn-primary:hover,.btn-warning,.btn-warning:hover,.btn-danger,.btn-danger:hover,.btn-success,.btn-success:hover,.btn-info,.btn-info:hover,.btn-inverse,.btn-inverse:hover{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25)}.btn-primary.active,.btn-warning.active,.btn-danger.active,.btn-success.active,.btn-info.active,.btn-inverse.active{color:rgba(255,255,255,0.75)}.btn{border-color:#ccc;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25)}.btn-primary{background-color:#0074cc;*background-color:#05c;background-image:-ms-linear-gradient(top,#08c,#05c);background-image:-webkit-gradient(linear,0 0,0 100%,from(#08c),to(#05c));background-image:-webkit-linear-gradient(top,#08c,#05c);background-image:-o-linear-gradient(top,#08c,#05c);background-image:-moz-linear-gradient(top,#08c,#05c);background-image:linear-gradient(top,#08c,#05c);background-repeat:repeat-x;border-color:#05c #05c #003580;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:dximagetransform.microsoft.gradient(startColorstr='#0088cc',endColorstr='#0055cc',GradientType=0);filter:progid:dximagetransform.microsoft.gradient(enabled=false)}.btn-primary:hover,.btn-primary:active,.btn-primary.active,.btn-primary.disabled,.btn-primary[disabled]{background-color:#05c;*background-color:#004ab3}.btn-primary:active,.btn-primary.active{background-color:#004099 \9}.btn-warning{background-color:#faa732;*background-color:#f89406;background-image:-ms-linear-gradient(top,#fbb450,#f89406);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fbb450),to(#f89406));background-image:-webkit-linear-gradient(top,#fbb450,#f89406);background-image:-o-linear-gradient(top,#fbb450,#f89406);background-image:-moz-linear-gradient(top,#fbb450,#f89406);background-image:linear-gradient(top,#fbb450,#f89406);background-repeat:repeat-x;border-color:#f89406 #f89406 #ad6704;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:dximagetransform.microsoft.gradient(startColorstr='#fbb450',endColorstr='#f89406',GradientType=0);filter:progid:dximagetransform.microsoft.gradient(enabled=false)}.btn-warning:hover,.btn-warning:active,.btn-warning.active,.btn-warning.disabled,.btn-warning[disabled]{background-color:#f89406;*background-color:#df8505}.btn-warning:active,.btn-warning.active{background-color:#c67605 \9}.btn-danger{background-color:#da4f49;*background-color:#bd362f;background-image:-ms-linear-gradient(top,#ee5f5b,#bd362f);background-image:-webkit-gradient(linear,0 0,0 100%,from(#ee5f5b),to(#bd362f));background-image:-webkit-linear-gradient(top,#ee5f5b,#bd362f);background-image:-o-linear-gradient(top,#ee5f5b,#bd362f);background-image:-moz-linear-gradient(top,#ee5f5b,#bd362f);background-image:linear-gradient(top,#ee5f5b,#bd362f);background-repeat:repeat-x;border-color:#bd362f #bd362f #802420;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:dximagetransform.microsoft.gradient(startColorstr='#ee5f5b',endColorstr='#bd362f',GradientType=0);filter:progid:dximagetransform.microsoft.gradient(enabled=false)}.btn-danger:hover,.btn-danger:active,.btn-danger.active,.btn-danger.disabled,.btn-danger[disabled]{background-color:#bd362f;*background-color:#a9302a}.btn-danger:active,.btn-danger.active{background-color:#942a25 \9}.btn-success{background-color:#5bb75b;*background-color:#51a351;background-image:-ms-linear-gradient(top,#62c462,#51a351);background-image:-webkit-gradient(linear,0 0,0 100%,from(#62c462),to(#51a351));background-image:-webkit-linear-gradient(top,#62c462,#51a351);background-image:-o-linear-gradient(top,#62c462,#51a351);background-image:-moz-linear-gradient(top,#62c462,#51a351);background-image:linear-gradient(top,#62c462,#51a351);background-repeat:repeat-x;border-color:#51a351 #51a351 #387038;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:dximagetransform.microsoft.gradient(startColorstr='#62c462',endColorstr='#51a351',GradientType=0);filter:progid:dximagetransform.microsoft.gradient(enabled=false)}.btn-success:hover,.btn-success:active,.btn-success.active,.btn-success.disabled,.btn-success[disabled]{background-color:#51a351;*background-color:#499249}.btn-success:active,.btn-success.active{background-color:#408140 \9}.btn-info{background-color:#49afcd;*background-color:#2f96b4;background-image:-ms-linear-gradient(top,#5bc0de,#2f96b4);background-image:-webkit-gradient(linear,0 0,0 100%,from(#5bc0de),to(#2f96b4));background-image:-webkit-linear-gradient(top,#5bc0de,#2f96b4);background-image:-o-linear-gradient(top,#5bc0de,#2f96b4);background-image:-moz-linear-gradient(top,#5bc0de,#2f96b4);background-image:linear-gradient(top,#5bc0de,#2f96b4);background-repeat:repeat-x;border-color:#2f96b4 #2f96b4 #1f6377;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:dximagetransform.microsoft.gradient(startColorstr='#5bc0de',endColorstr='#2f96b4',GradientType=0);filter:progid:dximagetransform.microsoft.gradient(enabled=false)}.btn-info:hover,.btn-info:active,.btn-info.active,.btn-info.disabled,.btn-info[disabled]{background-color:#2f96b4;*background-color:#2a85a0}.btn-info:active,.btn-info.active{background-color:#24748c \9}.btn-inverse{background-color:#414141;*background-color:#222;background-image:-ms-linear-gradient(top,#555,#222);background-image:-webkit-gradient(linear,0 0,0 100%,from(#555),to(#222));background-image:-webkit-linear-gradient(top,#555,#222);background-image:-o-linear-gradient(top,#555,#222);background-image:-moz-linear-gradient(top,#555,#222);background-image:linear-gradient(top,#555,#222);background-repeat:repeat-x;border-color:#222 #222 #000;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:dximagetransform.microsoft.gradient(startColorstr='#555555',endColorstr='#222222',GradientType=0);filter:progid:dximagetransform.microsoft.gradient(enabled=false)}.btn-inverse:hover,.btn-inverse:active,.btn-inverse.active,.btn-inverse.disabled,.btn-inverse[disabled]{background-color:#222;*background-color:#151515}.btn-inverse:active,.btn-inverse.active{background-color:#080808 \9}button.btn,input[type="submit"].btn{*padding-top:2px;*padding-bottom:2px}button.btn::-moz-focus-inner,input[type="submit"].btn::-moz-focus-inner{padding:0;border:0}button.btn.btn-large,input[type="submit"].btn.btn-large{*padding-top:7px;*padding-bottom:7px}button.btn.btn-small,input[type="submit"].btn.btn-small{*padding-top:3px;*padding-bottom:3px}button.btn.btn-mini,input[type="submit"].btn.btn-mini{*padding-top:1px;*padding-bottom:1px}.btn-group{position:relative;*margin-left:.3em;*zoom:1}.btn-group:before,.btn-group:after{display:table;content:""}.btn-group:after{clear:both}.btn-group:first-child{*margin-left:0}.btn-group+.btn-group{margin-left:5px}.btn-toolbar{margin-top:9px;margin-bottom:9px}.btn-toolbar .btn-group{display:inline-block;*display:inline;*zoom:1}.btn-group>.btn{position:relative;float:left;margin-left:-1px;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.btn-group>.btn:first-child{margin-left:0;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-bottomleft:4px;-moz-border-radius-topleft:4px}.btn-group>.btn:last-child,.btn-group>.dropdown-toggle{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-moz-border-radius-topright:4px;-moz-border-radius-bottomright:4px}.btn-group>.btn.large:first-child{margin-left:0;-webkit-border-bottom-left-radius:6px;border-bottom-left-radius:6px;-webkit-border-top-left-radius:6px;border-top-left-radius:6px;-moz-border-radius-bottomleft:6px;-moz-border-radius-topleft:6px}.btn-group>.btn.large:last-child,.btn-group>.large.dropdown-toggle{-webkit-border-top-right-radius:6px;border-top-right-radius:6px;-webkit-border-bottom-right-radius:6px;border-bottom-right-radius:6px;-moz-border-radius-topright:6px;-moz-border-radius-bottomright:6px}.btn-group>.btn:hover,.btn-group>.btn:focus,.btn-group>.btn:active,.btn-group>.btn.active{z-index:2}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.dropdown-toggle{*padding-top:4px;padding-right:8px;*padding-bottom:4px;padding-left:8px;-webkit-box-shadow:inset 1px 0 0 rgba(255,255,255,0.125),inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 1px 0 0 rgba(255,255,255,0.125),inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 1px 0 0 rgba(255,255,255,0.125),inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05)}.btn-group>.btn-mini.dropdown-toggle{padding-right:5px;padding-left:5px}.btn-group>.btn-small.dropdown-toggle{*padding-top:4px;*padding-bottom:4px}.btn-group>.btn-large.dropdown-toggle{padding-right:12px;padding-left:12px}.btn-group.open .dropdown-toggle{background-image:none;-webkit-box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05)}.btn-group.open .btn.dropdown-toggle{background-color:#e6e6e6}.btn-group.open .btn-primary.dropdown-toggle{background-color:#05c}.btn-group.open .btn-warning.dropdown-toggle{background-color:#f89406}.btn-group.open .btn-danger.dropdown-toggle{background-color:#bd362f}.btn-group.open .btn-success.dropdown-toggle{background-color:#51a351}.btn-group.open .btn-info.dropdown-toggle{background-color:#2f96b4}.btn-group.open .btn-inverse.dropdown-toggle{background-color:#222}.btn .caret{margin-top:7px;margin-left:0}.btn:hover .caret,.open.btn-group .caret{opacity:1;filter:alpha(opacity=100)}.btn-mini .caret{margin-top:5px}.btn-small .caret{margin-top:6px}.btn-large .caret{margin-top:6px;border-top-width:5px;border-right-width:5px;border-left-width:5px}.dropup .btn-large .caret{border-top:0;border-bottom:5px solid #000}.btn-primary .caret,.btn-warning .caret,.btn-danger .caret,.btn-info .caret,.btn-success .caret,.btn-inverse .caret{border-top-color:#fff;border-bottom-color:#fff;opacity:.75;filter:alpha(opacity=75)}.alert{padding:8px 35px 8px 14px;margin-bottom:18px;color:#c09853;text-shadow:0 1px 0 rgba(255,255,255,0.5);background-color:#fcf8e3;border:1px solid #fbeed5;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.alert-heading{color:inherit}.alert .close{position:relative;top:-2px;right:-21px;line-height:18px}.alert-success{color:#468847;background-color:#dff0d8;border-color:#d6e9c6}.alert-danger,.alert-error{color:#b94a48;background-color:#f2dede;border-color:#eed3d7}.alert-info{color:#3a87ad;background-color:#d9edf7;border-color:#bce8f1}.alert-block{padding-top:14px;padding-bottom:14px}.alert-block>p,.alert-block>ul{margin-bottom:0}.alert-block p+p{margin-top:5px}.nav{margin-bottom:18px;margin-left:0;list-style:none}.nav>li>a{display:block}.nav>li>a:hover{text-decoration:none;background-color:#eee}.nav>.pull-right{float:right}.nav .nav-header{display:block;padding:3px 15px;font-size:11px;font-weight:bold;line-height:18px;color:#999;text-shadow:0 1px 0 rgba(255,255,255,0.5);text-transform:uppercase}.nav li+.nav-header{margin-top:9px}.nav-list{padding-right:15px;padding-left:15px;margin-bottom:0}.nav-list>li>a,.nav-list .nav-header{margin-right:-15px;margin-left:-15px;text-shadow:0 1px 0 rgba(255,255,255,0.5)}.nav-list>li>a{padding:3px 15px}.nav-list>.active>a,.nav-list>.active>a:hover{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.2);background-color:#08c}.nav-list [class^="icon-"]{margin-right:2px}.nav-list .divider{*width:100%;height:1px;margin:8px 1px;*margin:-5px 0 5px;overflow:hidden;background-color:#e5e5e5;border-bottom:1px solid #fff}.nav-tabs,.nav-pills{*zoom:1}.nav-tabs:before,.nav-pills:before,.nav-tabs:after,.nav-pills:after{display:table;content:""}.nav-tabs:after,.nav-pills:after{clear:both}.nav-tabs>li,.nav-pills>li{float:left}.nav-tabs>li>a,.nav-pills>li>a{padding-right:12px;padding-left:12px;margin-right:2px;line-height:14px}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{margin-bottom:-1px}.nav-tabs>li>a{padding-top:8px;padding-bottom:8px;line-height:18px;border:1px solid transparent;-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.nav-tabs>.active>a,.nav-tabs>.active>a:hover{color:#555;cursor:default;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent}.nav-pills>li>a{padding-top:8px;padding-bottom:8px;margin-top:2px;margin-bottom:2px;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.nav-pills>.active>a,.nav-pills>.active>a:hover{color:#fff;background-color:#08c}.nav-stacked>li{float:none}.nav-stacked>li>a{margin-right:0}.nav-tabs.nav-stacked{border-bottom:0}.nav-tabs.nav-stacked>li>a{border:1px solid #ddd;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.nav-tabs.nav-stacked>li:first-child>a{-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0}.nav-tabs.nav-stacked>li:last-child>a{-webkit-border-radius:0 0 4px 4px;-moz-border-radius:0 0 4px 4px;border-radius:0 0 4px 4px}.nav-tabs.nav-stacked>li>a:hover{z-index:2;border-color:#ddd}.nav-pills.nav-stacked>li>a{margin-bottom:3px}.nav-pills.nav-stacked>li:last-child>a{margin-bottom:1px}.nav-tabs .dropdown-menu{-webkit-border-radius:0 0 5px 5px;-moz-border-radius:0 0 5px 5px;border-radius:0 0 5px 5px}.nav-pills .dropdown-menu{-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.nav-tabs .dropdown-toggle .caret,.nav-pills .dropdown-toggle .caret{margin-top:6px;border-top-color:#08c;border-bottom-color:#08c}.nav-tabs .dropdown-toggle:hover .caret,.nav-pills .dropdown-toggle:hover .caret{border-top-color:#005580;border-bottom-color:#005580}.nav-tabs .active .dropdown-toggle .caret,.nav-pills .active .dropdown-toggle .caret{border-top-color:#333;border-bottom-color:#333}.nav>.dropdown.active>a:hover{color:#000;cursor:pointer}.nav-tabs .open .dropdown-toggle,.nav-pills .open .dropdown-toggle,.nav>li.dropdown.open.active>a:hover{color:#fff;background-color:#999;border-color:#999}.nav li.dropdown.open .caret,.nav li.dropdown.open.active .caret,.nav li.dropdown.open a:hover .caret{border-top-color:#fff;border-bottom-color:#fff;opacity:1;filter:alpha(opacity=100)}.tabs-stacked .open>a:hover{border-color:#999}.tabbable{*zoom:1}.tabbable:before,.tabbable:after{display:table;content:""}.tabbable:after{clear:both}.tab-content{overflow:auto}.tabs-below>.nav-tabs,.tabs-right>.nav-tabs,.tabs-left>.nav-tabs{border-bottom:0}.tab-content>.tab-pane,.pill-content>.pill-pane{display:none}.tab-content>.active,.pill-content>.active{display:block}.tabs-below>.nav-tabs{border-top:1px solid #ddd}.tabs-below>.nav-tabs>li{margin-top:-1px;margin-bottom:0}.tabs-below>.nav-tabs>li>a{-webkit-border-radius:0 0 4px 4px;-moz-border-radius:0 0 4px 4px;border-radius:0 0 4px 4px}.tabs-below>.nav-tabs>li>a:hover{border-top-color:#ddd;border-bottom-color:transparent}.tabs-below>.nav-tabs>.active>a,.tabs-below>.nav-tabs>.active>a:hover{border-color:transparent #ddd #ddd #ddd}.tabs-left>.nav-tabs>li,.tabs-right>.nav-tabs>li{float:none}.tabs-left>.nav-tabs>li>a,.tabs-right>.nav-tabs>li>a{min-width:74px;margin-right:0;margin-bottom:3px}.tabs-left>.nav-tabs{float:left;margin-right:19px;border-right:1px solid #ddd}.tabs-left>.nav-tabs>li>a{margin-right:-1px;-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}.tabs-left>.nav-tabs>li>a:hover{border-color:#eee #ddd #eee #eee}.tabs-left>.nav-tabs .active>a,.tabs-left>.nav-tabs .active>a:hover{border-color:#ddd transparent #ddd #ddd;*border-right-color:#fff}.tabs-right>.nav-tabs{float:right;margin-left:19px;border-left:1px solid #ddd}.tabs-right>.nav-tabs>li>a{margin-left:-1px;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.tabs-right>.nav-tabs>li>a:hover{border-color:#eee #eee #eee #ddd}.tabs-right>.nav-tabs .active>a,.tabs-right>.nav-tabs .active>a:hover{border-color:#ddd #ddd #ddd transparent;*border-left-color:#fff}.navbar{*position:relative;*z-index:2;margin-bottom:18px;overflow:visible}.navbar-inner{min-height:40px;padding-right:20px;padding-left:20px;background-color:#2c2c2c;background-image:-moz-linear-gradient(top,#333,#222);background-image:-ms-linear-gradient(top,#333,#222);background-image:-webkit-gradient(linear,0 0,0 100%,from(#333),to(#222));background-image:-webkit-linear-gradient(top,#333,#222);background-image:-o-linear-gradient(top,#333,#222);background-image:linear-gradient(top,#333,#222);background-repeat:repeat-x;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;filter:progid:dximagetransform.microsoft.gradient(startColorstr='#333333',endColorstr='#222222',GradientType=0);-webkit-box-shadow:0 1px 3px rgba(0,0,0,0.25),inset 0 -1px 0 rgba(0,0,0,0.1);-moz-box-shadow:0 1px 3px rgba(0,0,0,0.25),inset 0 -1px 0 rgba(0,0,0,0.1);box-shadow:0 1px 3px rgba(0,0,0,0.25),inset 0 -1px 0 rgba(0,0,0,0.1)}.navbar .container{width:auto}.nav-collapse.collapse{height:auto}.navbar{color:#999}.navbar .brand:hover{text-decoration:none}.navbar .brand{display:block;float:left;padding:8px 20px 12px;margin-left:-20px;font-size:20px;font-weight:200;line-height:1;color:#999}.navbar .navbar-text{margin-bottom:0;line-height:40px}.navbar .navbar-link{color:#999}.navbar .navbar-link:hover{color:#fff}.navbar .btn,.navbar .btn-group{margin-top:5px}.navbar .btn-group .btn{margin:0}.navbar-form{margin-bottom:0;*zoom:1}.navbar-form:before,.navbar-form:after{display:table;content:""}.navbar-form:after{clear:both}.navbar-form input,.navbar-form select,.navbar-form .radio,.navbar-form .checkbox{margin-top:5px}.navbar-form input,.navbar-form select{display:inline-block;margin-bottom:0}.navbar-form input[type="image"],.navbar-form input[type="checkbox"],.navbar-form input[type="radio"]{margin-top:3px}.navbar-form .input-append,.navbar-form .input-prepend{margin-top:6px;white-space:nowrap}.navbar-form .input-append input,.navbar-form .input-prepend input{margin-top:0}.navbar-search{position:relative;float:left;margin-top:6px;margin-bottom:0}.navbar-search .search-query{padding:4px 9px;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:13px;font-weight:normal;line-height:1;color:#fff;background-color:#626262;border:1px solid #151515;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1),0 1px 0 rgba(255,255,255,0.15);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1),0 1px 0 rgba(255,255,255,0.15);box-shadow:inset 0 1px 2px rgba(0,0,0,0.1),0 1px 0 rgba(255,255,255,0.15);-webkit-transition:none;-moz-transition:none;-ms-transition:none;-o-transition:none;transition:none}.navbar-search .search-query:-moz-placeholder{color:#ccc}.navbar-search .search-query:-ms-input-placeholder{color:#ccc}.navbar-search .search-query::-webkit-input-placeholder{color:#ccc}.navbar-search .search-query:focus,.navbar-search .search-query.focused{padding:5px 10px;color:#333;text-shadow:0 1px 0 #fff;background-color:#fff;border:0;outline:0;-webkit-box-shadow:0 0 3px rgba(0,0,0,0.15);-moz-box-shadow:0 0 3px rgba(0,0,0,0.15);box-shadow:0 0 3px rgba(0,0,0,0.15)}.navbar-fixed-top,.navbar-fixed-bottom{position:fixed;right:0;left:0;z-index:1030;margin-bottom:0}.navbar-fixed-top .navbar-inner,.navbar-fixed-bottom .navbar-inner{padding-right:0;padding-left:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:940px}.navbar-fixed-top{top:0}.navbar-fixed-bottom{bottom:0}.navbar .nav{position:relative;left:0;display:block;float:left;margin:0 10px 0 0}.navbar .nav.pull-right{float:right}.navbar .nav>li{display:block;float:left}.navbar .nav>li>a{float:none;padding:9px 10px 11px;line-height:19px;color:#999;text-decoration:none;text-shadow:0 -1px 0 rgba(0,0,0,0.25)}.navbar .btn{display:inline-block;padding:4px 10px 4px;margin:5px 5px 6px;line-height:18px}.navbar .btn-group{padding:5px 5px 6px;margin:0}.navbar .nav>li>a:hover{color:#fff;text-decoration:none;background-color:transparent}.navbar .nav .active>a,.navbar .nav .active>a:hover{color:#fff;text-decoration:none;background-color:#222}.navbar .divider-vertical{width:1px;height:40px;margin:0 9px;overflow:hidden;background-color:#222;border-right:1px solid #333}.navbar .nav.pull-right{margin-right:0;margin-left:10px}.navbar .btn-navbar{display:none;float:right;padding:7px 10px;margin-right:5px;margin-left:5px;background-color:#2c2c2c;*background-color:#222;background-image:-ms-linear-gradient(top,#333,#222);background-image:-webkit-gradient(linear,0 0,0 100%,from(#333),to(#222));background-image:-webkit-linear-gradient(top,#333,#222);background-image:-o-linear-gradient(top,#333,#222);background-image:linear-gradient(top,#333,#222);background-image:-moz-linear-gradient(top,#333,#222);background-repeat:repeat-x;border-color:#222 #222 #000;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:dximagetransform.microsoft.gradient(startColorstr='#333333',endColorstr='#222222',GradientType=0);filter:progid:dximagetransform.microsoft.gradient(enabled=false);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.075);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.075);box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.075)}.navbar .btn-navbar:hover,.navbar .btn-navbar:active,.navbar .btn-navbar.active,.navbar .btn-navbar.disabled,.navbar .btn-navbar[disabled]{background-color:#222;*background-color:#151515}.navbar .btn-navbar:active,.navbar .btn-navbar.active{background-color:#080808 \9}.navbar .btn-navbar .icon-bar{display:block;width:18px;height:2px;background-color:#f5f5f5;-webkit-border-radius:1px;-moz-border-radius:1px;border-radius:1px;-webkit-box-shadow:0 1px 0 rgba(0,0,0,0.25);-moz-box-shadow:0 1px 0 rgba(0,0,0,0.25);box-shadow:0 1px 0 rgba(0,0,0,0.25)}.btn-navbar .icon-bar+.icon-bar{margin-top:3px}.navbar .dropdown-menu:before{position:absolute;top:-7px;left:9px;display:inline-block;border-right:7px solid transparent;border-bottom:7px solid #ccc;border-left:7px solid transparent;border-bottom-color:rgba(0,0,0,0.2);content:''}.navbar .dropdown-menu:after{position:absolute;top:-6px;left:10px;display:inline-block;border-right:6px solid transparent;border-bottom:6px solid #fff;border-left:6px solid transparent;content:''}.navbar-fixed-bottom .dropdown-menu:before{top:auto;bottom:-7px;border-top:7px solid #ccc;border-bottom:0;border-top-color:rgba(0,0,0,0.2)}.navbar-fixed-bottom .dropdown-menu:after{top:auto;bottom:-6px;border-top:6px solid #fff;border-bottom:0}.navbar .nav li.dropdown .dropdown-toggle .caret,.navbar .nav li.dropdown.open .caret{border-top-color:#fff;border-bottom-color:#fff}.navbar .nav li.dropdown.active .caret{opacity:1;filter:alpha(opacity=100)}.navbar .nav li.dropdown.open>.dropdown-toggle,.navbar .nav li.dropdown.active>.dropdown-toggle,.navbar .nav li.dropdown.open.active>.dropdown-toggle{background-color:transparent}.navbar .nav li.dropdown.active>.dropdown-toggle:hover{color:#fff}.navbar .pull-right .dropdown-menu,.navbar .dropdown-menu.pull-right{right:0;left:auto}.navbar .pull-right .dropdown-menu:before,.navbar .dropdown-menu.pull-right:before{right:12px;left:auto}.navbar .pull-right .dropdown-menu:after,.navbar .dropdown-menu.pull-right:after{right:13px;left:auto}.breadcrumb{padding:7px 14px;margin:0 0 18px;list-style:none;background-color:#fbfbfb;background-image:-moz-linear-gradient(top,#fff,#f5f5f5);background-image:-ms-linear-gradient(top,#fff,#f5f5f5);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fff),to(#f5f5f5));background-image:-webkit-linear-gradient(top,#fff,#f5f5f5);background-image:-o-linear-gradient(top,#fff,#f5f5f5);background-image:linear-gradient(top,#fff,#f5f5f5);background-repeat:repeat-x;border:1px solid #ddd;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;filter:progid:dximagetransform.microsoft.gradient(startColorstr='#ffffff',endColorstr='#f5f5f5',GradientType=0);-webkit-box-shadow:inset 0 1px 0 #fff;-moz-box-shadow:inset 0 1px 0 #fff;box-shadow:inset 0 1px 0 #fff}.breadcrumb li{display:inline-block;*display:inline;text-shadow:0 1px 0 #fff;*zoom:1}.breadcrumb .divider{padding:0 5px;color:#999}.breadcrumb .active a{color:#333}.pagination{height:36px;margin:18px 0}.pagination ul{display:inline-block;*display:inline;margin-bottom:0;margin-left:0;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;*zoom:1;-webkit-box-shadow:0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:0 1px 2px rgba(0,0,0,0.05);box-shadow:0 1px 2px rgba(0,0,0,0.05)}.pagination li{display:inline}.pagination a{float:left;padding:0 14px;line-height:34px;text-decoration:none;border:1px solid #ddd;border-left-width:0}.pagination a:hover,.pagination .active a{background-color:#f5f5f5}.pagination .active a{color:#999;cursor:default}.pagination .disabled span,.pagination .disabled a,.pagination .disabled a:hover{color:#999;cursor:default;background-color:transparent}.pagination li:first-child a{border-left-width:1px;-webkit-border-radius:3px 0 0 3px;-moz-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px}.pagination li:last-child a{-webkit-border-radius:0 3px 3px 0;-moz-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0}.pagination-centered{text-align:center}.pagination-right{text-align:right}.pager{margin-bottom:18px;margin-left:0;text-align:center;list-style:none;*zoom:1}.pager:before,.pager:after{display:table;content:""}.pager:after{clear:both}.pager li{display:inline}.pager a{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px}.pager a:hover{text-decoration:none;background-color:#f5f5f5}.pager .next a{float:right}.pager .previous a{float:left}.pager .disabled a,.pager .disabled a:hover{color:#999;cursor:default;background-color:#fff}.modal-open .dropdown-menu{z-index:2050}.modal-open .dropdown.open{*z-index:2050}.modal-open .popover{z-index:2060}.modal-open .tooltip{z-index:2070}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop,.modal-backdrop.fade.in{opacity:.8;filter:alpha(opacity=80)}.modal{position:fixed;top:50%;left:50%;z-index:1050;width:560px;margin:-250px 0 0 -280px;overflow:auto;background-color:#fff;border:1px solid #999;border:1px solid rgba(0,0,0,0.3);*border:1px solid #999;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 3px 7px rgba(0,0,0,0.3);-moz-box-shadow:0 3px 7px rgba(0,0,0,0.3);box-shadow:0 3px 7px rgba(0,0,0,0.3);-webkit-background-clip:padding-box;-moz-background-clip:padding-box;background-clip:padding-box}.modal.fade{top:-25%;-webkit-transition:opacity .3s linear,top .3s ease-out;-moz-transition:opacity .3s linear,top .3s ease-out;-ms-transition:opacity .3s linear,top .3s ease-out;-o-transition:opacity .3s linear,top .3s ease-out;transition:opacity .3s linear,top .3s ease-out}.modal.fade.in{top:50%}.modal-header{padding:9px 15px;border-bottom:1px solid #eee}.modal-header .close{margin-top:2px}.modal-body{max-height:400px;padding:15px;overflow-y:auto}.modal-form{margin-bottom:0}.modal-footer{padding:14px 15px 15px;margin-bottom:0;text-align:right;background-color:#f5f5f5;border-top:1px solid #ddd;-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px;*zoom:1;-webkit-box-shadow:inset 0 1px 0 #fff;-moz-box-shadow:inset 0 1px 0 #fff;box-shadow:inset 0 1px 0 #fff}.modal-footer:before,.modal-footer:after{display:table;content:""}.modal-footer:after{clear:both}.modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.tooltip{position:absolute;z-index:1020;display:block;padding:5px;font-size:11px;opacity:0;filter:alpha(opacity=0);visibility:visible}.tooltip.in{opacity:.8;filter:alpha(opacity=80)}.tooltip.top{margin-top:-2px}.tooltip.right{margin-left:2px}.tooltip.bottom{margin-top:2px}.tooltip.left{margin-left:-2px}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-top:5px solid #000;border-right:5px solid transparent;border-left:5px solid transparent}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-top:5px solid transparent;border-bottom:5px solid transparent;border-left:5px solid #000}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-right:5px solid transparent;border-bottom:5px solid #000;border-left:5px solid transparent}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-top:5px solid transparent;border-right:5px solid #000;border-bottom:5px solid transparent}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;text-decoration:none;background-color:#000;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0}.popover{position:absolute;top:0;left:0;z-index:1010;display:none;padding:5px}.popover.top{margin-top:-5px}.popover.right{margin-left:5px}.popover.bottom{margin-top:5px}.popover.left{margin-left:-5px}.popover.top .arrow{bottom:0;left:50%;margin-left:-5px;border-top:5px solid #000;border-right:5px solid transparent;border-left:5px solid transparent}.popover.right .arrow{top:50%;left:0;margin-top:-5px;border-top:5px solid transparent;border-right:5px solid #000;border-bottom:5px solid transparent}.popover.bottom .arrow{top:0;left:50%;margin-left:-5px;border-right:5px solid transparent;border-bottom:5px solid #000;border-left:5px solid transparent}.popover.left .arrow{top:50%;right:0;margin-top:-5px;border-top:5px solid transparent;border-bottom:5px solid transparent;border-left:5px solid #000}.popover .arrow{position:absolute;width:0;height:0}.popover-inner{width:280px;padding:3px;overflow:hidden;background:#000;background:rgba(0,0,0,0.8);-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 3px 7px rgba(0,0,0,0.3);-moz-box-shadow:0 3px 7px rgba(0,0,0,0.3);box-shadow:0 3px 7px rgba(0,0,0,0.3)}.popover-title{padding:9px 15px;line-height:1;background-color:#f5f5f5;border-bottom:1px solid #eee;-webkit-border-radius:3px 3px 0 0;-moz-border-radius:3px 3px 0 0;border-radius:3px 3px 0 0}.popover-content{padding:14px;background-color:#fff;-webkit-border-radius:0 0 3px 3px;-moz-border-radius:0 0 3px 3px;border-radius:0 0 3px 3px;-webkit-background-clip:padding-box;-moz-background-clip:padding-box;background-clip:padding-box}.popover-content p,.popover-content ul,.popover-content ol{margin-bottom:0}.thumbnails{margin-left:-20px;list-style:none;*zoom:1}.thumbnails:before,.thumbnails:after{display:table;content:""}.thumbnails:after{clear:both}.row-fluid .thumbnails{margin-left:0}.thumbnails>li{float:left;margin-bottom:18px;margin-left:20px}.thumbnail{display:block;padding:4px;line-height:1;border:1px solid #ddd;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:0 1px 1px rgba(0,0,0,0.075);box-shadow:0 1px 1px rgba(0,0,0,0.075)}a.thumbnail:hover{border-color:#08c;-webkit-box-shadow:0 1px 4px rgba(0,105,214,0.25);-moz-box-shadow:0 1px 4px rgba(0,105,214,0.25);box-shadow:0 1px 4px rgba(0,105,214,0.25)}.thumbnail>img{display:block;max-width:100%;margin-right:auto;margin-left:auto}.thumbnail .caption{padding:9px}.label,.badge{font-size:10.998px;font-weight:bold;line-height:14px;color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);white-space:nowrap;vertical-align:baseline;background-color:#999}.label{padding:1px 4px 2px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.badge{padding:1px 9px 2px;-webkit-border-radius:9px;-moz-border-radius:9px;border-radius:9px}a.label:hover,a.badge:hover{color:#fff;text-decoration:none;cursor:pointer}.label-important,.badge-important{background-color:#b94a48}.label-important[href],.badge-important[href]{background-color:#953b39}.label-warning,.badge-warning{background-color:#f89406}.label-warning[href],.badge-warning[href]{background-color:#c67605}.label-success,.badge-success{background-color:#468847}.label-success[href],.badge-success[href]{background-color:#356635}.label-info,.badge-info{background-color:#3a87ad}.label-info[href],.badge-info[href]{background-color:#2d6987}.label-inverse,.badge-inverse{background-color:#333}.label-inverse[href],.badge-inverse[href]{background-color:#1a1a1a}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-moz-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-ms-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:0 0}to{background-position:40px 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{height:18px;margin-bottom:18px;overflow:hidden;background-color:#f7f7f7;background-image:-moz-linear-gradient(top,#f5f5f5,#f9f9f9);background-image:-ms-linear-gradient(top,#f5f5f5,#f9f9f9);background-image:-webkit-gradient(linear,0 0,0 100%,from(#f5f5f5),to(#f9f9f9));background-image:-webkit-linear-gradient(top,#f5f5f5,#f9f9f9);background-image:-o-linear-gradient(top,#f5f5f5,#f9f9f9);background-image:linear-gradient(top,#f5f5f5,#f9f9f9);background-repeat:repeat-x;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;filter:progid:dximagetransform.microsoft.gradient(startColorstr='#f5f5f5',endColorstr='#f9f9f9',GradientType=0);-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1);box-shadow:inset 0 1px 2px rgba(0,0,0,0.1)}.progress .bar{width:0;height:18px;font-size:12px;color:#fff;text-align:center;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#0e90d2;background-image:-moz-linear-gradient(top,#149bdf,#0480be);background-image:-webkit-gradient(linear,0 0,0 100%,from(#149bdf),to(#0480be));background-image:-webkit-linear-gradient(top,#149bdf,#0480be);background-image:-o-linear-gradient(top,#149bdf,#0480be);background-image:linear-gradient(top,#149bdf,#0480be);background-image:-ms-linear-gradient(top,#149bdf,#0480be);background-repeat:repeat-x;filter:progid:dximagetransform.microsoft.gradient(startColorstr='#149bdf',endColorstr='#0480be',GradientType=0);-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);-moz-box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box;-webkit-transition:width .6s ease;-moz-transition:width .6s ease;-ms-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress-striped .bar{background-color:#149bdf;background-image:-o-linear-gradient(-45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-webkit-linear-gradient(-45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(-45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-ms-linear-gradient(-45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:linear-gradient(-45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);-webkit-background-size:40px 40px;-moz-background-size:40px 40px;-o-background-size:40px 40px;background-size:40px 40px}.progress.active .bar{-webkit-animation:progress-bar-stripes 2s linear infinite;-moz-animation:progress-bar-stripes 2s linear infinite;-ms-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-danger .bar{background-color:#dd514c;background-image:-moz-linear-gradient(top,#ee5f5b,#c43c35);background-image:-ms-linear-gradient(top,#ee5f5b,#c43c35);background-image:-webkit-gradient(linear,0 0,0 100%,from(#ee5f5b),to(#c43c35));background-image:-webkit-linear-gradient(top,#ee5f5b,#c43c35);background-image:-o-linear-gradient(top,#ee5f5b,#c43c35);background-image:linear-gradient(top,#ee5f5b,#c43c35);background-repeat:repeat-x;filter:progid:dximagetransform.microsoft.gradient(startColorstr='#ee5f5b',endColorstr='#c43c35',GradientType=0)}.progress-danger.progress-striped .bar{background-color:#ee5f5b;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(-45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(-45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-ms-linear-gradient(-45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(-45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(-45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.progress-success .bar{background-color:#5eb95e;background-image:-moz-linear-gradient(top,#62c462,#57a957);background-image:-ms-linear-gradient(top,#62c462,#57a957);background-image:-webkit-gradient(linear,0 0,0 100%,from(#62c462),to(#57a957));background-image:-webkit-linear-gradient(top,#62c462,#57a957);background-image:-o-linear-gradient(top,#62c462,#57a957);background-image:linear-gradient(top,#62c462,#57a957);background-repeat:repeat-x;filter:progid:dximagetransform.microsoft.gradient(startColorstr='#62c462',endColorstr='#57a957',GradientType=0)}.progress-success.progress-striped .bar{background-color:#62c462;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(-45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(-45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-ms-linear-gradient(-45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(-45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(-45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.progress-info .bar{background-color:#4bb1cf;background-image:-moz-linear-gradient(top,#5bc0de,#339bb9);background-image:-ms-linear-gradient(top,#5bc0de,#339bb9);background-image:-webkit-gradient(linear,0 0,0 100%,from(#5bc0de),to(#339bb9));background-image:-webkit-linear-gradient(top,#5bc0de,#339bb9);background-image:-o-linear-gradient(top,#5bc0de,#339bb9);background-image:linear-gradient(top,#5bc0de,#339bb9);background-repeat:repeat-x;filter:progid:dximagetransform.microsoft.gradient(startColorstr='#5bc0de',endColorstr='#339bb9',GradientType=0)}.progress-info.progress-striped .bar{background-color:#5bc0de;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(-45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(-45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-ms-linear-gradient(-45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(-45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(-45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.progress-warning .bar{background-color:#faa732;background-image:-moz-linear-gradient(top,#fbb450,#f89406);background-image:-ms-linear-gradient(top,#fbb450,#f89406);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fbb450),to(#f89406));background-image:-webkit-linear-gradient(top,#fbb450,#f89406);background-image:-o-linear-gradient(top,#fbb450,#f89406);background-image:linear-gradient(top,#fbb450,#f89406);background-repeat:repeat-x;filter:progid:dximagetransform.microsoft.gradient(startColorstr='#fbb450',endColorstr='#f89406',GradientType=0)}.progress-warning.progress-striped .bar{background-color:#fbb450;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(-45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(-45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-ms-linear-gradient(-45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(-45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(-45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.accordion{margin-bottom:18px}.accordion-group{margin-bottom:2px;border:1px solid #e5e5e5;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.accordion-heading{border-bottom:0}.accordion-heading .accordion-toggle{display:block;padding:8px 15px}.accordion-toggle{cursor:pointer}.accordion-inner{padding:9px 15px;border-top:1px solid #e5e5e5}.carousel{position:relative;margin-bottom:18px;line-height:1}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel .item{position:relative;display:none;-webkit-transition:.6s ease-in-out left;-moz-transition:.6s ease-in-out left;-ms-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel .item>img{display:block;line-height:1}.carousel .active,.carousel .next,.carousel .prev{display:block}.carousel .active{left:0}.carousel .next,.carousel .prev{position:absolute;top:0;width:100%}.carousel .next{left:100%}.carousel .prev{left:-100%}.carousel .next.left,.carousel .prev.right{left:0}.carousel .active.left{left:-100%}.carousel .active.right{left:100%}.carousel-control{position:absolute;top:40%;left:15px;width:40px;height:40px;margin-top:-20px;font-size:60px;font-weight:100;line-height:30px;color:#fff;text-align:center;background:#222;border:3px solid #fff;-webkit-border-radius:23px;-moz-border-radius:23px;border-radius:23px;opacity:.5;filter:alpha(opacity=50)}.carousel-control.right{right:15px;left:auto}.carousel-control:hover{color:#fff;text-decoration:none;opacity:.9;filter:alpha(opacity=90)}.carousel-caption{position:absolute;right:0;bottom:0;left:0;padding:10px 15px 5px;background:#333;background:rgba(0,0,0,0.75)}.carousel-caption h4,.carousel-caption p{color:#fff}.hero-unit{padding:60px;margin-bottom:30px;background-color:#eee;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.hero-unit h1{margin-bottom:0;font-size:60px;line-height:1;letter-spacing:-1px;color:inherit}.hero-unit p{font-size:18px;font-weight:200;line-height:27px;color:inherit}.pull-right{float:right}.pull-left{float:left}.hide{display:none}.show{display:block}.invisible{visibility:hidden} diff --git a/app/css/prism.css b/app/css/prism.css new file mode 100644 index 0000000..b986c58 --- /dev/null +++ b/app/css/prism.css @@ -0,0 +1,104 @@ +/** + * prism.js Dark theme for JavaScript, CSS and HTML + * Based on the slides of the talk “/Reg(exp){2}lained/” + * @author Lea Verou + */ + +code[class*="language-"], +pre[class*="language-"] { + color: white; + text-shadow: 0 -.1em .2em black; + font-family: Consolas, Monaco, 'Andale Mono', monospace; + direction: ltr; + text-align: left; + white-space: pre; + word-spacing: normal; + + -moz-tab-size: 4; + -o-tab-size: 4; + tab-size: 4; + + -webkit-hyphens: none; + -moz-hyphens: none; + -ms-hyphens: none; + hyphens: none; +} + +pre[class*="language-"], +:not(pre) > code[class*="language-"] { + background: hsl(30,20%,25%); +} + +/* Code blocks */ +pre[class*="language-"] { + padding: 1em; + margin: .5em 0; + overflow: auto; + border: .3em solid hsl(30,20%,40%); + border-radius: .5em; + box-shadow: 1px 1px .5em black inset; +} + +/* Inline code */ +:not(pre) > code[class*="language-"] { + padding: .15em .2em .05em; + border-radius: .3em; + border: .13em solid hsl(30,20%,40%); + box-shadow: 1px 1px .3em -.1em black inset; +} + +.token.comment, +.token.prolog, +.token.doctype, +.token.cdata { + color: hsl(30,20%,50%); +} + +.token.punctuation { + opacity: .7; +} + +.namespace { + opacity: .7; +} + +.token.property, +.token.tag, +.token.boolean, +.token.number { + color: hsl(350, 40%, 70%); +} + +.token.selector, +.token.attr-name, +.token.string { + color: hsl(75, 70%, 60%); +} + +.token.operator, +.token.entity, +.token.url, +.language-css .token.string, +.style .token.string { + color: hsl(40, 90%, 60%); +} + +.token.atrule, +.token.attr-value, +.token.keyword { + color: hsl(350, 40%, 70%); +} + + +.token.regex, +.token.important { + color: #e90; +} + +.token.important { + font-weight: bold; +} + +.token.entity { + cursor: help; +} diff --git a/app/css/sg.css b/app/css/sg.css new file mode 100644 index 0000000..71e2c11 --- /dev/null +++ b/app/css/sg.css @@ -0,0 +1,8 @@ +body { + font: 16px/26px 'Helvetica Neue', 'Helvetica', 'Arial', sans-serif; + color: #111; +} +h1 { + line-height: 36px; +} + diff --git a/app/favicon.ico b/app/favicon.ico index 71a641b..a40673e 100644 Binary files a/app/favicon.ico and b/app/favicon.ico differ diff --git a/app/img/apple-touch-icon-114x114.png b/app/img/apple-touch-icon-114x114.png index 657af8b..9d1b7f0 100644 Binary files a/app/img/apple-touch-icon-114x114.png and b/app/img/apple-touch-icon-114x114.png differ diff --git a/app/img/apple-touch-icon-144x144.png b/app/img/apple-touch-icon-144x144.png index 1a509f5..5f1186a 100644 Binary files a/app/img/apple-touch-icon-144x144.png and b/app/img/apple-touch-icon-144x144.png differ diff --git a/app/img/apple-touch-icon-72x72.png b/app/img/apple-touch-icon-72x72.png index e4287b1..c79a871 100644 Binary files a/app/img/apple-touch-icon-72x72.png and b/app/img/apple-touch-icon-72x72.png differ diff --git a/app/img/apple-touch-icon.png b/app/img/apple-touch-icon.png index d6eb04e..0e8c698 100644 Binary files a/app/img/apple-touch-icon.png and b/app/img/apple-touch-icon.png differ diff --git a/app/img/apple-touch-startup-image-748x1024.png b/app/img/apple-touch-startup-image-748x1024.png index d90fb1d..01680a2 100644 Binary files a/app/img/apple-touch-startup-image-748x1024.png and b/app/img/apple-touch-startup-image-748x1024.png differ diff --git a/app/img/apple-touch-startup-image-768x1004.png b/app/img/apple-touch-startup-image-768x1004.png index 4589755..1f9ad34 100644 Binary files a/app/img/apple-touch-startup-image-768x1004.png and b/app/img/apple-touch-startup-image-768x1004.png differ diff --git a/app/img/apple-touch-startup-image.png b/app/img/apple-touch-startup-image.png index 59d5219..8280890 100644 Binary files a/app/img/apple-touch-startup-image.png and b/app/img/apple-touch-startup-image.png differ diff --git a/app/img/bg-mount.png b/app/img/bg-mount.png new file mode 100644 index 0000000..45f351f Binary files /dev/null and b/app/img/bg-mount.png differ diff --git a/app/img/card-back.png b/app/img/card-back.png deleted file mode 100644 index d456a71..0000000 Binary files a/app/img/card-back.png and /dev/null differ diff --git a/app/img/card-back_@2x.png b/app/img/card-back_@2x.png deleted file mode 100644 index a577de4..0000000 Binary files a/app/img/card-back_@2x.png and /dev/null differ diff --git a/app/img/glyphicons-halflings-white.png b/app/img/glyphicons-halflings-white.png deleted file mode 100755 index 3bf6484..0000000 Binary files a/app/img/glyphicons-halflings-white.png and /dev/null differ diff --git a/app/img/glyphicons-halflings.png b/app/img/glyphicons-halflings.png deleted file mode 100755 index 79bc568..0000000 Binary files a/app/img/glyphicons-halflings.png and /dev/null differ diff --git a/app/img/glyphicons.png b/app/img/glyphicons.png new file mode 100644 index 0000000..9570248 Binary files /dev/null and b/app/img/glyphicons.png differ diff --git a/app/img/hatchet.svg b/app/img/hatchet.svg deleted file mode 100644 index bbe92a5..0000000 --- a/app/img/hatchet.svg +++ /dev/null @@ -1,64 +0,0 @@ - - - -]> - - - - - - - - - - - - - - - diff --git a/app/img/sun-mask.png b/app/img/sun-mask.png new file mode 100644 index 0000000..b3be6a1 Binary files /dev/null and b/app/img/sun-mask.png differ diff --git a/app/img/title.png b/app/img/title.png new file mode 100644 index 0000000..2a8c092 Binary files /dev/null and b/app/img/title.png differ diff --git a/app/img/title@2x.png b/app/img/title@2x.png new file mode 100644 index 0000000..f02fbc3 Binary files /dev/null and b/app/img/title@2x.png differ diff --git a/app/img/vert-ribbing.png b/app/img/vert-ribbing.png deleted file mode 100644 index 0db6b34..0000000 Binary files a/app/img/vert-ribbing.png and /dev/null differ diff --git a/app/index.ejs b/app/index.ejs index 55795f0..60edbfe 100644 --- a/app/index.ejs +++ b/app/index.ejs @@ -6,7 +6,7 @@ document.createElement('ng-include'); document.createElement('ng-pluralize'); document.createElement('ng-view'); - + // Optionally these for CSS document.createElement('ng:include'); document.createElement('ng:pluralize'); @@ -14,13 +14,12 @@ - + Hatjitsu :: Online Scrum Planning Poker for Agile Projects - - + @@ -32,6 +31,7 @@ + <%- CDN([ '/lib/modernizr.custom.07116.js', '/js/testing.js' ]) %> - -
- - - -
-
{{socketMessage}}
-
{{errorMessage}}
-
{{message}}
- -
- - + +
+
+
+ + +

Hatjitsu

+
+ +
+
+ +
+
Activity…
+
+
+
+
+ +
+ + +
- - - - - <%- CDN([ '/lib/jquery.cookie/jquery.cookie.js', '/lib/underscore.min.js', '/lib/angular/angular.min.js', '/lib/modernizr.custom.11646.js', '/lib/google.fastbutton.js', '/lib/jquery.google.fastbutton.js']) %> - <%- CDN([ '/js/app.js', '/js/controllers.js', '/js/directives.js', '/js/filters.js', '/js/services.js', '/js/document.js' ]) %> + + + + <%- CDN([ '/lib/underscore.min.js', '/lib/jquery.cookie.js' ]) %> + <%- CDN([ '/js/app.js', '/js/controllers.js', '/js/directives.js', '/js/filters.js', '/js/services.js', '/js/dom.js']) %> - - diff --git a/app/js/app.js b/app/js/app.js index c4b03d3..f248ed5 100644 --- a/app/js/app.js +++ b/app/js/app.js @@ -1,9 +1,12 @@ +/*jslint indent: 2, browser: true */ +/*global angular, LobbyCtrl, RoomCtrl */ + 'use strict'; // Declare app level module which depends on filters, and services angular.module('pokerApp', ['pokerApp.filters', 'pokerApp.services', 'pokerApp.directives']). - config(['$routeProvider', '$locationProvider', function($routeProvider, $locationProvider) { + config(['$routeProvider', '$locationProvider', function ($routeProvider, $locationProvider) { $locationProvider.html5Mode(true).hashPrefix('!'); $routeProvider.when('/', { templateUrl: 'partials/lobby.html', controller: LobbyCtrl}); $routeProvider.when('/:roomId', { templateUrl: 'partials/room.html', controller: RoomCtrl}); diff --git a/app/js/controllers.js b/app/js/controllers.js index d1e5fd3..c71cd29 100644 --- a/app/js/controllers.js +++ b/app/js/controllers.js @@ -1,3 +1,6 @@ +/*jslint indent: 2, browser: true */ +/*global angular, _, $, ScrollIntoView, DropDown */ + 'use strict'; /* Controllers */ @@ -7,31 +10,36 @@ function MainCtrl($scope, $timeout) { $scope.errorMessage = null; $scope.message = null; - $scope.$on('$routeChangeSuccess', function() { + $scope.$on('$routeChangeSuccess', function () { $scope.logoState = ''; - }); - $scope.$on('unanimous vote', function() { - $scope.logoState = 'green'; + $scope.bodyState = ''; + }); + $scope.$on('unanimous vote', function () { + $scope.logoState = ' header__logo--green'; + $scope.bodyState = ' body--green'; }); - $scope.$on('not unanimous vote', function() { - $scope.logoState = 'yellow'; + $scope.$on('not unanimous vote', function () { + $scope.logoState = ' header__logo--yellow'; + $scope.bodyState = ' body--yellow'; }); - $scope.$on('problem vote', function() { - $scope.logoState = 'red'; + $scope.$on('problem vote', function () { + $scope.logoState = ' header__logo--red'; + $scope.bodyState = ' body--red'; }); - $scope.$on('unfinished vote', function() { + $scope.$on('unfinished vote', function () { $scope.logoState = ''; + $scope.bodyState = ''; }); - $scope.$on('show message', function(evnt, msg) { + $scope.$on('show message', function (evnt, msg) { $scope.message = msg; - $timeout(function() { + $timeout(function () { $scope.message = null; }, 4000); }); - $scope.$on('show error', function(evnt, msg) { + $scope.$on('show error', function (evnt, msg) { $scope.errorMessage = msg; - $timeout(function() { + $timeout(function () { $scope.errorMessage = null; }, 3000); }); @@ -41,34 +49,67 @@ MainCtrl.$inject = ['$scope', '$timeout']; function LobbyCtrl($scope, $location, socket) { $scope.disableButtons = false; - $scope.createRoom = function() { + $scope.createRoom = function () { // console.log('createRoom: emit create room'); $scope.disableButtons = true; - socket.emit('create room', {}, function(roomUrl){ + socket.emit('create room', {}, function (roomUrl) { $location.path(roomUrl); }); - } - $scope.enterRoom = function(room) { + }; + $scope.enterRoom = function (room) { // console.log('enterRoom: room info'); $scope.disableButtons = true; - socket.emit('room info', { roomUrl: room }, function(response){ + socket.emit('room info', { roomUrl: room }, function (response) { if (response.error) { $scope.disableButtons = false; $scope.$emit('show error', response.error); } else { // console.log("going to enter room " + response.roomUrl); - $location.path(response.roomUrl); + $location.path(response.roomUrl); } }); - } + }; } LobbyCtrl.$inject = ['$scope', '$location', 'socket']; +function standardDeviation(values, avg){ + var squareDiffs = values.map(function(value){ + var diff = value - avg; + var sqrDiff = diff * diff; + return sqrDiff; + }); + + var avgSquareDiff = average(squareDiffs); + + var stdDev = Math.sqrt(avgSquareDiff); + return stdDev; +} + +function average(data){ + var sum = data.reduce(function(sum, value){ + return sum + value; + }, 0); + + var avg = sum / data.length; + return avg; +} + +function cardValue(vote){ + if (vote.match(/^[0-9]+$/)) { + return parseFloat(vote); + } else if (vote == '\u00BD') { + return 0.5; + } else if (vote == 'A\u2660') { + return 1; + } else if (vote == '\u2654') { + return 13; + } +} function RoomCtrl($scope, $routeParams, $timeout, socket) { - var processMessage = function(response, process) { + var processMessage = function (response, process) { // console.log("processMessage: response:", response) if (response.error) { $scope.$emit('show error', response.error); @@ -77,139 +118,178 @@ function RoomCtrl($scope, $routeParams, $timeout, socket) { } }; + var sumOfTwo = function (a, b) { + return a + b; + }; + // wipe out vote if voting state is not yet finished to prevent cheating. - // if it has already been set - use the actual vote. This works for unvoting - so that + // if it has already been set - use the actual vote. This works for unvoting - so that // before the flip occurs - we don't display 'oi' - var processVotes = function() { - + var processVotes = function () { var voteCount = $scope.votes.length; - _.each($scope.votes, function(v) { + _.each($scope.votes, function (v) { v.visibleVote = v.visibleVote === undefined && (!$scope.forcedReveal && voteCount < $scope.voterCount) ? 'oi!' : v.vote; }); + var voteArr = []; + voteArr.length = $scope.voterCount - voteCount; + $scope.placeholderVotes = voteArr; + + var cardValues = _.filter(_.map(_.pluck($scope.votes, 'vote'), cardValue), _.isNumber); + $scope.votingAverage = average(cardValues); + $scope.votingStandardDeviation = standardDeviation(cardValues, $scope.votingAverage).toFixed(2); + $scope.showAverage = voteArr.length === 0 && cardValues.length > 0; - $scope.forceRevealDisable = ( !$scope.forcedReveal && $scope.votes.length < $scope.voterCount ) ? false : true; + $scope.forceRevealDisable = (!$scope.forcedReveal && ($scope.votes.length < $scope.voterCount || $scope.voterCount === 0)) ? false : true; + console.log("forceRevealDisable", $scope.forceRevealDisable) + console.log("alreadySorted;", $scope.alreadySorted) + $scope.sortVotesDisable = !$scope.forceRevealDisable || $scope.alreadySorted; + console.log("sortVotesDisable", $scope.sortVotesDisable) if ($scope.votes.length === $scope.voterCount || $scope.forcedReveal) { + if ($scope.alreadySorted) { + $scope.votes = $scope.votes.sort(function(el1, el2) { + return $scope.cards.indexOf(el1.vote) - $scope.cards.indexOf(el2.vote); + }); + } + var uniqVotes = _.chain($scope.votes).pluck('vote').uniq().value().length; - if (uniqVotes == 1) { + if (uniqVotes === 1) { $scope.$emit('unanimous vote'); - } else if (uniqVotes == $scope.voterCount) { + } else if (uniqVotes === $scope.voterCount) { $scope.$emit('problem vote'); - } else if ($scope.voterCount > 3 && uniqVotes == ($scope.voterCount - 1)) { + } else if ($scope.voterCount > 3 && uniqVotes === ($scope.voterCount - 1)) { $scope.$emit('problem vote'); } else { - $scope.$emit('not unanimous vote'); + $scope.$emit('not unanimous vote'); } } else { $scope.$emit('unfinished vote'); } - } + }; - var myConnectionHash = function() { - return _.find($scope.connections, function(c) { return c.sessionId == $scope.sessionId }); - } + var myConnectionHash = function () { + return _.find($scope.connections, function (c) { return c.sessionId === $scope.sessionId; }); + }; - var myVoteHash = function() { - return _.find($scope.votes, function(c) { return c.sessionId == $scope.sessionId }); - } + var myVoteHash = function () { + return _.find($scope.votes, function (c) { return c.sessionId === $scope.sessionId; }); + }; - var setLocalVote = function(vote) { - $scope.myVote = vote; + var haveIVoted = function () { + if ($scope.myVote === 'undefined' || $scope.myVote === null) { + return false; + } + return true; + }; + + var votingFinished = function () { + return $scope.forcedReveal || $scope.votes.length === $scope.voterCount; + }; + + var setVotingState = function () { + $scope.cardsState = votingFinished() || !$scope.voter ? ' card--disabled' : ''; + $scope.votingState = votingFinished() ? ' flipped-stagger' : ''; + }; + + var setLocalVote = function (vote) { var voteHash = myVoteHash(); + $scope.myVote = vote; + $scope.voted = haveIVoted(); if (!voteHash) { // initialize connections array with my first vote. (just to speed up UI) $scope.votes.push({ sessionId: $scope.sessionId, vote: vote }); } else { if (vote) { - voteHash.vote = vote; + voteHash.vote = vote; } else { // we're unvoting - lets remove it from the votes. - $scope.votes = _.filter($scope.votes, function(v) { return v.sessionId != $scope.sessionId } ); + $scope.votes = _.filter($scope.votes, function (v) { + return v.sessionId !== $scope.sessionId; + }); // the above works - but causes an error in the UI. } } processVotes(); setVotingState(); - } + $scope.scrollToSelectedCards.now(); + }; - var refreshRoomInfo = function(roomObj) { + var chooseCardPack = function (val) { + var fib = ['0', '1', '2', '3', '5', '8', '13', '21', '34', '55', '89', '?']; + var goat = ['0', '\u00BD', '1', '2', '3', '5', '8', '13', '20', '40', '100', '?', '\u2615']; + var seq = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '?']; + var play = ['A\u2660', '2', '3', '5', '8', '\u2654']; + var tshirt = ['XL', 'L', 'M', 'S', 'XS', '?']; + switch (val) { + case ('fib'): + return fib; + case ('goat'): + return goat; + case ('seq'): + return seq; + case ('play'): + return play; + case ('tshirt'): + return tshirt; + default: + return []; + } + }; + + var refreshRoomInfo = function (roomObj) { // console.log("refreshRoomInfo: roomObj:", roomObj) if (roomObj.createAdmin) { - $.cookie("admin-" + roomObj.roomUrl, true); + $.cookie("admin-" + roomObj.roomUrl, true); } - if($.cookie("admin-" + roomObj.roomUrl)) { + if ($.cookie("admin-" + roomObj.roomUrl)) { $scope.showAdmin = true; } - + $scope.connections = roomObj.connections; $scope.humanCount = $scope.connections.length; $scope.cardPack = roomObj.cardPack; $scope.forcedReveal = roomObj.forcedReveal; + $scope.alreadySorted = roomObj.alreadySorted; $scope.cards = chooseCardPack($scope.cardPack); - $scope.votes = _.chain($scope.connections).filter(function(c) { return c.vote }).values().value(); - $scope.voterCount = _.filter($scope.connections, function(c) { return c.voter }).length; + $scope.votes = _.chain($scope.connections).filter(function (c) { + return c.vote; + }).values().value(); + $scope.voterCount = _.filter($scope.connections, function (c) { + return c.voter; + }).length; var connection = myConnectionHash(); if (connection) { - $scope.voter = connection.voter; + $scope.voter = connection.voter; $scope.myVote = connection.vote; + $scope.voted = haveIVoted(); } processVotes(); // we first want the cards to be displayed as hidden, and then apply the finished state // if voting has finished - which then actions the transition. - $timeout(function() { + $timeout(function () { setVotingState(); }, 100); - } - - var chooseCardPack = function(val) { - var fib = ['0', '1', '2', '3', '5', '8', '13', '21', '34', '55', '89', '?']; - var goat = ['0', '\u00BD', '1', '2', '3', '5', '8', '13', '20', '40', '100', '?', '\u2615']; - var seq = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '?']; - var play = ['A\u2660', '2', '3', '5', '8', '\u2654']; - var tshirt = ['XL', 'L', 'M', 'S', 'XS', '?']; - switch(val) { - case('fib') : - return fib; - case('goat') : - return goat; - case('seq') : - return seq; - case('play') : - return play; - case('tshirt') : - return tshirt; - default : - return []; - } - } - - var setVotingState = function() { - $scope.votingState = votingFinished() ? ' finished' : ' active'; - } - - var votingFinished = function() { - return $scope.forcedReveal || $scope.votes.length === $scope.voterCount; - } + }; - $scope.configureRoom = function() { + $scope.configureRoom = function () { socket.on('room joined', function () { // console.log("on room joined"); // console.log("emit room info", { roomUrl: $scope.roomId }); - this.emit('room info', { roomUrl: $scope.roomId }, function(response){ + this.emit('room info', { roomUrl: $scope.roomId }, function (response) { processMessage(response, refreshRoomInfo); }); }); socket.on('room left', function () { // console.log("on room left"); // console.log("emit room info", { roomUrl: $scope.roomId }); - this.emit('room info', { roomUrl: $scope.roomId }, function(response){ + this.emit('room info', { roomUrl: $scope.roomId }, function (response) { processMessage(response, refreshRoomInfo); }); }); @@ -217,35 +297,35 @@ function RoomCtrl($scope, $routeParams, $timeout, socket) { $scope.$emit('show message', 'Card pack changed...'); // console.log("on card pack set"); // console.log("emit room info", { roomUrl: $scope.roomId }); - this.emit('room info', { roomUrl: $scope.roomId }, function(response){ + this.emit('room info', { roomUrl: $scope.roomId }, function (response) { processMessage(response, refreshRoomInfo); }); }); socket.on('voter status changed', function () { // console.log("on voter status changed"); // console.log("emit room info", { roomUrl: $scope.roomId }); - this.emit('room info', { roomUrl: $scope.roomId }, function(response){ + this.emit('room info', { roomUrl: $scope.roomId }, function (response) { processMessage(response, refreshRoomInfo); }); }); socket.on('voted', function () { // console.log("on voted"); // console.log("emit room info", { roomUrl: $scope.roomId }); - this.emit('room info', { roomUrl: $scope.roomId }, function(response){ + this.emit('room info', { roomUrl: $scope.roomId }, function (response) { processMessage(response, refreshRoomInfo); }); }); socket.on('unvoted', function () { // console.log("on unvoted"); // console.log("emit room info", { roomUrl: $scope.roomId }); - this.emit('room info', { roomUrl: $scope.roomId }, function(response){ + this.emit('room info', { roomUrl: $scope.roomId }, function (response) { processMessage(response, refreshRoomInfo); }); }); socket.on('vote reset', function () { // console.log("on vote reset"); // console.log("emit room info", { roomUrl: $scope.roomId }); - this.emit('room info', { roomUrl: $scope.roomId }, function(response){ + this.emit('room info', { roomUrl: $scope.roomId }, function (response) { processMessage(response, refreshRoomInfo); }); }); @@ -253,90 +333,98 @@ function RoomCtrl($scope, $routeParams, $timeout, socket) { socket.on('reveal', function () { // console.log("reveal event received"); // setLocalVote(null); - this.emit('room info', { roomUrl: $scope.roomId }, function(response){ + this.emit('room info', { roomUrl: $scope.roomId }, function (response) { processMessage(response, refreshRoomInfo); }); }); - socket.on('connect', function() { + socket.on('connect', function () { // console.log("on connect"); var sessionId = this.socket.sessionid; // console.log("new socket id = " + sessionId); if (!$.cookie("sessionId")) { - $.cookie("sessionId", sessionId); + $.cookie("sessionId", sessionId); } $scope.sessionId = $.cookie("sessionId"); // console.log("session id = " + $scope.sessionId); // console.log("emit join room", { roomUrl: $scope.roomId, sessionId: $scope.sessionId }); - socket.emit('join room', { roomUrl: $scope.roomId, sessionId: $scope.sessionId }, function(response){ + socket.emit('join room', { roomUrl: $scope.roomId, sessionId: $scope.sessionId }, function (response) { processMessage(response, refreshRoomInfo); }); }); - socket.on('disconnect', function() { + socket.on('disconnect', function () { // console.log("on disconnect"); }); // console.log("emit join room", { roomUrl: $scope.roomId, sessionId: $scope.sessionId }); - socket.emit('join room', { roomUrl: $scope.roomId, sessionId: $scope.sessionId }, function(response){ + socket.emit('join room', { roomUrl: $scope.roomId, sessionId: $scope.sessionId }, function (response) { processMessage(response, refreshRoomInfo); }); - } + }; - $scope.setCardPack = function(cardPack) { + $scope.setCardPack = function (cardPack) { $scope.cardPack = cardPack; $scope.resetVote(); // console.log("set card pack", { roomUrl: $scope.roomId, cardPack: cardPack }); socket.emit('set card pack', { roomUrl: $scope.roomId, cardPack: cardPack }); - } + }; - $scope.vote = function(vote) { - if ($scope.myVote != vote) { - if ( !votingFinished() ) { + $scope.vote = function (vote) { + if ($scope.myVote !== vote) { + if (!votingFinished() && $scope.voter) { setLocalVote(vote); // console.log("emit vote", { roomUrl: $scope.roomId, vote: vote, sessionId: $scope.sessionId }); - socket.emit('vote', { roomUrl: $scope.roomId, vote: vote, sessionId: $scope.sessionId }, function(response) { + socket.emit('vote', { roomUrl: $scope.roomId, vote: vote, sessionId: $scope.sessionId }, function (response) { processMessage(response); }); } } - } + }; - $scope.unvote = function(sessionId) { + $scope.unvote = function (sessionId) { if (sessionId === $scope.sessionId) { - if ( !votingFinished() ) { - setLocalVote(null); + if (!votingFinished()) { + setLocalVote(undefined); // console.log("emit unvote", { roomUrl: $scope.roomId, sessionId: $scope.sessionId }); - socket.emit('unvote', { roomUrl: $scope.roomId, sessionId: $scope.sessionId }, function(response) { + socket.emit('unvote', { roomUrl: $scope.roomId, sessionId: $scope.sessionId }, function (response) { processMessage(response); }); } } - } + }; - $scope.resetVote = function() { + $scope.resetVote = function () { // console.log("emit reset vote", { roomUrl: $scope.roomId }); - socket.emit('reset vote', { roomUrl: $scope.roomId }, function(response) { + socket.emit('reset vote', { roomUrl: $scope.roomId }, function (response) { processMessage(response); }); - } + }; - $scope.forceReveal = function() { + $scope.forceReveal = function () { // console.log("emit force reveal", { roomUrl: $scope.roomId }); $scope.forceRevealDisable = true; - socket.emit('force reveal', { roomUrl: $scope.roomId }, function(response) { + socket.emit('force reveal', { roomUrl: $scope.roomId }, function (response) { processMessage(response); }); - } + }; + + $scope.sortVotes = function () { + // console.log("emit sort votes", { roomUrl: $scope.roomId }); + $scope.sortVotesDisable = true; + socket.emit('sort votes', { roomUrl: $scope.roomId }, function (response) { + processMessage(response); + }); + }; - $scope.toggleVoter = function() { + $scope.toggleVoter = function () { // console.log("emit toggle voter", { roomUrl: $scope.roomId, voter: $scope.voter, sessionId: $scope.sessionId }); - socket.emit('toggle voter', { roomUrl: $scope.roomId, voter: $scope.voter, sessionId: $scope.sessionId }, function(response) { + socket.emit('toggle voter', { roomUrl: $scope.roomId, voter: $scope.voter, sessionId: $scope.sessionId }, function (response) { processMessage(response); }); - } + }; $scope.roomId = $routeParams.roomId; $scope.humanCount = 0; @@ -346,10 +434,16 @@ function RoomCtrl($scope, $routeParams, $timeout, socket) { $scope.connections = {}; $scope.votes = []; $scope.cardPack = ''; - $scope.myVote = null; + $scope.myVote = undefined; + $scope.voted = haveIVoted(); $scope.votingState = ""; $scope.forcedReveal = false; $scope.forceRevealDisable = true; + $scope.sortVotesDisable = true; + $scope.scrollToSelectedCards = new ScrollIntoView($('#chosenCards')); + + $scope.dropDown = new DropDown('#dd'); + $scope.votingAverage = 0; } -RoomCtrl.$inject = ['$scope', '$routeParams', '$timeout', 'socket']; \ No newline at end of file +RoomCtrl.$inject = ['$scope', '$routeParams', '$timeout', 'socket']; diff --git a/app/js/directives.js b/app/js/directives.js index 98a8a2c..d70d6a4 100644 --- a/app/js/directives.js +++ b/app/js/directives.js @@ -1,45 +1,28 @@ +/*jslint indent: 2, browser: true */ +/*global angular */ + 'use strict'; /* Directives */ angular.module('pokerApp.directives', []). - directive('appVersion', ['version', function(version) { - return function(scope, elm, attrs) { + directive('appVersion', ['version', function (version) { + return function (scope, elm, attrs) { elm.text(version); }; }]). - directive('uiShow', [function() { - return function(scope, elm, attrs) { - scope.$watch(attrs.uiShow, function(newVal, oldVal) { - if (newVal) { - elm.addClass('ui-show'); - } else { - elm.removeClass('ui-show'); - } - }); + directive('cardvalue', function () { + return function (scope, elm, attrs) { + var value = scope.card || scope.vote.vote, + code = isNaN(parseInt(value, 10)) ? value.charCodeAt() : value; + elm.addClass('card--' + code); }; - }]). - directive('uiHide', [function() { - return function(scope, elm, attrs) { - scope.$watch(attrs.uiHide, function(newVal, oldVal) { - if (newVal) { - elm.addClass('ui-hide'); - } else { - elm.removeClass('ui-hide'); - } - }); + }). + directive('selectedvote', function () { + return function (scope, elm) { + if (scope.vote.sessionId === scope.sessionId) { + elm.addClass('card--selected'); + } }; - }]). - directive('uiEnter', [function() { - return function(scope, elm, attrs) { - elm.bind("keydown keypress", function(event) { - if(event.which === 13) { - scope.$apply(function() { - scope.$eval(attrs.uiEnter); - }); - event.preventDefault(); - } - }); - } - }]); \ No newline at end of file + }); diff --git a/app/js/document.js b/app/js/document.js deleted file mode 100644 index 6c05aa6..0000000 --- a/app/js/document.js +++ /dev/null @@ -1,22 +0,0 @@ -var resizer = function () { - var size = window.getComputedStyle(document.body,':after').getPropertyValue('content'); - if (size == 'widescreen') { - $("body").removeClass().addClass("three-column"); - } else if (size == 'narrow'){ - $("body").removeClass().addClass("narrow-screen"); - } else { - $('body').removeClass(); - } -} - -var showCardPanel = function() { - $('body').removeClass("active-settings").toggleClass("active-cardPanel"); -} - -var showVotePanel = function() { - $('body').removeClass("active-settings").removeClass("active-cardPanel"); -} - -var showSettings = function() { - $('body').removeClass("active-cardPanel").toggleClass("active-settings"); -} \ No newline at end of file diff --git a/app/js/dom.js b/app/js/dom.js new file mode 100644 index 0000000..372e1dd --- /dev/null +++ b/app/js/dom.js @@ -0,0 +1,36 @@ +/*jslint indent: 2, browser: true */ +/*global angular, $, document */ + +$(function () { + $('.no-js-hide').removeClass('no-js-hide'); +}); + +function DropDown(el) { + this.dd = el; + this.val = ''; + this.initEvents(); +} +DropDown.prototype = { + initEvents : function () { + var obj = this; + $(document).on('click', this.dd, function (event) { + $(this).toggleClass('active'); + return false; + }); + $(document).on('click', '.dropdown > li', function () { + $('span', obj.dd).text($(this).text() + ' pack'); + }); + $(document).click(function () { + $('.dropdown-wrapper', obj.dd).removeClass('active'); + }); + } +}; + +function ScrollIntoView(el) { + this.el = el; +} +ScrollIntoView.prototype = { + now : function () { + $('body').animate({ scrollTop : this.el.offset().top }, 'slow'); + } +}; \ No newline at end of file diff --git a/app/js/filters.js b/app/js/filters.js index 97f55e8..c52829a 100644 --- a/app/js/filters.js +++ b/app/js/filters.js @@ -1,10 +1,13 @@ +/*jslint indent: 2, browser: true */ +/*global angular, $ */ + 'use strict'; /* Filters */ angular.module('pokerApp.filters', []). - filter('interpolate', ['version', function(version) { - return function(text) { + filter('interpolate', ['version', function (version) { + return function (text) { return String(text).replace(/\%VERSION\%/mg, version); - } + }; }]); diff --git a/app/js/prism.js b/app/js/prism.js new file mode 100644 index 0000000..4bb80ba --- /dev/null +++ b/app/js/prism.js @@ -0,0 +1,9 @@ +/** + * Prism: Lightweight, robust, elegant syntax highlighting + * MIT license http://www.opensource.org/licenses/mit-license.php/ + * @author Lea Verou http://lea.verou.me + */(function(){var e=/\blang(?:uage)?-(?!\*)(\w+)\b/i,t=self.Prism={util:{type:function(e){return Object.prototype.toString.call(e).match(/\[object (\w+)\]/)[1]},clone:function(e){var n=t.util.type(e);switch(n){case"Object":var r={};for(var i in e)e.hasOwnProperty(i)&&(r[i]=t.util.clone(e[i]));return r;case"Array":return e.slice()}return e}},languages:{extend:function(e,n){var r=t.util.clone(t.languages[e]);for(var i in n)r[i]=n[i];return r},insertBefore:function(e,n,r,i){i=i||t.languages;var s=i[e],o={};for(var u in s)if(s.hasOwnProperty(u)){if(u==n)for(var a in r)r.hasOwnProperty(a)&&(o[a]=r[a]);o[u]=s[u]}return i[e]=o},DFS:function(e,n){for(var r in e){n.call(e,r,e[r]);t.util.type(e)==="Object"&&t.languages.DFS(e[r],n)}}},highlightAll:function(e,n){var r=document.querySelectorAll('code[class*="language-"], [class*="language-"] code, code[class*="lang-"], [class*="lang-"] code');for(var i=0,s;s=r[i++];)t.highlightElement(s,e===!0,n)},highlightElement:function(r,i,s){var o,u,a=r;while(a&&!e.test(a.className))a=a.parentNode;if(a){o=(a.className.match(e)||[,""])[1];u=t.languages[o]}if(!u)return;r.className=r.className.replace(e,"").replace(/\s+/g," ")+" language-"+o;a=r.parentNode;/pre/i.test(a.nodeName)&&(a.className=a.className.replace(e,"").replace(/\s+/g," ")+" language-"+o);var f=r.textContent;if(!f)return;f=f.replace(/&/g,"&").replace(//g,">").replace(/\u00a0/g," ");var l={element:r,language:o,grammar:u,code:f};t.hooks.run("before-highlight",l);if(i&&self.Worker){var c=new Worker(t.filename);c.onmessage=function(e){l.highlightedCode=n.stringify(JSON.parse(e.data));l.element.innerHTML=l.highlightedCode;s&&s.call(l.element);t.hooks.run("after-highlight",l)};c.postMessage(JSON.stringify({language:l.language,code:l.code}))}else{l.highlightedCode=t.highlight(l.code,l.grammar);l.element.innerHTML=l.highlightedCode;s&&s.call(r);t.hooks.run("after-highlight",l)}},highlight:function(e,r){return n.stringify(t.tokenize(e,r))},tokenize:function(e,n){var r=t.Token,i=[e],s=n.rest;if(s){for(var o in s)n[o]=s[o];delete n.rest}e:for(var o in n){if(!n.hasOwnProperty(o)||!n[o])continue;var u=n[o],a=u.inside,f=!!u.lookbehind||0;u=u.pattern||u;for(var l=0;le.length)break e;if(c instanceof r)continue;u.lastIndex=0;var h=u.exec(c);if(h){f&&(f=h[1].length);var p=h.index-1+f,h=h[0].slice(f),d=h.length,v=p+d,m=c.slice(0,p+1),g=c.slice(v+1),y=[l,1];m&&y.push(m);var b=new r(o,a?t.tokenize(h,a):h);y.push(b);g&&y.push(g);Array.prototype.splice.apply(i,y)}}}return i},hooks:{all:{},add:function(e,n){var r=t.hooks.all;r[e]=r[e]||[];r[e].push(n)},run:function(e,n){var r=t.hooks.all[e];if(!r||!r.length)return;for(var i=0,s;s=r[i++];)s(n)}}},n=t.Token=function(e,t){this.type=e;this.content=t};n.stringify=function(e){if(typeof e=="string")return e;if(Object.prototype.toString.call(e)=="[object Array]"){for(var r=0;r"+i.content+""};if(!self.document){self.addEventListener("message",function(e){var n=JSON.parse(e.data),r=n.language,i=n.code;self.postMessage(JSON.stringify(t.tokenize(i,t.languages[r])));self.close()},!1);return}var r=document.getElementsByTagName("script");r=r[r.length-1];if(r){t.filename=r.src;document.addEventListener&&!r.hasAttribute("data-manual")&&document.addEventListener("DOMContentLoaded",t.highlightAll)}})();; +Prism.languages.markup={comment:/<!--[\w\W]*?--(>|>)/g,prolog:/<\?.+?\?>/,doctype:/<!DOCTYPE.+?>/,cdata:/<!\[CDATA\[[\w\W]+?]]>/i,tag:{pattern:/<\/?[\w:-]+\s*(?:\s+[\w:-]+(?:=(?:("|')(\\?[\w\W])*?\1|\w+))?\s*)*\/?>/gi,inside:{tag:{pattern:/^<\/?[\w:-]+/i,inside:{punctuation:/^<\/?/,namespace:/^[\w-]+?:/}},"attr-value":{pattern:/=(?:('|")[\w\W]*?(\1)|[^\s>]+)/gi,inside:{punctuation:/=|>|"/g}},punctuation:/\/?>/g,"attr-name":{pattern:/[\w:-]+/g,inside:{namespace:/^[\w-]+?:/}}}},entity:/&#?[\da-z]{1,8};/gi};Prism.hooks.add("wrap",function(e){e.type==="entity"&&(e.attributes.title=e.content.replace(/&/,"&"))});; +Prism.languages.css={comment:/\/\*[\w\W]*?\*\//g,atrule:/@[\w-]+?(\s+[^;{]+)?(?=\s*{|\s*;)/gi,url:/url\((["']?).*?\1\)/gi,selector:/[^\{\}\s][^\{\}]*(?=\s*\{)/g,property:/(\b|\B)[a-z-]+(?=\s*:)/ig,string:/("|')(\\?.)*?\1/g,important:/\B!important\b/gi,ignore:/&(lt|gt|amp);/gi,punctuation:/[\{\};:]/g};Prism.languages.markup&&Prism.languages.insertBefore("markup","tag",{style:{pattern:/(<|<)style[\w\W]*?(>|>)[\w\W]*?(<|<)\/style(>|>)/ig,inside:{tag:{pattern:/(<|<)style[\w\W]*?(>|>)|(<|<)\/style(>|>)/ig,inside:Prism.languages.markup.tag.inside},rest:Prism.languages.css}}});; +Prism.languages.clike={comment:{pattern:/(^|[^\\])(\/\*[\w\W]*?\*\/|\/\/.*?(\r?\n|$))/g,lookbehind:!0},string:/("|')(\\?.)*?\1/g,keyword:/\b(if|else|while|do|for|return|in|instanceof|function|new|try|catch|finally|null|break|continue)\b/g,"boolean":/\b(true|false)\b/g,number:/\b-?(0x)?\d*\.?[\da-f]+\b/g,operator:/[-+]{1,2}|!|=?<|=?>|={1,2}|(&){1,2}|\|?\||\?|\*|\//g,ignore:/&(lt|gt|amp);/gi,punctuation:/[{}[\];(),.:]/g};; +Prism.languages.javascript=Prism.languages.extend("clike",{keyword:/\b(var|let|if|else|while|do|for|return|in|instanceof|function|new|with|typeof|try|catch|finally|null|break|continue)\b/g,number:/\b(-?(0x)?\d*\.?[\da-f]+|NaN|-?Infinity)\b/g});Prism.languages.insertBefore("javascript","keyword",{regex:{pattern:/(^|[^/])\/(?!\/)(\[.+?]|\\.|[^/\r\n])+\/[gim]{0,3}(?=\s*($|[\r\n,.;})]))/g,lookbehind:!0}});Prism.languages.markup&&Prism.languages.insertBefore("markup","tag",{script:{pattern:/(<|<)script[\w\W]*?(>|>)[\w\W]*?(<|<)\/script(>|>)/ig,inside:{tag:{pattern:/(<|<)script[\w\W]*?(>|>)|(<|<)\/script(>|>)/ig,inside:Prism.languages.markup.tag.inside},rest:Prism.languages.javascript}}});; diff --git a/app/js/services.js b/app/js/services.js index 9cf55b4..c9b5c61 100644 --- a/app/js/services.js +++ b/app/js/services.js @@ -1,3 +1,6 @@ +/*jslint indent: 2, browser: true */ +/*global angular, Sock, io, $ */ + 'use strict'; /* Services */ @@ -9,12 +12,12 @@ var pokerAppServices = angular.module('pokerApp.services', []); pokerAppServices.value('version', '0.1'); -pokerAppServices.service('socket', ['$rootScope', '$timeout', function($rootScope) { +pokerAppServices.service('socket', ['$rootScope', '$timeout', function ($rootScope) { var sock = new Sock($rootScope); return sock; }]); -pokerAppServices.factory('socket', ['$rootScope', function($rootScope) { +pokerAppServices.factory('socket', ['$rootScope', function ($rootScope) { var socket = io.connect(location.protocol + '//' + location.hostname, { 'port': location.port, 'reconnect': true, @@ -24,67 +27,67 @@ pokerAppServices.factory('socket', ['$rootScope', function($rootScope) { 'transports': ['websocket', 'htmlfile', 'xhr-polling', 'jsonp-polling'] }); - $rootScope.socketMessage = null; - $rootScope.activity = false; + $rootScope.socketMessage = null; + $rootScope.activity = false; $rootScope.sessionId = null; - socket.on('error', function(reason) { + socket.on('error', function (reason) { // console.log('service: on error', reason); - $rootScope.$apply(function() { - $rootScope.socketMessage = ":-( Error = " + reason; + $rootScope.$apply(function () { + $rootScope.socketMessage = ":-( Error = " + reason; }); // console.log(reason); }); - socket.on('connect_failed', function(reason) { + socket.on('connect_failed', function (reason) { // console.log('service: on connect failed', reason); - $rootScope.$apply(function() { - $rootScope.socketMessage = ":-( Connect failed"; + $rootScope.$apply(function () { + $rootScope.socketMessage = ":-( Connect failed"; }); // console.log(reason); }); - socket.on('disconnect', function() { + socket.on('disconnect', function () { // console.log('service: on disconnect'); - $rootScope.$apply(function() { - $rootScope.socketMessage = ":-( Disconnected"; + $rootScope.$apply(function () { + $rootScope.socketMessage = ":-( Disconnected"; }); // console.log('disconnected'); }); - socket.on('connecting', function() { + socket.on('connecting', function () { // console.log('service: on connecting'); - $rootScope.$apply(function() { - $rootScope.socketMessage = "Connecting..."; + $rootScope.$apply(function () { + $rootScope.socketMessage = "Connecting..."; }); // console.log('disconnected'); }); - socket.on('reconnecting', function() { + socket.on('reconnecting', function () { // console.log('service: on reconnecting'); - $rootScope.$apply(function() { - $rootScope.socketMessage = "Reconnecting..."; + $rootScope.$apply(function () { + $rootScope.socketMessage = "Reconnecting..."; }); // console.log('disconnected'); }); - socket.on('reconnect', function() { + socket.on('reconnect', function () { // console.log('service: on reconnect'); - $rootScope.$apply(function() { - $rootScope.socketMessage = null; + $rootScope.$apply(function () { + $rootScope.socketMessage = null; }); // console.log('disconnected'); }); - socket.on('reconnect_failed', function() { + socket.on('reconnect_failed', function () { // console.log('service: on reconnect_failed'); - $rootScope.$apply(function() { - $rootScope.socketMessage = ":-( Reconnect failed"; + $rootScope.$apply(function () { + $rootScope.socketMessage = ":-( Reconnect failed"; }); // console.log('disconnected'); }); - socket.on('connect', function() { + socket.on('connect', function () { var sessionId = this.socket.sessionid; // console.log('service: on connect'); - $rootScope.$apply(function() { - $rootScope.socketMessage = null; + $rootScope.$apply(function () { + $rootScope.socketMessage = null; // console.log("new session id = " + sessionId); if (!$.cookie("sessionId")) { - $.cookie("sessionId", sessionId); + $.cookie("sessionId", sessionId); } $rootScope.sessionId = $.cookie("sessionId"); // console.log("session id = " + that.rootScope.sessionId); @@ -94,24 +97,24 @@ pokerAppServices.factory('socket', ['$rootScope', function($rootScope) { return { on: function (eventName, callback) { $rootScope.socketMessage = null; - socket.on(eventName, function() { + socket.on(eventName, function () { var args = arguments; $rootScope.$apply(function () { callback.apply(socket, args); - }) - }) + }); + }); }, emit: function (eventName, data, callback) { $rootScope.activity = true; - socket.emit(eventName, data, function() { + socket.emit(eventName, data, function () { var args = arguments; - $rootScope.$apply(function() { + $rootScope.$apply(function () { $rootScope.activity = false; if (callback) { callback.apply(socket, args); } - }) - }) + }); + }); } - } -}]) \ No newline at end of file + }; +}]); \ No newline at end of file diff --git a/app/js/sg.js b/app/js/sg.js new file mode 100644 index 0000000..4b8fef4 --- /dev/null +++ b/app/js/sg.js @@ -0,0 +1,82 @@ +/* jshint jquery:true */ +/* Author: Dave Rupert +* License: WTFPL +* Liberally pinched and readapted with thanks +----------------------*/ + +(function($){ + 'use strict'; + + $.fn.dataCodeBlock = function(){ + + // Yoinked from Prototype.js + var escapeHTML = function( code ) { + return code.replace(/&/g,'&').replace(//g,'>'); + }; + var lastIndentationSize = function ( ary ){ + if (ary.length <= 1){ + return 0; + } + var str = ary[ary.length-1] + var string = ""; + var spaces = str.match(/ /g) === null ? 0 : str.match(/ /g).length; + for (var i = 0; i < spaces; i++) { + string += " "; + }; + return string; + }; + var reIndent = function ( str, sub ){ + var intIndexOfMatch = str.indexOf( sub ); + while (intIndexOfMatch != -1){ + str = str.replace( sub, "" ) + intIndexOfMatch = str.indexOf( sub ); + } + return str; + }; + + return $('[data-codeblock]').each(function(){ + var target = $(this).data('codeblock') + , html = $(this).clone().removeAttr('data-codeblock')[0].outerHTML + , codeblock = $('
')
+        , indentation = html.split("\n")
+        , whitespace = lastIndentationSize( indentation )
+        , newhtml = html;
+
+      if ( whitespace.length ) {
+        newhtml = reIndent( html, whitespace);
+      }
+
+      codeblock.find('code').append( escapeHTML(newhtml) );
+
+      if(target) {
+        $(target).append(codeblock);
+      } else {
+        $(this).after(codeblock);
+      }
+    });
+
+  };
+
+  // Self Execute!!
+  $.fn.dataCodeBlock();
+})(jQuery);
+
+
+
+$(document).ready(function(){
+  $('#toggleFlipper01').click(function(){
+    $('#toggleFlippee01').toggleClass('flipped');
+  });
+  $('#toggleFlipper02').click(function(){
+    $('#toggleFlippee02').toggleClass('flipped');
+  });
+  $('#toggleFlipper03').click(function(){
+    $('#toggleFlippee03').toggleClass('flipped');
+  });
+  $('#toggleFlipper04').click(function(){
+    $('#toggleFlippee04').toggleClass('flipped');
+  });
+  $('#toggleFlipper05').click(function(){
+    $('#toggleFlippee05').toggleClass('flipped-stagger');
+  });
+});
\ No newline at end of file
diff --git a/app/js/testing.js b/app/js/testing.js
new file mode 100644
index 0000000..eb63429
--- /dev/null
+++ b/app/js/testing.js
@@ -0,0 +1,23 @@
+/*jslint browser: true */
+/*global Modernizr */
+
+Modernizr.addTest('checked', function () {
+  return Modernizr.testStyles("#modernizr div {width:10px;} #modernizr input:checked ~ div {width: 20px;}", function (elem) {
+    var chx = document.createElement('input'),
+      div = document.createElement('div');
+
+    chx.setAttribute("type", "checkbox");
+    chx.setAttribute("checked", "checked");
+    elem.appendChild(chx);
+    elem.appendChild(div);
+
+    return elem.lastChild.offsetWidth > 10;
+  });
+});
+
+Modernizr.load([
+  {
+    test : Modernizr.mq('only all'),
+    nope : '/lib/respond.min.js'
+  }
+]);
\ No newline at end of file
diff --git a/app/lib/google.fastbutton.js b/app/lib/google.fastbutton.js
deleted file mode 100644
index 6cfc1bf..0000000
--- a/app/lib/google.fastbutton.js
+++ /dev/null
@@ -1,124 +0,0 @@
-(function() {
-  /** 
-   * From: http://code.this.com/mobile/articles/fast_buttons.html
-   * Also see: http://stackoverflow.com/questions/6300136/trying-to-implement-googles-fast-button 
-   */
-   
-  /** For IE8 and earlier compatibility: https://developer.mozilla.org/en/DOM/element.addEventListener */
-  function addListener(el, type, listener, useCapture) {
-    if (el.addEventListener) { 
-      el.addEventListener(type, listener, useCapture);
-      return { 
-        destroy: function() { el.removeEventListener(type, listener, useCapture); } 
-      };
-    } else {      
-      // see: http://stackoverflow.com/questions/5198845/javascript-this-losing-context-in-ie
-      var handler = function(e) { listener.handleEvent(window.event, listener); }
-      el.attachEvent('on' + type, handler);
-      
-      return { 
-        destroy: function() { el.detachEvent('on' + type, handler); }
-      };
-    }   
-  }
-  
-  var isTouch = "ontouchstart" in window;
-
-  /* Construct the FastButton with a reference to the element and click handler. */
-  this.FastButton = function(element, handler, useCapture) {
-    // collect functions to call to cleanup events 
-    this.events = [];
-    this.touchEvents = [];
-    this.element = element;
-    this.handler = handler;
-    this.useCapture = useCapture;
-    if (isTouch) 
-      this.events.push(addListener(element, 'touchstart', this, this.useCapture));    
-    this.events.push(addListener(element, 'click', this, this.useCapture));
-  };
-  
-  /* Remove event handling when no longer needed for this button */
-  this.FastButton.prototype.destroy = function() {
-    for (i = this.events.length - 1; i >= 0; i -= 1)
-      this.events[i].destroy();    
-    this.events = this.touchEvents = this.element = this.handler = this.fastButton = null;
-  };
-  
-  /* acts as an event dispatcher */
-  this.FastButton.prototype.handleEvent = function(event) {
-    switch (event.type) {
-      case 'touchstart': this.onTouchStart(event); break;
-      case 'touchmove': this.onTouchMove(event); break;
-      case 'touchend': this.onClick(event); break;
-      case 'click': this.onClick(event); break;
-    }
-  };
-  
-  /* Save a reference to the touchstart coordinate and start listening to touchmove and
-   touchend events. Calling stopPropagation guarantees that other behaviors don’t get a
-   chance to handle the same click event. This is executed at the beginning of touch. */
-  this.FastButton.prototype.onTouchStart = function(event) {
-    event.stopPropagation ? event.stopPropagation() : (event.cancelBubble=true);
-    this.touchEvents.push(addListener(this.element, 'touchend', this, this.useCapture));
-    this.touchEvents.push(addListener(document.body, 'touchmove', this, this.useCapture));
-    this.startX = event.touches[0].clientX;
-    this.startY = event.touches[0].clientY;
-  };
-  
-  /* When /if touchmove event is invoked, check if the user has dragged past the threshold of 10px. */
-  this.FastButton.prototype.onTouchMove = function(event) {
-    if (Math.abs(event.touches[0].clientX - this.startX) > 10 || Math.abs(event.touches[0].clientY - this.startY) > 10) {
-      this.reset(); //if he did, then cancel the touch event
-    }
-  };
-  
-  /* Invoke the actual click handler and prevent ghost clicks if this was a touchend event. */
-  this.FastButton.prototype.onClick = function(event) {
-    event.stopPropagation ? event.stopPropagation() : (event.cancelBubble=true);
-    this.reset();
-    // Use .call to call the method so that we have the correct "this": https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Function/call
-    var result = this.handler.call(this.element, event);
-    if (event.type == 'touchend') 
-      clickbuster.preventGhostClick(this.startX, this.startY);    
-    return result;
-  };
-  
-  this.FastButton.prototype.reset = function() {
-    for (i = this.touchEvents.length - 1; i >= 0; i -= 1) 
-      this.touchEvents[i].destroy();    
-    this.touchEvents = [];
-  };
-  
-  this.clickbuster = function() {}
-  
-  /* Call preventGhostClick to bust all click events that happen within 25px of
-   the provided x, y coordinates in the next 2.5s. */
-  this.clickbuster.preventGhostClick = function(x, y) {
-    clickbuster.coordinates.push(x, y);
-    window.setTimeout(clickbuster.pop, 2500);
-  };
-  
-  this.clickbuster.pop = function() {
-    clickbuster.coordinates.splice(0, 2);
-  };
-  
-  /* If we catch a click event inside the given radius and time threshold then we call
-   stopPropagation and preventDefault. Calling preventDefault will stop links
-   from being activated. */
-  this.clickbuster.onClick = function(event) {
-    for (var i = 0; i < clickbuster.coordinates.length; i += 2) {
-      var x = clickbuster.coordinates[i];
-      var y = clickbuster.coordinates[i + 1];
-      if (Math.abs(event.clientX - x) < 25 && Math.abs(event.clientY - y) < 25) {
-        event.stopPropagation ? event.stopPropagation() : (event.cancelBubble=true);
-        event.preventDefault ? event.preventDefault() : (event.returnValue=false);
-      }
-    }
-  };
-    
-  if (isTouch) {
-    // Don't need to use our custom addListener function since we only bust clicks on touch devices
-    document.addEventListener('click', clickbuster.onClick, true);
-    clickbuster.coordinates = [];
-  }
-})(this);
diff --git a/app/lib/jquery-1.8.2.min.js b/app/lib/jquery-1.8.2.min.js
new file mode 100644
index 0000000..f65cf1d
--- /dev/null
+++ b/app/lib/jquery-1.8.2.min.js
@@ -0,0 +1,2 @@
+/*! jQuery v1.8.2 jquery.com | jquery.org/license */
+(function(a,b){function G(a){var b=F[a]={};return p.each(a.split(s),function(a,c){b[c]=!0}),b}function J(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(I,"-$1").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:+d+""===d?+d:H.test(d)?p.parseJSON(d):d}catch(f){}p.data(a,c,d)}else d=b}return d}function K(a){var b;for(b in a){if(b==="data"&&p.isEmptyObject(a[b]))continue;if(b!=="toJSON")return!1}return!0}function ba(){return!1}function bb(){return!0}function bh(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function bi(a,b){do a=a[b];while(a&&a.nodeType!==1);return a}function bj(a,b,c){b=b||0;if(p.isFunction(b))return p.grep(a,function(a,d){var e=!!b.call(a,d,a);return e===c});if(b.nodeType)return p.grep(a,function(a,d){return a===b===c});if(typeof b=="string"){var d=p.grep(a,function(a){return a.nodeType===1});if(be.test(b))return p.filter(b,d,!c);b=p.filter(b,d)}return p.grep(a,function(a,d){return p.inArray(a,b)>=0===c})}function bk(a){var b=bl.split("|"),c=a.createDocumentFragment();if(c.createElement)while(b.length)c.createElement(b.pop());return c}function bC(a,b){return a.getElementsByTagName(b)[0]||a.appendChild(a.ownerDocument.createElement(b))}function bD(a,b){if(b.nodeType!==1||!p.hasData(a))return;var c,d,e,f=p._data(a),g=p._data(b,f),h=f.events;if(h){delete g.handle,g.events={};for(c in h)for(d=0,e=h[c].length;d").appendTo(e.body),c=b.css("display");b.remove();if(c==="none"||c===""){bI=e.body.appendChild(bI||p.extend(e.createElement("iframe"),{frameBorder:0,width:0,height:0}));if(!bJ||!bI.createElement)bJ=(bI.contentWindow||bI.contentDocument).document,bJ.write(""),bJ.close();b=bJ.body.appendChild(bJ.createElement(a)),c=bH(b,"display"),e.body.removeChild(bI)}return bS[a]=c,c}function ci(a,b,c,d){var e;if(p.isArray(b))p.each(b,function(b,e){c||ce.test(a)?d(a,e):ci(a+"["+(typeof e=="object"?b:"")+"]",e,c,d)});else if(!c&&p.type(b)==="object")for(e in b)ci(a+"["+e+"]",b[e],c,d);else d(a,b)}function cz(a){return function(b,c){typeof b!="string"&&(c=b,b="*");var d,e,f,g=b.toLowerCase().split(s),h=0,i=g.length;if(p.isFunction(c))for(;h)[^>]*$|#([\w\-]*)$)/,v=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,w=/^[\],:{}\s]*$/,x=/(?:^|:|,)(?:\s*\[)+/g,y=/\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g,z=/"[^"\\\r\n]*"|true|false|null|-?(?:\d\d*\.|)\d+(?:[eE][\-+]?\d+|)/g,A=/^-ms-/,B=/-([\da-z])/gi,C=function(a,b){return(b+"").toUpperCase()},D=function(){e.addEventListener?(e.removeEventListener("DOMContentLoaded",D,!1),p.ready()):e.readyState==="complete"&&(e.detachEvent("onreadystatechange",D),p.ready())},E={};p.fn=p.prototype={constructor:p,init:function(a,c,d){var f,g,h,i;if(!a)return this;if(a.nodeType)return this.context=this[0]=a,this.length=1,this;if(typeof a=="string"){a.charAt(0)==="<"&&a.charAt(a.length-1)===">"&&a.length>=3?f=[null,a,null]:f=u.exec(a);if(f&&(f[1]||!c)){if(f[1])return c=c instanceof p?c[0]:c,i=c&&c.nodeType?c.ownerDocument||c:e,a=p.parseHTML(f[1],i,!0),v.test(f[1])&&p.isPlainObject(c)&&this.attr.call(a,c,!0),p.merge(this,a);g=e.getElementById(f[2]);if(g&&g.parentNode){if(g.id!==f[2])return d.find(a);this.length=1,this[0]=g}return this.context=e,this.selector=a,this}return!c||c.jquery?(c||d).find(a):this.constructor(c).find(a)}return p.isFunction(a)?d.ready(a):(a.selector!==b&&(this.selector=a.selector,this.context=a.context),p.makeArray(a,this))},selector:"",jquery:"1.8.2",length:0,size:function(){return this.length},toArray:function(){return k.call(this)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=p.merge(this.constructor(),a);return d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")"),d},each:function(a,b){return p.each(this,a,b)},ready:function(a){return p.ready.promise().done(a),this},eq:function(a){return a=+a,a===-1?this.slice(a):this.slice(a,a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(k.apply(this,arguments),"slice",k.call(arguments).join(","))},map:function(a){return this.pushStack(p.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:j,sort:[].sort,splice:[].splice},p.fn.init.prototype=p.fn,p.extend=p.fn.extend=function(){var a,c,d,e,f,g,h=arguments[0]||{},i=1,j=arguments.length,k=!1;typeof h=="boolean"&&(k=h,h=arguments[1]||{},i=2),typeof h!="object"&&!p.isFunction(h)&&(h={}),j===i&&(h=this,--i);for(;i0)return;d.resolveWith(e,[p]),p.fn.trigger&&p(e).trigger("ready").off("ready")},isFunction:function(a){return p.type(a)==="function"},isArray:Array.isArray||function(a){return p.type(a)==="array"},isWindow:function(a){return a!=null&&a==a.window},isNumeric:function(a){return!isNaN(parseFloat(a))&&isFinite(a)},type:function(a){return a==null?String(a):E[m.call(a)]||"object"},isPlainObject:function(a){if(!a||p.type(a)!=="object"||a.nodeType||p.isWindow(a))return!1;try{if(a.constructor&&!n.call(a,"constructor")&&!n.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}var d;for(d in a);return d===b||n.call(a,d)},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},error:function(a){throw new Error(a)},parseHTML:function(a,b,c){var d;return!a||typeof a!="string"?null:(typeof b=="boolean"&&(c=b,b=0),b=b||e,(d=v.exec(a))?[b.createElement(d[1])]:(d=p.buildFragment([a],b,c?null:[]),p.merge([],(d.cacheable?p.clone(d.fragment):d.fragment).childNodes)))},parseJSON:function(b){if(!b||typeof b!="string")return null;b=p.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(w.test(b.replace(y,"@").replace(z,"]").replace(x,"")))return(new Function("return "+b))();p.error("Invalid JSON: "+b)},parseXML:function(c){var d,e;if(!c||typeof c!="string")return null;try{a.DOMParser?(e=new DOMParser,d=e.parseFromString(c,"text/xml")):(d=new ActiveXObject("Microsoft.XMLDOM"),d.async="false",d.loadXML(c))}catch(f){d=b}return(!d||!d.documentElement||d.getElementsByTagName("parsererror").length)&&p.error("Invalid XML: "+c),d},noop:function(){},globalEval:function(b){b&&r.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(A,"ms-").replace(B,C)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,c,d){var e,f=0,g=a.length,h=g===b||p.isFunction(a);if(d){if(h){for(e in a)if(c.apply(a[e],d)===!1)break}else for(;f0&&a[0]&&a[i-1]||i===0||p.isArray(a));if(j)for(;h-1)i.splice(c,1),e&&(c<=g&&g--,c<=h&&h--)}),this},has:function(a){return p.inArray(a,i)>-1},empty:function(){return i=[],this},disable:function(){return i=j=c=b,this},disabled:function(){return!i},lock:function(){return j=b,c||l.disable(),this},locked:function(){return!j},fireWith:function(a,b){return b=b||[],b=[a,b.slice?b.slice():b],i&&(!d||j)&&(e?j.push(b):k(b)),this},fire:function(){return l.fireWith(this,arguments),this},fired:function(){return!!d}};return l},p.extend({Deferred:function(a){var b=[["resolve","done",p.Callbacks("once memory"),"resolved"],["reject","fail",p.Callbacks("once memory"),"rejected"],["notify","progress",p.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return p.Deferred(function(c){p.each(b,function(b,d){var f=d[0],g=a[b];e[d[1]](p.isFunction(g)?function(){var a=g.apply(this,arguments);a&&p.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f+"With"](this===e?c:this,[a])}:c[f])}),a=null}).promise()},promise:function(a){return a!=null?p.extend(a,d):d}},e={};return d.pipe=d.then,p.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[a^1][2].disable,b[2][2].lock),e[f[0]]=g.fire,e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=k.call(arguments),d=c.length,e=d!==1||a&&p.isFunction(a.promise)?d:0,f=e===1?a:p.Deferred(),g=function(a,b,c){return function(d){b[a]=this,c[a]=arguments.length>1?k.call(arguments):d,c===h?f.notifyWith(b,c):--e||f.resolveWith(b,c)}},h,i,j;if(d>1){h=new Array(d),i=new Array(d),j=new Array(d);for(;b
a",c=n.getElementsByTagName("*"),d=n.getElementsByTagName("a")[0],d.style.cssText="top:1px;float:left;opacity:.5";if(!c||!c.length)return{};f=e.createElement("select"),g=f.appendChild(e.createElement("option")),h=n.getElementsByTagName("input")[0],b={leadingWhitespace:n.firstChild.nodeType===3,tbody:!n.getElementsByTagName("tbody").length,htmlSerialize:!!n.getElementsByTagName("link").length,style:/top/.test(d.getAttribute("style")),hrefNormalized:d.getAttribute("href")==="/a",opacity:/^0.5/.test(d.style.opacity),cssFloat:!!d.style.cssFloat,checkOn:h.value==="on",optSelected:g.selected,getSetAttribute:n.className!=="t",enctype:!!e.createElement("form").enctype,html5Clone:e.createElement("nav").cloneNode(!0).outerHTML!=="<:nav>",boxModel:e.compatMode==="CSS1Compat",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0,boxSizingReliable:!0,pixelPosition:!1},h.checked=!0,b.noCloneChecked=h.cloneNode(!0).checked,f.disabled=!0,b.optDisabled=!g.disabled;try{delete n.test}catch(o){b.deleteExpando=!1}!n.addEventListener&&n.attachEvent&&n.fireEvent&&(n.attachEvent("onclick",m=function(){b.noCloneEvent=!1}),n.cloneNode(!0).fireEvent("onclick"),n.detachEvent("onclick",m)),h=e.createElement("input"),h.value="t",h.setAttribute("type","radio"),b.radioValue=h.value==="t",h.setAttribute("checked","checked"),h.setAttribute("name","t"),n.appendChild(h),i=e.createDocumentFragment(),i.appendChild(n.lastChild),b.checkClone=i.cloneNode(!0).cloneNode(!0).lastChild.checked,b.appendChecked=h.checked,i.removeChild(h),i.appendChild(n);if(n.attachEvent)for(k in{submit:!0,change:!0,focusin:!0})j="on"+k,l=j in n,l||(n.setAttribute(j,"return;"),l=typeof n[j]=="function"),b[k+"Bubbles"]=l;return p(function(){var c,d,f,g,h="padding:0;margin:0;border:0;display:block;overflow:hidden;",i=e.getElementsByTagName("body")[0];if(!i)return;c=e.createElement("div"),c.style.cssText="visibility:hidden;border:0;width:0;height:0;position:static;top:0;margin-top:1px",i.insertBefore(c,i.firstChild),d=e.createElement("div"),c.appendChild(d),d.innerHTML="
t
",f=d.getElementsByTagName("td"),f[0].style.cssText="padding:0;margin:0;border:0;display:none",l=f[0].offsetHeight===0,f[0].style.display="",f[1].style.display="none",b.reliableHiddenOffsets=l&&f[0].offsetHeight===0,d.innerHTML="",d.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%;",b.boxSizing=d.offsetWidth===4,b.doesNotIncludeMarginInBodyOffset=i.offsetTop!==1,a.getComputedStyle&&(b.pixelPosition=(a.getComputedStyle(d,null)||{}).top!=="1%",b.boxSizingReliable=(a.getComputedStyle(d,null)||{width:"4px"}).width==="4px",g=e.createElement("div"),g.style.cssText=d.style.cssText=h,g.style.marginRight=g.style.width="0",d.style.width="1px",d.appendChild(g),b.reliableMarginRight=!parseFloat((a.getComputedStyle(g,null)||{}).marginRight)),typeof d.style.zoom!="undefined"&&(d.innerHTML="",d.style.cssText=h+"width:1px;padding:1px;display:inline;zoom:1",b.inlineBlockNeedsLayout=d.offsetWidth===3,d.style.display="block",d.style.overflow="visible",d.innerHTML="
",d.firstChild.style.width="5px",b.shrinkWrapBlocks=d.offsetWidth!==3,c.style.zoom=1),i.removeChild(c),c=d=f=g=null}),i.removeChild(n),c=d=f=g=h=i=n=null,b}();var H=/(?:\{[\s\S]*\}|\[[\s\S]*\])$/,I=/([A-Z])/g;p.extend({cache:{},deletedIds:[],uuid:0,expando:"jQuery"+(p.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){return a=a.nodeType?p.cache[a[p.expando]]:a[p.expando],!!a&&!K(a)},data:function(a,c,d,e){if(!p.acceptData(a))return;var f,g,h=p.expando,i=typeof c=="string",j=a.nodeType,k=j?p.cache:a,l=j?a[h]:a[h]&&h;if((!l||!k[l]||!e&&!k[l].data)&&i&&d===b)return;l||(j?a[h]=l=p.deletedIds.pop()||p.guid++:l=h),k[l]||(k[l]={},j||(k[l].toJSON=p.noop));if(typeof c=="object"||typeof c=="function")e?k[l]=p.extend(k[l],c):k[l].data=p.extend(k[l].data,c);return f=k[l],e||(f.data||(f.data={}),f=f.data),d!==b&&(f[p.camelCase(c)]=d),i?(g=f[c],g==null&&(g=f[p.camelCase(c)])):g=f,g},removeData:function(a,b,c){if(!p.acceptData(a))return;var d,e,f,g=a.nodeType,h=g?p.cache:a,i=g?a[p.expando]:p.expando;if(!h[i])return;if(b){d=c?h[i]:h[i].data;if(d){p.isArray(b)||(b in d?b=[b]:(b=p.camelCase(b),b in d?b=[b]:b=b.split(" ")));for(e=0,f=b.length;e1,null,!1))},removeData:function(a){return this.each(function(){p.removeData(this,a)})}}),p.extend({queue:function(a,b,c){var d;if(a)return b=(b||"fx")+"queue",d=p._data(a,b),c&&(!d||p.isArray(c)?d=p._data(a,b,p.makeArray(c)):d.push(c)),d||[]},dequeue:function(a,b){b=b||"fx";var c=p.queue(a,b),d=c.length,e=c.shift(),f=p._queueHooks(a,b),g=function(){p.dequeue(a,b)};e==="inprogress"&&(e=c.shift(),d--),e&&(b==="fx"&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return p._data(a,c)||p._data(a,c,{empty:p.Callbacks("once memory").add(function(){p.removeData(a,b+"queue",!0),p.removeData(a,c,!0)})})}}),p.fn.extend({queue:function(a,c){var d=2;return typeof a!="string"&&(c=a,a="fx",d--),arguments.length1)},removeAttr:function(a){return this.each(function(){p.removeAttr(this,a)})},prop:function(a,b){return p.access(this,p.prop,a,b,arguments.length>1)},removeProp:function(a){return a=p.propFix[a]||a,this.each(function(){try{this[a]=b,delete this[a]}catch(c){}})},addClass:function(a){var b,c,d,e,f,g,h;if(p.isFunction(a))return this.each(function(b){p(this).addClass(a.call(this,b,this.className))});if(a&&typeof a=="string"){b=a.split(s);for(c=0,d=this.length;c=0)d=d.replace(" "+c[f]+" "," ");e.className=a?p.trim(d):""}}}return this},toggleClass:function(a,b){var c=typeof a,d=typeof b=="boolean";return p.isFunction(a)?this.each(function(c){p(this).toggleClass(a.call(this,c,this.className,b),b)}):this.each(function(){if(c==="string"){var e,f=0,g=p(this),h=b,i=a.split(s);while(e=i[f++])h=d?h:!g.hasClass(e),g[h?"addClass":"removeClass"](e)}else if(c==="undefined"||c==="boolean")this.className&&p._data(this,"__className__",this.className),this.className=this.className||a===!1?"":p._data(this,"__className__")||""})},hasClass:function(a){var b=" "+a+" ",c=0,d=this.length;for(;c=0)return!0;return!1},val:function(a){var c,d,e,f=this[0];if(!arguments.length){if(f)return c=p.valHooks[f.type]||p.valHooks[f.nodeName.toLowerCase()],c&&"get"in c&&(d=c.get(f,"value"))!==b?d:(d=f.value,typeof d=="string"?d.replace(P,""):d==null?"":d);return}return e=p.isFunction(a),this.each(function(d){var f,g=p(this);if(this.nodeType!==1)return;e?f=a.call(this,d,g.val()):f=a,f==null?f="":typeof f=="number"?f+="":p.isArray(f)&&(f=p.map(f,function(a){return a==null?"":a+""})),c=p.valHooks[this.type]||p.valHooks[this.nodeName.toLowerCase()];if(!c||!("set"in c)||c.set(this,f,"value")===b)this.value=f})}}),p.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c,d,e,f=a.selectedIndex,g=[],h=a.options,i=a.type==="select-one";if(f<0)return null;c=i?f:0,d=i?f+1:h.length;for(;c=0}),c.length||(a.selectedIndex=-1),c}}},attrFn:{},attr:function(a,c,d,e){var f,g,h,i=a.nodeType;if(!a||i===3||i===8||i===2)return;if(e&&p.isFunction(p.fn[c]))return p(a)[c](d);if(typeof a.getAttribute=="undefined")return p.prop(a,c,d);h=i!==1||!p.isXMLDoc(a),h&&(c=c.toLowerCase(),g=p.attrHooks[c]||(T.test(c)?M:L));if(d!==b){if(d===null){p.removeAttr(a,c);return}return g&&"set"in g&&h&&(f=g.set(a,d,c))!==b?f:(a.setAttribute(c,d+""),d)}return g&&"get"in g&&h&&(f=g.get(a,c))!==null?f:(f=a.getAttribute(c),f===null?b:f)},removeAttr:function(a,b){var c,d,e,f,g=0;if(b&&a.nodeType===1){d=b.split(s);for(;g=0}})});var V=/^(?:textarea|input|select)$/i,W=/^([^\.]*|)(?:\.(.+)|)$/,X=/(?:^|\s)hover(\.\S+|)\b/,Y=/^key/,Z=/^(?:mouse|contextmenu)|click/,$=/^(?:focusinfocus|focusoutblur)$/,_=function(a){return p.event.special.hover?a:a.replace(X,"mouseenter$1 mouseleave$1")};p.event={add:function(a,c,d,e,f){var g,h,i,j,k,l,m,n,o,q,r;if(a.nodeType===3||a.nodeType===8||!c||!d||!(g=p._data(a)))return;d.handler&&(o=d,d=o.handler,f=o.selector),d.guid||(d.guid=p.guid++),i=g.events,i||(g.events=i={}),h=g.handle,h||(g.handle=h=function(a){return typeof p!="undefined"&&(!a||p.event.triggered!==a.type)?p.event.dispatch.apply(h.elem,arguments):b},h.elem=a),c=p.trim(_(c)).split(" ");for(j=0;j=0&&(s=s.slice(0,-1),i=!0),s.indexOf(".")>=0&&(t=s.split("."),s=t.shift(),t.sort());if((!f||p.event.customEvent[s])&&!p.event.global[s])return;c=typeof c=="object"?c[p.expando]?c:new p.Event(s,c):new p.Event(s),c.type=s,c.isTrigger=!0,c.exclusive=i,c.namespace=t.join("."),c.namespace_re=c.namespace?new RegExp("(^|\\.)"+t.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,m=s.indexOf(":")<0?"on"+s:"";if(!f){h=p.cache;for(j in h)h[j].events&&h[j].events[s]&&p.event.trigger(c,d,h[j].handle.elem,!0);return}c.result=b,c.target||(c.target=f),d=d!=null?p.makeArray(d):[],d.unshift(c),n=p.event.special[s]||{};if(n.trigger&&n.trigger.apply(f,d)===!1)return;q=[[f,n.bindType||s]];if(!g&&!n.noBubble&&!p.isWindow(f)){r=n.delegateType||s,k=$.test(r+s)?f:f.parentNode;for(l=f;k;k=k.parentNode)q.push([k,r]),l=k;l===(f.ownerDocument||e)&&q.push([l.defaultView||l.parentWindow||a,r])}for(j=0;j=0:p.find(m,this,null,[f]).length),h[m]&&j.push(l);j.length&&u.push({elem:f,matches:j})}o.length>q&&u.push({elem:this,matches:o.slice(q)});for(d=0;d0?this.on(b,null,a,c):this.trigger(b)},Y.test(b)&&(p.event.fixHooks[b]=p.event.keyHooks),Z.test(b)&&(p.event.fixHooks[b]=p.event.mouseHooks)}),function(a,b){function bc(a,b,c,d){c=c||[],b=b||r;var e,f,i,j,k=b.nodeType;if(!a||typeof a!="string")return c;if(k!==1&&k!==9)return[];i=g(b);if(!i&&!d)if(e=P.exec(a))if(j=e[1]){if(k===9){f=b.getElementById(j);if(!f||!f.parentNode)return c;if(f.id===j)return c.push(f),c}else if(b.ownerDocument&&(f=b.ownerDocument.getElementById(j))&&h(b,f)&&f.id===j)return c.push(f),c}else{if(e[2])return w.apply(c,x.call(b.getElementsByTagName(a),0)),c;if((j=e[3])&&_&&b.getElementsByClassName)return w.apply(c,x.call(b.getElementsByClassName(j),0)),c}return bp(a.replace(L,"$1"),b,c,d,i)}function bd(a){return function(b){var c=b.nodeName.toLowerCase();return c==="input"&&b.type===a}}function be(a){return function(b){var c=b.nodeName.toLowerCase();return(c==="input"||c==="button")&&b.type===a}}function bf(a){return z(function(b){return b=+b,z(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function bg(a,b,c){if(a===b)return c;var d=a.nextSibling;while(d){if(d===b)return-1;d=d.nextSibling}return 1}function bh(a,b){var c,d,f,g,h,i,j,k=C[o][a];if(k)return b?0:k.slice(0);h=a,i=[],j=e.preFilter;while(h){if(!c||(d=M.exec(h)))d&&(h=h.slice(d[0].length)),i.push(f=[]);c=!1;if(d=N.exec(h))f.push(c=new q(d.shift())),h=h.slice(c.length),c.type=d[0].replace(L," ");for(g in e.filter)(d=W[g].exec(h))&&(!j[g]||(d=j[g](d,r,!0)))&&(f.push(c=new q(d.shift())),h=h.slice(c.length),c.type=g,c.matches=d);if(!c)break}return b?h.length:h?bc.error(a):C(a,i).slice(0)}function bi(a,b,d){var e=b.dir,f=d&&b.dir==="parentNode",g=u++;return b.first?function(b,c,d){while(b=b[e])if(f||b.nodeType===1)return a(b,c,d)}:function(b,d,h){if(!h){var i,j=t+" "+g+" ",k=j+c;while(b=b[e])if(f||b.nodeType===1){if((i=b[o])===k)return b.sizset;if(typeof i=="string"&&i.indexOf(j)===0){if(b.sizset)return b}else{b[o]=k;if(a(b,d,h))return b.sizset=!0,b;b.sizset=!1}}}else while(b=b[e])if(f||b.nodeType===1)if(a(b,d,h))return b}}function bj(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function bk(a,b,c,d,e){var f,g=[],h=0,i=a.length,j=b!=null;for(;h-1},h,!0),m=[function(a,c,d){return!g&&(d||c!==l)||((b=c).nodeType?j(a,c,d):k(a,c,d))}];for(;i1&&bj(m),i>1&&a.slice(0,i-1).join("").replace(L,"$1"),c,i0,f=a.length>0,g=function(h,i,j,k,m){var n,o,p,q=[],s=0,u="0",x=h&&[],y=m!=null,z=l,A=h||f&&e.find.TAG("*",m&&i.parentNode||i),B=t+=z==null?1:Math.E;y&&(l=i!==r&&i,c=g.el);for(;(n=A[u])!=null;u++){if(f&&n){for(o=0;p=a[o];o++)if(p(n,i,j)){k.push(n);break}y&&(t=B,c=++g.el)}d&&((n=!p&&n)&&s--,h&&x.push(n))}s+=u;if(d&&u!==s){for(o=0;p=b[o];o++)p(x,q,i,j);if(h){if(s>0)while(u--)!x[u]&&!q[u]&&(q[u]=v.call(k));q=bk(q)}w.apply(k,q),y&&!h&&q.length>0&&s+b.length>1&&bc.uniqueSort(k)}return y&&(t=B,l=z),x};return g.el=0,d?z(g):g}function bo(a,b,c,d){var e=0,f=b.length;for(;e2&&(j=h[0]).type==="ID"&&b.nodeType===9&&!f&&e.relative[h[1].type]){b=e.find.ID(j.matches[0].replace(V,""),b,f)[0];if(!b)return c;a=a.slice(h.shift().length)}for(g=W.POS.test(a)?-1:h.length-1;g>=0;g--){j=h[g];if(e.relative[k=j.type])break;if(l=e.find[k])if(d=l(j.matches[0].replace(V,""),R.test(h[0].type)&&b.parentNode||b,f)){h.splice(g,1),a=d.length&&h.join("");if(!a)return w.apply(c,x.call(d,0)),c;break}}}return i(a,m)(d,b,f,c,R.test(a)),c}function bq(){}var c,d,e,f,g,h,i,j,k,l,m=!0,n="undefined",o=("sizcache"+Math.random()).replace(".",""),q=String,r=a.document,s=r.documentElement,t=0,u=0,v=[].pop,w=[].push,x=[].slice,y=[].indexOf||function(a){var b=0,c=this.length;for(;be.cacheLength&&delete a[b.shift()],a[c]=d},a)},B=A(),C=A(),D=A(),E="[\\x20\\t\\r\\n\\f]",F="(?:\\\\.|[-\\w]|[^\\x00-\\xa0])+",G=F.replace("w","w#"),H="([*^$|!~]?=)",I="\\["+E+"*("+F+")"+E+"*(?:"+H+E+"*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|("+G+")|)|)"+E+"*\\]",J=":("+F+")(?:\\((?:(['\"])((?:\\\\.|[^\\\\])*?)\\2|([^()[\\]]*|(?:(?:"+I+")|[^:]|\\\\.)*|.*))\\)|)",K=":(even|odd|eq|gt|lt|nth|first|last)(?:\\("+E+"*((?:-\\d)?\\d*)"+E+"*\\)|)(?=[^-]|$)",L=new RegExp("^"+E+"+|((?:^|[^\\\\])(?:\\\\.)*)"+E+"+$","g"),M=new RegExp("^"+E+"*,"+E+"*"),N=new RegExp("^"+E+"*([\\x20\\t\\r\\n\\f>+~])"+E+"*"),O=new RegExp(J),P=/^(?:#([\w\-]+)|(\w+)|\.([\w\-]+))$/,Q=/^:not/,R=/[\x20\t\r\n\f]*[+~]/,S=/:not\($/,T=/h\d/i,U=/input|select|textarea|button/i,V=/\\(?!\\)/g,W={ID:new RegExp("^#("+F+")"),CLASS:new RegExp("^\\.("+F+")"),NAME:new RegExp("^\\[name=['\"]?("+F+")['\"]?\\]"),TAG:new RegExp("^("+F.replace("w","w*")+")"),ATTR:new RegExp("^"+I),PSEUDO:new RegExp("^"+J),POS:new RegExp(K,"i"),CHILD:new RegExp("^:(only|nth|first|last)-child(?:\\("+E+"*(even|odd|(([+-]|)(\\d*)n|)"+E+"*(?:([+-]|)"+E+"*(\\d+)|))"+E+"*\\)|)","i"),needsContext:new RegExp("^"+E+"*[>+~]|"+K,"i")},X=function(a){var b=r.createElement("div");try{return a(b)}catch(c){return!1}finally{b=null}},Y=X(function(a){return a.appendChild(r.createComment("")),!a.getElementsByTagName("*").length}),Z=X(function(a){return a.innerHTML="",a.firstChild&&typeof a.firstChild.getAttribute!==n&&a.firstChild.getAttribute("href")==="#"}),$=X(function(a){a.innerHTML="";var b=typeof a.lastChild.getAttribute("multiple");return b!=="boolean"&&b!=="string"}),_=X(function(a){return a.innerHTML="",!a.getElementsByClassName||!a.getElementsByClassName("e").length?!1:(a.lastChild.className="e",a.getElementsByClassName("e").length===2)}),ba=X(function(a){a.id=o+0,a.innerHTML="
",s.insertBefore(a,s.firstChild);var b=r.getElementsByName&&r.getElementsByName(o).length===2+r.getElementsByName(o+0).length;return d=!r.getElementById(o),s.removeChild(a),b});try{x.call(s.childNodes,0)[0].nodeType}catch(bb){x=function(a){var b,c=[];for(;b=this[a];a++)c.push(b);return c}}bc.matches=function(a,b){return bc(a,null,null,b)},bc.matchesSelector=function(a,b){return bc(b,null,null,[a]).length>0},f=bc.getText=function(a){var b,c="",d=0,e=a.nodeType;if(e){if(e===1||e===9||e===11){if(typeof a.textContent=="string")return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=f(a)}else if(e===3||e===4)return a.nodeValue}else for(;b=a[d];d++)c+=f(b);return c},g=bc.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?b.nodeName!=="HTML":!1},h=bc.contains=s.contains?function(a,b){var c=a.nodeType===9?a.documentElement:a,d=b&&b.parentNode;return a===d||!!(d&&d.nodeType===1&&c.contains&&c.contains(d))}:s.compareDocumentPosition?function(a,b){return b&&!!(a.compareDocumentPosition(b)&16)}:function(a,b){while(b=b.parentNode)if(b===a)return!0;return!1},bc.attr=function(a,b){var c,d=g(a);return d||(b=b.toLowerCase()),(c=e.attrHandle[b])?c(a):d||$?a.getAttribute(b):(c=a.getAttributeNode(b),c?typeof a[b]=="boolean"?a[b]?b:null:c.specified?c.value:null:null)},e=bc.selectors={cacheLength:50,createPseudo:z,match:W,attrHandle:Z?{}:{href:function(a){return a.getAttribute("href",2)},type:function(a){return a.getAttribute("type")}},find:{ID:d?function(a,b,c){if(typeof b.getElementById!==n&&!c){var d=b.getElementById(a);return d&&d.parentNode?[d]:[]}}:function(a,c,d){if(typeof c.getElementById!==n&&!d){var e=c.getElementById(a);return e?e.id===a||typeof e.getAttributeNode!==n&&e.getAttributeNode("id").value===a?[e]:b:[]}},TAG:Y?function(a,b){if(typeof b.getElementsByTagName!==n)return b.getElementsByTagName(a)}:function(a,b){var c=b.getElementsByTagName(a);if(a==="*"){var d,e=[],f=0;for(;d=c[f];f++)d.nodeType===1&&e.push(d);return e}return c},NAME:ba&&function(a,b){if(typeof b.getElementsByName!==n)return b.getElementsByName(name)},CLASS:_&&function(a,b,c){if(typeof b.getElementsByClassName!==n&&!c)return b.getElementsByClassName(a)}},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(V,""),a[3]=(a[4]||a[5]||"").replace(V,""),a[2]==="~="&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),a[1]==="nth"?(a[2]||bc.error(a[0]),a[3]=+(a[3]?a[4]+(a[5]||1):2*(a[2]==="even"||a[2]==="odd")),a[4]=+(a[6]+a[7]||a[2]==="odd")):a[2]&&bc.error(a[0]),a},PSEUDO:function(a){var b,c;if(W.CHILD.test(a[0]))return null;if(a[3])a[2]=a[3];else if(b=a[4])O.test(b)&&(c=bh(b,!0))&&(c=b.indexOf(")",b.length-c)-b.length)&&(b=b.slice(0,c),a[0]=a[0].slice(0,c)),a[2]=b;return a.slice(0,3)}},filter:{ID:d?function(a){return a=a.replace(V,""),function(b){return b.getAttribute("id")===a}}:function(a){return a=a.replace(V,""),function(b){var c=typeof b.getAttributeNode!==n&&b.getAttributeNode("id");return c&&c.value===a}},TAG:function(a){return a==="*"?function(){return!0}:(a=a.replace(V,"").toLowerCase(),function(b){return b.nodeName&&b.nodeName.toLowerCase()===a})},CLASS:function(a){var b=B[o][a];return b||(b=B(a,new RegExp("(^|"+E+")"+a+"("+E+"|$)"))),function(a){return b.test(a.className||typeof a.getAttribute!==n&&a.getAttribute("class")||"")}},ATTR:function(a,b,c){return function(d,e){var f=bc.attr(d,a);return f==null?b==="!=":b?(f+="",b==="="?f===c:b==="!="?f!==c:b==="^="?c&&f.indexOf(c)===0:b==="*="?c&&f.indexOf(c)>-1:b==="$="?c&&f.substr(f.length-c.length)===c:b==="~="?(" "+f+" ").indexOf(c)>-1:b==="|="?f===c||f.substr(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d){return a==="nth"?function(a){var b,e,f=a.parentNode;if(c===1&&d===0)return!0;if(f){e=0;for(b=f.firstChild;b;b=b.nextSibling)if(b.nodeType===1){e++;if(a===b)break}}return e-=d,e===c||e%c===0&&e/c>=0}:function(b){var c=b;switch(a){case"only":case"first":while(c=c.previousSibling)if(c.nodeType===1)return!1;if(a==="first")return!0;c=b;case"last":while(c=c.nextSibling)if(c.nodeType===1)return!1;return!0}}},PSEUDO:function(a,b){var c,d=e.pseudos[a]||e.setFilters[a.toLowerCase()]||bc.error("unsupported pseudo: "+a);return d[o]?d(b):d.length>1?(c=[a,a,"",b],e.setFilters.hasOwnProperty(a.toLowerCase())?z(function(a,c){var e,f=d(a,b),g=f.length;while(g--)e=y.call(a,f[g]),a[e]=!(c[e]=f[g])}):function(a){return d(a,0,c)}):d}},pseudos:{not:z(function(a){var b=[],c=[],d=i(a.replace(L,"$1"));return d[o]?z(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)if(f=g[h])a[h]=!(b[h]=f)}):function(a,e,f){return b[0]=a,d(b,null,f,c),!c.pop()}}),has:z(function(a){return function(b){return bc(a,b).length>0}}),contains:z(function(a){return function(b){return(b.textContent||b.innerText||f(b)).indexOf(a)>-1}}),enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&!!a.checked||b==="option"&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},parent:function(a){return!e.pseudos.empty(a)},empty:function(a){var b;a=a.firstChild;while(a){if(a.nodeName>"@"||(b=a.nodeType)===3||b===4)return!1;a=a.nextSibling}return!0},header:function(a){return T.test(a.nodeName)},text:function(a){var b,c;return a.nodeName.toLowerCase()==="input"&&(b=a.type)==="text"&&((c=a.getAttribute("type"))==null||c.toLowerCase()===b)},radio:bd("radio"),checkbox:bd("checkbox"),file:bd("file"),password:bd("password"),image:bd("image"),submit:be("submit"),reset:be("reset"),button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&a.type==="button"||b==="button"},input:function(a){return U.test(a.nodeName)},focus:function(a){var b=a.ownerDocument;return a===b.activeElement&&(!b.hasFocus||b.hasFocus())&&(!!a.type||!!a.href)},active:function(a){return a===a.ownerDocument.activeElement},first:bf(function(a,b,c){return[0]}),last:bf(function(a,b,c){return[b-1]}),eq:bf(function(a,b,c){return[c<0?c+b:c]}),even:bf(function(a,b,c){for(var d=0;d=0;)a.push(d);return a}),gt:bf(function(a,b,c){for(var d=c<0?c+b:c;++d",a.querySelectorAll("[selected]").length||e.push("\\["+E+"*(?:checked|disabled|ismap|multiple|readonly|selected|value)"),a.querySelectorAll(":checked").length||e.push(":checked")}),X(function(a){a.innerHTML="

",a.querySelectorAll("[test^='']").length&&e.push("[*^$]="+E+"*(?:\"\"|'')"),a.innerHTML="",a.querySelectorAll(":enabled").length||e.push(":enabled",":disabled")}),e=new RegExp(e.join("|")),bp=function(a,d,f,g,h){if(!g&&!h&&(!e||!e.test(a))){var i,j,k=!0,l=o,m=d,n=d.nodeType===9&&a;if(d.nodeType===1&&d.nodeName.toLowerCase()!=="object"){i=bh(a),(k=d.getAttribute("id"))?l=k.replace(c,"\\$&"):d.setAttribute("id",l),l="[id='"+l+"'] ",j=i.length;while(j--)i[j]=l+i[j].join("");m=R.test(a)&&d.parentNode||d,n=i.join(",")}if(n)try{return w.apply(f,x.call(m.querySelectorAll(n),0)),f}catch(p){}finally{k||d.removeAttribute("id")}}return b(a,d,f,g,h)},h&&(X(function(b){a=h.call(b,"div");try{h.call(b,"[test!='']:sizzle"),f.push("!=",J)}catch(c){}}),f=new RegExp(f.join("|")),bc.matchesSelector=function(b,c){c=c.replace(d,"='$1']");if(!g(b)&&!f.test(c)&&(!e||!e.test(c)))try{var i=h.call(b,c);if(i||a||b.document&&b.document.nodeType!==11)return i}catch(j){}return bc(c,null,null,[b]).length>0})}(),e.pseudos.nth=e.pseudos.eq,e.filters=bq.prototype=e.pseudos,e.setFilters=new bq,bc.attr=p.attr,p.find=bc,p.expr=bc.selectors,p.expr[":"]=p.expr.pseudos,p.unique=bc.uniqueSort,p.text=bc.getText,p.isXMLDoc=bc.isXML,p.contains=bc.contains}(a);var bc=/Until$/,bd=/^(?:parents|prev(?:Until|All))/,be=/^.[^:#\[\.,]*$/,bf=p.expr.match.needsContext,bg={children:!0,contents:!0,next:!0,prev:!0};p.fn.extend({find:function(a){var b,c,d,e,f,g,h=this;if(typeof a!="string")return p(a).filter(function(){for(b=0,c=h.length;b0)for(e=d;e=0:p.filter(a,this).length>0:this.filter(a).length>0)},closest:function(a,b){var c,d=0,e=this.length,f=[],g=bf.test(a)||typeof a!="string"?p(a,b||this.context):0;for(;d-1:p.find.matchesSelector(c,a)){f.push(c);break}c=c.parentNode}}return f=f.length>1?p.unique(f):f,this.pushStack(f,"closest",a)},index:function(a){return a?typeof a=="string"?p.inArray(this[0],p(a)):p.inArray(a.jquery?a[0]:a,this):this[0]&&this[0].parentNode?this.prevAll().length:-1},add:function(a,b){var c=typeof a=="string"?p(a,b):p.makeArray(a&&a.nodeType?[a]:a),d=p.merge(this.get(),c);return this.pushStack(bh(c[0])||bh(d[0])?d:p.unique(d))},addBack:function(a){return this.add(a==null?this.prevObject:this.prevObject.filter(a))}}),p.fn.andSelf=p.fn.addBack,p.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return p.dir(a,"parentNode")},parentsUntil:function(a,b,c){return p.dir(a,"parentNode",c)},next:function(a){return bi(a,"nextSibling")},prev:function(a){return bi(a,"previousSibling")},nextAll:function(a){return p.dir(a,"nextSibling")},prevAll:function(a){return p.dir(a,"previousSibling")},nextUntil:function(a,b,c){return p.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return p.dir(a,"previousSibling",c)},siblings:function(a){return p.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return p.sibling(a.firstChild)},contents:function(a){return p.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:p.merge([],a.childNodes)}},function(a,b){p.fn[a]=function(c,d){var e=p.map(this,b,c);return bc.test(a)||(d=c),d&&typeof d=="string"&&(e=p.filter(d,e)),e=this.length>1&&!bg[a]?p.unique(e):e,this.length>1&&bd.test(a)&&(e=e.reverse()),this.pushStack(e,a,k.call(arguments).join(","))}}),p.extend({filter:function(a,b,c){return c&&(a=":not("+a+")"),b.length===1?p.find.matchesSelector(b[0],a)?[b[0]]:[]:p.find.matches(a,b)},dir:function(a,c,d){var e=[],f=a[c];while(f&&f.nodeType!==9&&(d===b||f.nodeType!==1||!p(f).is(d)))f.nodeType===1&&e.push(f),f=f[c];return e},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var bl="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",bm=/ jQuery\d+="(?:null|\d+)"/g,bn=/^\s+/,bo=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,bp=/<([\w:]+)/,bq=/]","i"),bv=/^(?:checkbox|radio)$/,bw=/checked\s*(?:[^=]|=\s*.checked.)/i,bx=/\/(java|ecma)script/i,by=/^\s*\s*$/g,bz={option:[1,""],legend:[1,"
","
"],thead:[1,"","
"],tr:[2,"","
"],td:[3,"","
"],col:[2,"","
"],area:[1,"",""],_default:[0,"",""]},bA=bk(e),bB=bA.appendChild(e.createElement("div"));bz.optgroup=bz.option,bz.tbody=bz.tfoot=bz.colgroup=bz.caption=bz.thead,bz.th=bz.td,p.support.htmlSerialize||(bz._default=[1,"X
","
"]),p.fn.extend({text:function(a){return p.access(this,function(a){return a===b?p.text(this):this.empty().append((this[0]&&this[0].ownerDocument||e).createTextNode(a))},null,a,arguments.length)},wrapAll:function(a){if(p.isFunction(a))return this.each(function(b){p(this).wrapAll(a.call(this,b))});if(this[0]){var b=p(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){return p.isFunction(a)?this.each(function(b){p(this).wrapInner(a.call(this,b))}):this.each(function(){var b=p(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=p.isFunction(a);return this.each(function(c){p(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){p.nodeName(this,"body")||p(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){(this.nodeType===1||this.nodeType===11)&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){(this.nodeType===1||this.nodeType===11)&&this.insertBefore(a,this.firstChild)})},before:function(){if(!bh(this[0]))return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=p.clean(arguments);return this.pushStack(p.merge(a,this),"before",this.selector)}},after:function(){if(!bh(this[0]))return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=p.clean(arguments);return this.pushStack(p.merge(this,a),"after",this.selector)}},remove:function(a,b){var c,d=0;for(;(c=this[d])!=null;d++)if(!a||p.filter(a,[c]).length)!b&&c.nodeType===1&&(p.cleanData(c.getElementsByTagName("*")),p.cleanData([c])),c.parentNode&&c.parentNode.removeChild(c);return this},empty:function(){var a,b=0;for(;(a=this[b])!=null;b++){a.nodeType===1&&p.cleanData(a.getElementsByTagName("*"));while(a.firstChild)a.removeChild(a.firstChild)}return this},clone:function(a,b){return a=a==null?!1:a,b=b==null?a:b,this.map(function(){return p.clone(this,a,b)})},html:function(a){return p.access(this,function(a){var c=this[0]||{},d=0,e=this.length;if(a===b)return c.nodeType===1?c.innerHTML.replace(bm,""):b;if(typeof a=="string"&&!bs.test(a)&&(p.support.htmlSerialize||!bu.test(a))&&(p.support.leadingWhitespace||!bn.test(a))&&!bz[(bp.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(bo,"<$1>");try{for(;d1&&typeof j=="string"&&bw.test(j))return this.each(function(){p(this).domManip(a,c,d)});if(p.isFunction(j))return this.each(function(e){var f=p(this);a[0]=j.call(this,e,c?f.html():b),f.domManip(a,c,d)});if(this[0]){e=p.buildFragment(a,this,k),g=e.fragment,f=g.firstChild,g.childNodes.length===1&&(g=f);if(f){c=c&&p.nodeName(f,"tr");for(h=e.cacheable||l-1;i0?this.clone(!0):this).get(),p(g[e])[b](d),f=f.concat(d);return this.pushStack(f,a,g.selector)}}),p.extend({clone:function(a,b,c){var d,e,f,g;p.support.html5Clone||p.isXMLDoc(a)||!bu.test("<"+a.nodeName+">")?g=a.cloneNode(!0):(bB.innerHTML=a.outerHTML,bB.removeChild(g=bB.firstChild));if((!p.support.noCloneEvent||!p.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!p.isXMLDoc(a)){bE(a,g),d=bF(a),e=bF(g);for(f=0;d[f];++f)e[f]&&bE(d[f],e[f])}if(b){bD(a,g);if(c){d=bF(a),e=bF(g);for(f=0;d[f];++f)bD(d[f],e[f])}}return d=e=null,g},clean:function(a,b,c,d){var f,g,h,i,j,k,l,m,n,o,q,r,s=b===e&&bA,t=[];if(!b||typeof b.createDocumentFragment=="undefined")b=e;for(f=0;(h=a[f])!=null;f++){typeof h=="number"&&(h+="");if(!h)continue;if(typeof h=="string")if(!br.test(h))h=b.createTextNode(h);else{s=s||bk(b),l=b.createElement("div"),s.appendChild(l),h=h.replace(bo,"<$1>"),i=(bp.exec(h)||["",""])[1].toLowerCase(),j=bz[i]||bz._default,k=j[0],l.innerHTML=j[1]+h+j[2];while(k--)l=l.lastChild;if(!p.support.tbody){m=bq.test(h),n=i==="table"&&!m?l.firstChild&&l.firstChild.childNodes:j[1]===""&&!m?l.childNodes:[];for(g=n.length-1;g>=0;--g)p.nodeName(n[g],"tbody")&&!n[g].childNodes.length&&n[g].parentNode.removeChild(n[g])}!p.support.leadingWhitespace&&bn.test(h)&&l.insertBefore(b.createTextNode(bn.exec(h)[0]),l.firstChild),h=l.childNodes,l.parentNode.removeChild(l)}h.nodeType?t.push(h):p.merge(t,h)}l&&(h=l=s=null);if(!p.support.appendChecked)for(f=0;(h=t[f])!=null;f++)p.nodeName(h,"input")?bG(h):typeof h.getElementsByTagName!="undefined"&&p.grep(h.getElementsByTagName("input"),bG);if(c){q=function(a){if(!a.type||bx.test(a.type))return d?d.push(a.parentNode?a.parentNode.removeChild(a):a):c.appendChild(a)};for(f=0;(h=t[f])!=null;f++)if(!p.nodeName(h,"script")||!q(h))c.appendChild(h),typeof h.getElementsByTagName!="undefined"&&(r=p.grep(p.merge([],h.getElementsByTagName("script")),q),t.splice.apply(t,[f+1,0].concat(r)),f+=r.length)}return t},cleanData:function(a,b){var c,d,e,f,g=0,h=p.expando,i=p.cache,j=p.support.deleteExpando,k=p.event.special;for(;(e=a[g])!=null;g++)if(b||p.acceptData(e)){d=e[h],c=d&&i[d];if(c){if(c.events)for(f in c.events)k[f]?p.event.remove(e,f):p.removeEvent(e,f,c.handle);i[d]&&(delete i[d],j?delete e[h]:e.removeAttribute?e.removeAttribute(h):e[h]=null,p.deletedIds.push(d))}}}}),function(){var a,b;p.uaMatch=function(a){a=a.toLowerCase();var b=/(chrome)[ \/]([\w.]+)/.exec(a)||/(webkit)[ \/]([\w.]+)/.exec(a)||/(opera)(?:.*version|)[ \/]([\w.]+)/.exec(a)||/(msie) ([\w.]+)/.exec(a)||a.indexOf("compatible")<0&&/(mozilla)(?:.*? rv:([\w.]+)|)/.exec(a)||[];return{browser:b[1]||"",version:b[2]||"0"}},a=p.uaMatch(g.userAgent),b={},a.browser&&(b[a.browser]=!0,b.version=a.version),b.chrome?b.webkit=!0:b.webkit&&(b.safari=!0),p.browser=b,p.sub=function(){function a(b,c){return new a.fn.init(b,c)}p.extend(!0,a,this),a.superclass=this,a.fn=a.prototype=this(),a.fn.constructor=a,a.sub=this.sub,a.fn.init=function c(c,d){return d&&d instanceof p&&!(d instanceof a)&&(d=a(d)),p.fn.init.call(this,c,d,b)},a.fn.init.prototype=a.fn;var b=a(e);return a}}();var bH,bI,bJ,bK=/alpha\([^)]*\)/i,bL=/opacity=([^)]*)/,bM=/^(top|right|bottom|left)$/,bN=/^(none|table(?!-c[ea]).+)/,bO=/^margin/,bP=new RegExp("^("+q+")(.*)$","i"),bQ=new RegExp("^("+q+")(?!px)[a-z%]+$","i"),bR=new RegExp("^([-+])=("+q+")","i"),bS={},bT={position:"absolute",visibility:"hidden",display:"block"},bU={letterSpacing:0,fontWeight:400},bV=["Top","Right","Bottom","Left"],bW=["Webkit","O","Moz","ms"],bX=p.fn.toggle;p.fn.extend({css:function(a,c){return p.access(this,function(a,c,d){return d!==b?p.style(a,c,d):p.css(a,c)},a,c,arguments.length>1)},show:function(){return b$(this,!0)},hide:function(){return b$(this)},toggle:function(a,b){var c=typeof a=="boolean";return p.isFunction(a)&&p.isFunction(b)?bX.apply(this,arguments):this.each(function(){(c?a:bZ(this))?p(this).show():p(this).hide()})}}),p.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=bH(a,"opacity");return c===""?"1":c}}}},cssNumber:{fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":p.support.cssFloat?"cssFloat":"styleFloat"},style:function(a,c,d,e){if(!a||a.nodeType===3||a.nodeType===8||!a.style)return;var f,g,h,i=p.camelCase(c),j=a.style;c=p.cssProps[i]||(p.cssProps[i]=bY(j,i)),h=p.cssHooks[c]||p.cssHooks[i];if(d===b)return h&&"get"in h&&(f=h.get(a,!1,e))!==b?f:j[c];g=typeof d,g==="string"&&(f=bR.exec(d))&&(d=(f[1]+1)*f[2]+parseFloat(p.css(a,c)),g="number");if(d==null||g==="number"&&isNaN(d))return;g==="number"&&!p.cssNumber[i]&&(d+="px");if(!h||!("set"in h)||(d=h.set(a,d,e))!==b)try{j[c]=d}catch(k){}},css:function(a,c,d,e){var f,g,h,i=p.camelCase(c);return c=p.cssProps[i]||(p.cssProps[i]=bY(a.style,i)),h=p.cssHooks[c]||p.cssHooks[i],h&&"get"in h&&(f=h.get(a,!0,e)),f===b&&(f=bH(a,c)),f==="normal"&&c in bU&&(f=bU[c]),d||e!==b?(g=parseFloat(f),d||p.isNumeric(g)?g||0:f):f},swap:function(a,b,c){var d,e,f={};for(e in b)f[e]=a.style[e],a.style[e]=b[e];d=c.call(a);for(e in b)a.style[e]=f[e];return d}}),a.getComputedStyle?bH=function(b,c){var d,e,f,g,h=a.getComputedStyle(b,null),i=b.style;return h&&(d=h[c],d===""&&!p.contains(b.ownerDocument,b)&&(d=p.style(b,c)),bQ.test(d)&&bO.test(c)&&(e=i.width,f=i.minWidth,g=i.maxWidth,i.minWidth=i.maxWidth=i.width=d,d=h.width,i.width=e,i.minWidth=f,i.maxWidth=g)),d}:e.documentElement.currentStyle&&(bH=function(a,b){var c,d,e=a.currentStyle&&a.currentStyle[b],f=a.style;return e==null&&f&&f[b]&&(e=f[b]),bQ.test(e)&&!bM.test(b)&&(c=f.left,d=a.runtimeStyle&&a.runtimeStyle.left,d&&(a.runtimeStyle.left=a.currentStyle.left),f.left=b==="fontSize"?"1em":e,e=f.pixelLeft+"px",f.left=c,d&&(a.runtimeStyle.left=d)),e===""?"auto":e}),p.each(["height","width"],function(a,b){p.cssHooks[b]={get:function(a,c,d){if(c)return a.offsetWidth===0&&bN.test(bH(a,"display"))?p.swap(a,bT,function(){return cb(a,b,d)}):cb(a,b,d)},set:function(a,c,d){return b_(a,c,d?ca(a,b,d,p.support.boxSizing&&p.css(a,"boxSizing")==="border-box"):0)}}}),p.support.opacity||(p.cssHooks.opacity={get:function(a,b){return bL.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?.01*parseFloat(RegExp.$1)+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=p.isNumeric(b)?"alpha(opacity="+b*100+")":"",f=d&&d.filter||c.filter||"";c.zoom=1;if(b>=1&&p.trim(f.replace(bK,""))===""&&c.removeAttribute){c.removeAttribute("filter");if(d&&!d.filter)return}c.filter=bK.test(f)?f.replace(bK,e):f+" "+e}}),p(function(){p.support.reliableMarginRight||(p.cssHooks.marginRight={get:function(a,b){return p.swap(a,{display:"inline-block"},function(){if(b)return bH(a,"marginRight")})}}),!p.support.pixelPosition&&p.fn.position&&p.each(["top","left"],function(a,b){p.cssHooks[b]={get:function(a,c){if(c){var d=bH(a,b);return bQ.test(d)?p(a).position()[b]+"px":d}}}})}),p.expr&&p.expr.filters&&(p.expr.filters.hidden=function(a){return a.offsetWidth===0&&a.offsetHeight===0||!p.support.reliableHiddenOffsets&&(a.style&&a.style.display||bH(a,"display"))==="none"},p.expr.filters.visible=function(a){return!p.expr.filters.hidden(a)}),p.each({margin:"",padding:"",border:"Width"},function(a,b){p.cssHooks[a+b]={expand:function(c){var d,e=typeof c=="string"?c.split(" "):[c],f={};for(d=0;d<4;d++)f[a+bV[d]+b]=e[d]||e[d-2]||e[0];return f}},bO.test(a)||(p.cssHooks[a+b].set=b_)});var cd=/%20/g,ce=/\[\]$/,cf=/\r?\n/g,cg=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,ch=/^(?:select|textarea)/i;p.fn.extend({serialize:function(){return p.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?p.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||ch.test(this.nodeName)||cg.test(this.type))}).map(function(a,b){var c=p(this).val();return c==null?null:p.isArray(c)?p.map(c,function(a,c){return{name:b.name,value:a.replace(cf,"\r\n")}}):{name:b.name,value:c.replace(cf,"\r\n")}}).get()}}),p.param=function(a,c){var d,e=[],f=function(a,b){b=p.isFunction(b)?b():b==null?"":b,e[e.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=p.ajaxSettings&&p.ajaxSettings.traditional);if(p.isArray(a)||a.jquery&&!p.isPlainObject(a))p.each(a,function(){f(this.name,this.value)});else for(d in a)ci(d,a[d],c,f);return e.join("&").replace(cd,"+")};var cj,ck,cl=/#.*$/,cm=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,cn=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,co=/^(?:GET|HEAD)$/,cp=/^\/\//,cq=/\?/,cr=/)<[^<]*)*<\/script>/gi,cs=/([?&])_=[^&]*/,ct=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/,cu=p.fn.load,cv={},cw={},cx=["*/"]+["*"];try{ck=f.href}catch(cy){ck=e.createElement("a"),ck.href="",ck=ck.href}cj=ct.exec(ck.toLowerCase())||[],p.fn.load=function(a,c,d){if(typeof a!="string"&&cu)return cu.apply(this,arguments);if(!this.length)return this;var e,f,g,h=this,i=a.indexOf(" ");return i>=0&&(e=a.slice(i,a.length),a=a.slice(0,i)),p.isFunction(c)?(d=c,c=b):c&&typeof c=="object"&&(f="POST"),p.ajax({url:a,type:f,dataType:"html",data:c,complete:function(a,b){d&&h.each(d,g||[a.responseText,b,a])}}).done(function(a){g=arguments,h.html(e?p("
").append(a.replace(cr,"")).find(e):a)}),this},p.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){p.fn[b]=function(a){return this.on(b,a)}}),p.each(["get","post"],function(a,c){p[c]=function(a,d,e,f){return p.isFunction(d)&&(f=f||e,e=d,d=b),p.ajax({type:c,url:a,data:d,success:e,dataType:f})}}),p.extend({getScript:function(a,c){return p.get(a,b,c,"script")},getJSON:function(a,b,c){return p.get(a,b,c,"json")},ajaxSetup:function(a,b){return b?cB(a,p.ajaxSettings):(b=a,a=p.ajaxSettings),cB(a,b),a},ajaxSettings:{url:ck,isLocal:cn.test(cj[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","*":cx},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":p.parseJSON,"text xml":p.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:cz(cv),ajaxTransport:cz(cw),ajax:function(a,c){function y(a,c,f,i){var k,s,t,u,w,y=c;if(v===2)return;v=2,h&&clearTimeout(h),g=b,e=i||"",x.readyState=a>0?4:0,f&&(u=cC(l,x,f));if(a>=200&&a<300||a===304)l.ifModified&&(w=x.getResponseHeader("Last-Modified"),w&&(p.lastModified[d]=w),w=x.getResponseHeader("Etag"),w&&(p.etag[d]=w)),a===304?(y="notmodified",k=!0):(k=cD(l,u),y=k.state,s=k.data,t=k.error,k=!t);else{t=y;if(!y||a)y="error",a<0&&(a=0)}x.status=a,x.statusText=(c||y)+"",k?o.resolveWith(m,[s,y,x]):o.rejectWith(m,[x,y,t]),x.statusCode(r),r=b,j&&n.trigger("ajax"+(k?"Success":"Error"),[x,l,k?s:t]),q.fireWith(m,[x,y]),j&&(n.trigger("ajaxComplete",[x,l]),--p.active||p.event.trigger("ajaxStop"))}typeof a=="object"&&(c=a,a=b),c=c||{};var d,e,f,g,h,i,j,k,l=p.ajaxSetup({},c),m=l.context||l,n=m!==l&&(m.nodeType||m instanceof p)?p(m):p.event,o=p.Deferred(),q=p.Callbacks("once memory"),r=l.statusCode||{},t={},u={},v=0,w="canceled",x={readyState:0,setRequestHeader:function(a,b){if(!v){var c=a.toLowerCase();a=u[c]=u[c]||a,t[a]=b}return this},getAllResponseHeaders:function(){return v===2?e:null},getResponseHeader:function(a){var c;if(v===2){if(!f){f={};while(c=cm.exec(e))f[c[1].toLowerCase()]=c[2]}c=f[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){return v||(l.mimeType=a),this},abort:function(a){return a=a||w,g&&g.abort(a),y(0,a),this}};o.promise(x),x.success=x.done,x.error=x.fail,x.complete=q.add,x.statusCode=function(a){if(a){var b;if(v<2)for(b in a)r[b]=[r[b],a[b]];else b=a[x.status],x.always(b)}return this},l.url=((a||l.url)+"").replace(cl,"").replace(cp,cj[1]+"//"),l.dataTypes=p.trim(l.dataType||"*").toLowerCase().split(s),l.crossDomain==null&&(i=ct.exec(l.url.toLowerCase())||!1,l.crossDomain=i&&i.join(":")+(i[3]?"":i[1]==="http:"?80:443)!==cj.join(":")+(cj[3]?"":cj[1]==="http:"?80:443)),l.data&&l.processData&&typeof l.data!="string"&&(l.data=p.param(l.data,l.traditional)),cA(cv,l,c,x);if(v===2)return x;j=l.global,l.type=l.type.toUpperCase(),l.hasContent=!co.test(l.type),j&&p.active++===0&&p.event.trigger("ajaxStart");if(!l.hasContent){l.data&&(l.url+=(cq.test(l.url)?"&":"?")+l.data,delete l.data),d=l.url;if(l.cache===!1){var z=p.now(),A=l.url.replace(cs,"$1_="+z);l.url=A+(A===l.url?(cq.test(l.url)?"&":"?")+"_="+z:"")}}(l.data&&l.hasContent&&l.contentType!==!1||c.contentType)&&x.setRequestHeader("Content-Type",l.contentType),l.ifModified&&(d=d||l.url,p.lastModified[d]&&x.setRequestHeader("If-Modified-Since",p.lastModified[d]),p.etag[d]&&x.setRequestHeader("If-None-Match",p.etag[d])),x.setRequestHeader("Accept",l.dataTypes[0]&&l.accepts[l.dataTypes[0]]?l.accepts[l.dataTypes[0]]+(l.dataTypes[0]!=="*"?", "+cx+"; q=0.01":""):l.accepts["*"]);for(k in l.headers)x.setRequestHeader(k,l.headers[k]);if(!l.beforeSend||l.beforeSend.call(m,x,l)!==!1&&v!==2){w="abort";for(k in{success:1,error:1,complete:1})x[k](l[k]);g=cA(cw,l,c,x);if(!g)y(-1,"No Transport");else{x.readyState=1,j&&n.trigger("ajaxSend",[x,l]),l.async&&l.timeout>0&&(h=setTimeout(function(){x.abort("timeout")},l.timeout));try{v=1,g.send(t,y)}catch(B){if(v<2)y(-1,B);else throw B}}return x}return x.abort()},active:0,lastModified:{},etag:{}});var cE=[],cF=/\?/,cG=/(=)\?(?=&|$)|\?\?/,cH=p.now();p.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var a=cE.pop()||p.expando+"_"+cH++;return this[a]=!0,a}}),p.ajaxPrefilter("json jsonp",function(c,d,e){var f,g,h,i=c.data,j=c.url,k=c.jsonp!==!1,l=k&&cG.test(j),m=k&&!l&&typeof i=="string"&&!(c.contentType||"").indexOf("application/x-www-form-urlencoded")&&cG.test(i);if(c.dataTypes[0]==="jsonp"||l||m)return f=c.jsonpCallback=p.isFunction(c.jsonpCallback)?c.jsonpCallback():c.jsonpCallback,g=a[f],l?c.url=j.replace(cG,"$1"+f):m?c.data=i.replace(cG,"$1"+f):k&&(c.url+=(cF.test(j)?"&":"?")+c.jsonp+"="+f),c.converters["script json"]=function(){return h||p.error(f+" was not called"),h[0]},c.dataTypes[0]="json",a[f]=function(){h=arguments},e.always(function(){a[f]=g,c[f]&&(c.jsonpCallback=d.jsonpCallback,cE.push(f)),h&&p.isFunction(g)&&g(h[0]),h=g=b}),"script"}),p.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){return p.globalEval(a),a}}}),p.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),p.ajaxTransport("script",function(a){if(a.crossDomain){var c,d=e.head||e.getElementsByTagName("head")[0]||e.documentElement;return{send:function(f,g){c=e.createElement("script"),c.async="async",a.scriptCharset&&(c.charset=a.scriptCharset),c.src=a.url,c.onload=c.onreadystatechange=function(a,e){if(e||!c.readyState||/loaded|complete/.test(c.readyState))c.onload=c.onreadystatechange=null,d&&c.parentNode&&d.removeChild(c),c=b,e||g(200,"success")},d.insertBefore(c,d.firstChild)},abort:function(){c&&c.onload(0,1)}}}});var cI,cJ=a.ActiveXObject?function(){for(var a in cI)cI[a](0,1)}:!1,cK=0;p.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&cL()||cM()}:cL,function(a){p.extend(p.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(p.ajaxSettings.xhr()),p.support.ajax&&p.ajaxTransport(function(c){if(!c.crossDomain||p.support.cors){var d;return{send:function(e,f){var g,h,i=c.xhr();c.username?i.open(c.type,c.url,c.async,c.username,c.password):i.open(c.type,c.url,c.async);if(c.xhrFields)for(h in c.xhrFields)i[h]=c.xhrFields[h];c.mimeType&&i.overrideMimeType&&i.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(h in e)i.setRequestHeader(h,e[h])}catch(j){}i.send(c.hasContent&&c.data||null),d=function(a,e){var h,j,k,l,m;try{if(d&&(e||i.readyState===4)){d=b,g&&(i.onreadystatechange=p.noop,cJ&&delete cI[g]);if(e)i.readyState!==4&&i.abort();else{h=i.status,k=i.getAllResponseHeaders(),l={},m=i.responseXML,m&&m.documentElement&&(l.xml=m);try{l.text=i.responseText}catch(a){}try{j=i.statusText}catch(n){j=""}!h&&c.isLocal&&!c.crossDomain?h=l.text?200:404:h===1223&&(h=204)}}}catch(o){e||f(-1,o)}l&&f(h,j,l,k)},c.async?i.readyState===4?setTimeout(d,0):(g=++cK,cJ&&(cI||(cI={},p(a).unload(cJ)),cI[g]=d),i.onreadystatechange=d):d()},abort:function(){d&&d(0,1)}}}});var cN,cO,cP=/^(?:toggle|show|hide)$/,cQ=new RegExp("^(?:([-+])=|)("+q+")([a-z%]*)$","i"),cR=/queueHooks$/,cS=[cY],cT={"*":[function(a,b){var c,d,e=this.createTween(a,b),f=cQ.exec(b),g=e.cur(),h=+g||0,i=1,j=20;if(f){c=+f[2],d=f[3]||(p.cssNumber[a]?"":"px");if(d!=="px"&&h){h=p.css(e.elem,a,!0)||c||1;do i=i||".5",h=h/i,p.style(e.elem,a,h+d);while(i!==(i=e.cur()/g)&&i!==1&&--j)}e.unit=d,e.start=h,e.end=f[1]?h+(f[1]+1)*c:c}return e}]};p.Animation=p.extend(cW,{tweener:function(a,b){p.isFunction(a)?(b=a,a=["*"]):a=a.split(" ");var c,d=0,e=a.length;for(;d-1,j={},k={},l,m;i?(k=e.position(),l=k.top,m=k.left):(l=parseFloat(g)||0,m=parseFloat(h)||0),p.isFunction(b)&&(b=b.call(a,c,f)),b.top!=null&&(j.top=b.top-f.top+l),b.left!=null&&(j.left=b.left-f.left+m),"using"in b?b.using.call(a,j):e.css(j)}},p.fn.extend({position:function(){if(!this[0])return;var a=this[0],b=this.offsetParent(),c=this.offset(),d=c_.test(b[0].nodeName)?{top:0,left:0}:b.offset();return c.top-=parseFloat(p.css(a,"marginTop"))||0,c.left-=parseFloat(p.css(a,"marginLeft"))||0,d.top+=parseFloat(p.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(p.css(b[0],"borderLeftWidth"))||0,{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||e.body;while(a&&!c_.test(a.nodeName)&&p.css(a,"position")==="static")a=a.offsetParent;return a||e.body})}}),p.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(a,c){var d=/Y/.test(c);p.fn[a]=function(e){return p.access(this,function(a,e,f){var g=da(a);if(f===b)return g?c in g?g[c]:g.document.documentElement[e]:a[e];g?g.scrollTo(d?p(g).scrollLeft():f,d?f:p(g).scrollTop()):a[e]=f},a,e,arguments.length,null)}}),p.each({Height:"height",Width:"width"},function(a,c){p.each({padding:"inner"+a,content:c,"":"outer"+a},function(d,e){p.fn[e]=function(e,f){var g=arguments.length&&(d||typeof e!="boolean"),h=d||(e===!0||f===!0?"margin":"border");return p.access(this,function(c,d,e){var f;return p.isWindow(c)?c.document.documentElement["client"+a]:c.nodeType===9?(f=c.documentElement,Math.max(c.body["scroll"+a],f["scroll"+a],c.body["offset"+a],f["offset"+a],f["client"+a])):e===b?p.css(c,d,e,h):p.style(c,d,e,h)},c,g?e:b,g,null)}})}),a.jQuery=a.$=p,typeof define=="function"&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return p})})(window); \ No newline at end of file diff --git a/app/lib/jquery.cookie/jquery.cookie.js b/app/lib/jquery.cookie.js similarity index 99% rename from app/lib/jquery.cookie/jquery.cookie.js rename to app/lib/jquery.cookie.js index 696e8e5..be63645 100644 --- a/app/lib/jquery.cookie/jquery.cookie.js +++ b/app/lib/jquery.cookie.js @@ -44,4 +44,4 @@ } return null; }; -})(jQuery); \ No newline at end of file +})($); \ No newline at end of file diff --git a/app/lib/jquery.google.fastbutton.js b/app/lib/jquery.google.fastbutton.js deleted file mode 100644 index 2f9ad10..0000000 --- a/app/lib/jquery.google.fastbutton.js +++ /dev/null @@ -1,8 +0,0 @@ -(function($) { - $.fn.fastClick = function(handler) { - return $(this).each(function() { - new FastButton($(this)[0], handler); - }); - }; -}(jQuery)); - diff --git a/app/lib/modernizr.custom.07116.js b/app/lib/modernizr.custom.07116.js new file mode 100644 index 0000000..fe3e076 --- /dev/null +++ b/app/lib/modernizr.custom.07116.js @@ -0,0 +1,4 @@ +/* Modernizr 2.6.2 (Custom Build) | MIT & BSD + * Build: http://modernizr.com/download/#-generatedcontent-csstransforms-csstransforms3d-csstransitions-websockets-svg-printshiv-mq-cssclasses-addtest-teststyles-testprop-testallprops-prefixes-domprefixes-load + */ +;window.Modernizr=function(a,b,c){function C(a){j.cssText=a}function D(a,b){return C(n.join(a+";")+(b||""))}function E(a,b){return typeof a===b}function F(a,b){return!!~(""+a).indexOf(b)}function G(a,b){for(var d in a){var e=a[d];if(!F(e,"-")&&j[e]!==c)return b=="pfx"?e:!0}return!1}function H(a,b,d){for(var e in a){var f=b[a[e]];if(f!==c)return d===!1?a[e]:E(f,"function")?f.bind(d||b):f}return!1}function I(a,b,c){var d=a.charAt(0).toUpperCase()+a.slice(1),e=(a+" "+p.join(d+" ")+d).split(" ");return E(b,"string")||E(b,"undefined")?G(e,b):(e=(a+" "+q.join(d+" ")+d).split(" "),H(e,b,c))}var d="2.6.2",e={},f=!0,g=b.documentElement,h="modernizr",i=b.createElement(h),j=i.style,k,l=":)",m={}.toString,n=" -webkit- -moz- -o- -ms- ".split(" "),o="Webkit Moz O ms",p=o.split(" "),q=o.toLowerCase().split(" "),r={svg:"http://www.w3.org/2000/svg"},s={},t={},u={},v=[],w=v.slice,x,y=function(a,c,d,e){var f,i,j,k,l=b.createElement("div"),m=b.body,n=m||b.createElement("body");if(parseInt(d,10))while(d--)j=b.createElement("div"),j.id=e?e[d]:h+(d+1),l.appendChild(j);return f=["­",'"].join(""),l.id=h,(m?l:n).innerHTML+=f,n.appendChild(l),m||(n.style.background="",n.style.overflow="hidden",k=g.style.overflow,g.style.overflow="hidden",g.appendChild(n)),i=c(l,a),m?l.parentNode.removeChild(l):(n.parentNode.removeChild(n),g.style.overflow=k),!!i},z=function(b){var c=a.matchMedia||a.msMatchMedia;if(c)return c(b).matches;var d;return y("@media "+b+" { #"+h+" { position: absolute; } }",function(b){d=(a.getComputedStyle?getComputedStyle(b,null):b.currentStyle)["position"]=="absolute"}),d},A={}.hasOwnProperty,B;!E(A,"undefined")&&!E(A.call,"undefined")?B=function(a,b){return A.call(a,b)}:B=function(a,b){return b in a&&E(a.constructor.prototype[b],"undefined")},Function.prototype.bind||(Function.prototype.bind=function(b){var c=this;if(typeof c!="function")throw new TypeError;var d=w.call(arguments,1),e=function(){if(this instanceof e){var a=function(){};a.prototype=c.prototype;var f=new a,g=c.apply(f,d.concat(w.call(arguments)));return Object(g)===g?g:f}return c.apply(b,d.concat(w.call(arguments)))};return e}),s.websockets=function(){return"WebSocket"in a||"MozWebSocket"in a},s.csstransforms=function(){return!!I("transform")},s.csstransforms3d=function(){var a=!!I("perspective");return a&&"webkitPerspective"in g.style&&y("@media (transform-3d),(-webkit-transform-3d){#modernizr{left:9px;position:absolute;height:3px;}}",function(b,c){a=b.offsetLeft===9&&b.offsetHeight===3}),a},s.csstransitions=function(){return I("transition")},s.generatedcontent=function(){var a;return y(["#",h,"{font:0/0 a}#",h,':after{content:"',l,'";visibility:hidden;font:3px/1 a}'].join(""),function(b){a=b.offsetHeight>=3}),a},s.svg=function(){return!!b.createElementNS&&!!b.createElementNS(r.svg,"svg").createSVGRect};for(var J in s)B(s,J)&&(x=J.toLowerCase(),e[x]=s[J](),v.push((e[x]?"":"no-")+x));return e.addTest=function(a,b){if(typeof a=="object")for(var d in a)B(a,d)&&e.addTest(d,a[d]);else{a=a.toLowerCase();if(e[a]!==c)return e;b=typeof b=="function"?b():b,typeof f!="undefined"&&f&&(g.className+=" "+(b?"":"no-")+a),e[a]=b}return e},C(""),i=k=null,e._version=d,e._prefixes=n,e._domPrefixes=q,e._cssomPrefixes=p,e.mq=z,e.testProp=function(a){return G([a])},e.testAllProps=I,e.testStyles=y,g.className=g.className.replace(/(^|\s)no-js(\s|$)/,"$1$2")+(f?" js "+v.join(" "):""),e}(this,this.document),function(a,b){function k(a,b){var c=a.createElement("p"),d=a.getElementsByTagName("head")[0]||a.documentElement;return c.innerHTML="x",d.insertBefore(c.lastChild,d.firstChild)}function l(){var a=r.elements;return typeof a=="string"?a.split(" "):a}function m(a){var b=i[a[g]];return b||(b={},h++,a[g]=h,i[h]=b),b}function n(a,c,f){c||(c=b);if(j)return c.createElement(a);f||(f=m(c));var g;return f.cache[a]?g=f.cache[a].cloneNode():e.test(a)?g=(f.cache[a]=f.createElem(a)).cloneNode():g=f.createElem(a),g.canHaveChildren&&!d.test(a)?f.frag.appendChild(g):g}function o(a,c){a||(a=b);if(j)return a.createDocumentFragment();c=c||m(a);var d=c.frag.cloneNode(),e=0,f=l(),g=f.length;for(;e+~])("+l().join("|")+")(?=[[\\s,>+~#.:]|$)","gi"),f="$1"+t+"\\:$2";while(d--)b=c[d]=c[d].split("}"),b[b.length-1]=b[b.length-1].replace(e,f),c[d]=b.join("}");return c.join("{")}function y(a){var b=a.length;while(b--)a[b].removeNode()}function z(a){function g(){clearTimeout(d._removeSheetTimer),b&&b.removeNode(!0),b=null}var b,c,d=m(a),e=a.namespaces,f=a.parentWindow;return!u||a.printShived?a:(typeof e[t]=="undefined"&&e.add(t),f.attachEvent("onbeforeprint",function(){g();var d,e,f,h=a.styleSheets,i=[],j=h.length,l=Array(j);while(j--)l[j]=h[j];while(f=l.pop())if(!f.disabled&&s.test(f.media)){try{d=f.imports,e=d.length}catch(m){e=0}for(j=0;j",f="hidden"in a,j=a.childNodes.length==1||function(){b.createElement("a");var a=b.createDocumentFragment();return typeof a.cloneNode=="undefined"||typeof a.createDocumentFragment=="undefined"||typeof a.createElement=="undefined"}()}catch(c){f=!0,j=!0}})();var r={elements:c.elements||"abbr article aside audio bdi canvas data datalist details figcaption figure footer header hgroup mark meter nav output progress section summary time video",shivCSS:c.shivCSS!==!1,supportsUnknownElements:j,shivMethods:c.shivMethods!==!1,type:"default",shivDocument:q,createElement:n,createDocumentFragment:o};a.html5=r,q(b);var s=/^$|\b(?:all|print)\b/,t="html5shiv",u=!j&&function(){var c=b.documentElement;return typeof b.namespaces!="undefined"&&typeof b.parentWindow!="undefined"&&typeof c.applyElement!="undefined"&&typeof c.removeNode!="undefined"&&typeof a.attachEvent!="undefined"}();r.type+=" print",r.shivPrint=z,z(b)}(this,document),function(a,b,c){function d(a){return"[object Function]"==o.call(a)}function e(a){return"string"==typeof a}function f(){}function g(a){return!a||"loaded"==a||"complete"==a||"uninitialized"==a}function h(){var a=p.shift();q=1,a?a.t?m(function(){("c"==a.t?B.injectCss:B.injectJs)(a.s,0,a.a,a.x,a.e,1)},0):(a(),h()):q=0}function i(a,c,d,e,f,i,j){function k(b){if(!o&&g(l.readyState)&&(u.r=o=1,!q&&h(),l.onload=l.onreadystatechange=null,b)){"img"!=a&&m(function(){t.removeChild(l)},50);for(var d in y[c])y[c].hasOwnProperty(d)&&y[c][d].onload()}}var j=j||B.errorTimeout,l=b.createElement(a),o=0,r=0,u={t:d,s:c,e:f,a:i,x:j};1===y[c]&&(r=1,y[c]=[]),"object"==a?l.data=c:(l.src=c,l.type=a),l.width=l.height="0",l.onerror=l.onload=l.onreadystatechange=function(){k.call(this,r)},p.splice(e,0,u),"img"!=a&&(r||2===y[c]?(t.insertBefore(l,s?null:n),m(k,j)):y[c].push(l))}function j(a,b,c,d,f){return q=0,b=b||"j",e(a)?i("c"==b?v:u,a,b,this.i++,c,d,f):(p.splice(this.i++,0,a),1==p.length&&h()),this}function k(){var a=B;return a.loader={load:j,i:0},a}var l=b.documentElement,m=a.setTimeout,n=b.getElementsByTagName("script")[0],o={}.toString,p=[],q=0,r="MozAppearance"in l.style,s=r&&!!b.createRange().compareNode,t=s?l:n.parentNode,l=a.opera&&"[object Opera]"==o.call(a.opera),l=!!b.attachEvent&&!l,u=r?"object":l?"script":"img",v=l?"script":u,w=Array.isArray||function(a){return"[object Array]"==o.call(a)},x=[],y={},z={timeout:function(a,b){return b.length&&(a.timeout=b[0]),a}},A,B;B=function(a){function b(a){var a=a.split("!"),b=x.length,c=a.pop(),d=a.length,c={url:c,origUrl:c,prefixes:a},e,f,g;for(f=0;f",a,""].join(""),k.id=h,(l?k:m).innerHTML+=f,m.appendChild(k),l||(m.style.background="",g.appendChild(m)),i=c(k,a),l?k.parentNode.removeChild(k):m.parentNode.removeChild(m),!!i},x={}.hasOwnProperty,y;!B(x,"undefined")&&!B(x.call,"undefined")?y=function(a,b){return x.call(a,b)}:y=function(a,b){return b in a&&B(a.constructor.prototype[b],"undefined")},Function.prototype.bind||(Function.prototype.bind=function(b){var c=this;if(typeof c!="function")throw new TypeError;var d=u.call(arguments,1),e=function(){if(this instanceof e){var a=function(){};a.prototype=c.prototype;var f=new a,g=c.apply(f,d.concat(u.call(arguments)));return Object(g)===g?g:f}return c.apply(b,d.concat(u.call(arguments)))};return e});var G=function(c,d){var f=c.join(""),g=d.length;w(f,function(c,d){var f=b.styleSheets[b.styleSheets.length-1],h=f?f.cssRules&&f.cssRules[0]?f.cssRules[0].cssText:f.cssText||"":"",i=c.childNodes,j={};while(g--)j[i[g].id]=i[g];e.touch="ontouchstart"in a||a.DocumentTouch&&b instanceof DocumentTouch||(j.touch&&j.touch.offsetTop)===9,e.csstransforms3d=(j.csstransforms3d&&j.csstransforms3d.offsetLeft)===9&&j.csstransforms3d.offsetHeight===3},g,d)}([,["@media (",m.join("touch-enabled),("),h,")","{#touch{top:9px;position:absolute}}"].join(""),["@media (",m.join("transform-3d),("),h,")","{#csstransforms3d{left:9px;position:absolute;height:3px;}}"].join("")],[,"touch","csstransforms3d"]);q.touch=function(){return e.touch},q.websockets=function(){for(var b=-1,c=o.length;++b #mq-test-1 { width: 42px; }';a.insertBefore(d,b);c=g.offsetWidth==42;a.removeChild(d);return{matches:c,media:h}}})(document); + +/*! Respond.js v1.1.0: min/max-width media query polyfill. (c) Scott Jehl. MIT/GPLv2 Lic. j.mp/respondjs */ +(function(e){e.respond={};respond.update=function(){};respond.mediaQueriesSupported=e.matchMedia&&e.matchMedia("only all").matches;if(respond.mediaQueriesSupported){return}var w=e.document,s=w.documentElement,i=[],k=[],q=[],o={},h=30,f=w.getElementsByTagName("head")[0]||s,g=w.getElementsByTagName("base")[0],b=f.getElementsByTagName("link"),d=[],a=function(){var D=b,y=D.length,B=0,A,z,C,x;for(;B-1,minw:F.match(/\(min\-width:[\s]*([\s]*[0-9\.]+)(px|em)[\s]*\)/)&&parseFloat(RegExp.$1)+(RegExp.$2||""),maxw:F.match(/\(max\-width:[\s]*([\s]*[0-9\.]+)(px|em)[\s]*\)/)&&parseFloat(RegExp.$1)+(RegExp.$2||"")})}}j()},l,r,v=function(){var z,A=w.createElement("div"),x=w.body,y=false;A.style.cssText="position:absolute;font-size:1em;width:1em";if(!x){x=y=w.createElement("body");x.style.background="none"}x.appendChild(A);s.insertBefore(x,s.firstChild);z=A.offsetWidth;if(y){s.removeChild(x)}else{x.removeChild(A)}z=p=parseFloat(z);return z},p,j=function(I){var x="clientWidth",B=s[x],H=w.compatMode==="CSS1Compat"&&B||w.body[x]||B,D={},G=b[b.length-1],z=(new Date()).getTime();if(I&&l&&z-l-1?(p||v()):1)}if(!!J){J=parseFloat(J)*(J.indexOf(y)>-1?(p||v()):1)}if(!K.hasquery||(!A||!L)&&(A||H>=C)&&(L||H<=J)){if(!D[K.media]){D[K.media]=[]}D[K.media].push(k[K.rules])}}for(var E in q){if(q[E]&&q[E].parentNode===f){f.removeChild(q[E])}}for(var E in D){var M=w.createElement("style"),F=D[E].join("\n");M.type="text/css";M.media=E;f.insertBefore(M,G.nextSibling);if(M.styleSheet){M.styleSheet.cssText=F}else{M.appendChild(w.createTextNode(F))}q.push(M)}},n=function(x,z){var y=c();if(!y){return}y.open("GET",x,true);y.onreadystatechange=function(){if(y.readyState!=4||y.status!=200&&y.status!=304){return}z(y.responseText)};if(y.readyState==4){return}y.send(null)},c=(function(){var x=false;try{x=new XMLHttpRequest()}catch(y){x=new ActiveXObject("Microsoft.XMLHTTP")}return function(){return x}})();a();respond.update=a;function t(){j(true)}if(e.addEventListener){e.addEventListener("resize",t,false)}else{if(e.attachEvent){e.attachEvent("onresize",t)}}})(this); \ No newline at end of file diff --git a/app/partials/lobby.html b/app/partials/lobby.html index b689727..beee9d4 100644 --- a/app/partials/lobby.html +++ b/app/partials/lobby.html @@ -1,8 +1,17 @@ -
-

Distributed scrum planning poker for estimating agile projects.

+
+

Distributed scrum planning poker for estimating agile projects.

First person to create the room is the moderator. Share the url or room number with other team members to join the room.

- -
-
/ 
-
-
+ +
+ +
+ + +
+ +
+ +
+ + +
diff --git a/app/partials/room.html b/app/partials/room.html index 0a3e74a..3454c24 100644 --- a/app/partials/room.html +++ b/app/partials/room.html @@ -1,73 +1,98 @@ -
Room: {{roomId}}
-
- -
-
-

Estimate

-
    -
  • -
    {{card}}
    -
  • -
  • - No cards found -
  • -
+
+

Room: {{roomId}}

+ +
+
+
+
+ Choose your estimate... +
+
+ You have chosen not to vote. +
+
+
+
+ +
+
-
-

You have chosen to simply observe this session. Enjoy!

+ + +
+
+ {{card}} +
+
+ No cards found +
- Vote -
-
-

Votes

- Humans: {{humanCount}}, Voters: {{voterCount}} - -
    -
  • -
    {{vote.visibleVote}}
    - -
  • -
-
-

Settings

-
-
-

Card pack:

- - - - - -
- - -
+
+ + +
+ +
-

-
- Settings -
-
- \ No newline at end of file +
+ +
+ +
diff --git a/app/styleguide.ejs b/app/styleguide.ejs new file mode 100644 index 0000000..3fd0adb --- /dev/null +++ b/app/styleguide.ejs @@ -0,0 +1,344 @@ + + + + + Hat.jit.su style guide + + + + + + + + + + +
+

Hat.jit.su styleguide: a cut-out-and-keep reference for all the family

+
+
+

Header/Logo

+

First thing's first; the header. The glorious introduction to the majesterial wonder that is HatJitSu. Here's an example of it in action;

+
+ + +

Hatjitsu

+
+
+
+
+

Pretty awesome, hey? Have a look at the source code to see how that was done. We've used header tags and such, but that's not too important.

+

Neither's the a wrapped around it. That's purely optional; if you only want the logo and the header without a link, just take it out.

+
+ +

Hatjitsu

+
+

Actually, it's pretty much the same deal with the logo. Just remove the .header__text.

+
+ +
+

Just remember to put wrap it in a container classed with .header.

+

With the .header__text class, you can add multiple elements, allowing for multiline headings:

+
+ +
+

hatjitsu

+
+
+

It's also possible to change the colour of the logo dependant upon a status, simply add a second class of .header__logo--[colour] to the existing .header__logo element.

+
+ + + +
+
+
+
+

Footer

+

The footer of the page is a fairly simple center alignment issue. Just add in the .footer class and let the typographical styles do the rest.

+ +
+
+
+

Body

+

The .body--[colour] applies new styling based upon the consensus of voting, similar to the header logo.

+
+
Green
+
Yellow
+
Red
+
+
+
+
+

Cards

+

1 sided cards

+

Cards are obviously central to this app, and form a large part of the look. They all follow a fairly standard markup pattern.

+ 1 +

Each card item is tagged with .card.

+

If there are multiple cards, the parent wrapper is tagged with .cards.

+
+ 1 + 2 + 3 + 4 + 5 + 6 +
+

If a card is selected or active, add a class of .card--selected to the .card element in question.

+

Conversely, .card--disabled will mark it as disabled.

+

Finally, .card--placeholder is used to visually represent where a card will be placed.

+

These 3 classes can be mixed and matched as needed.

+ +
+ 1 + 2 + 3 + 4 + + +
+

2 sided cards

+

2-sided cards are available to those with fancy JavaScriptin' and CSS3 3D-Transforms on their calculatin' machines. The basic markup is a little more involved, but should make sense:

+
+ + F + B + + + O + A + + + O + R + +
+ +
+

By the way; we all understand that not all browsers support CSS 3D Transforms, right? Those browsers will simply swap cards around.

+

..and adding .card--selected or .code-disabled will still perform as before.

+ +
+ + R + L + + + O + M + + + F + A + + + L + O + + +
+ + +
+

or selected only on one side...

+
+ + W + L + + + T + O + + + F + L + +
+ +
+

Or toggle an individual card, simple add .flipped to the .card in question...

+
+ + 1 + 1 + + + 2 + 2 + + + 3 + 3 + +
+ +
+

Or to stagger the animation of cards, simply add .flipped-stagger to .cards... ( note staggering only works up to a maximum of 8 votes, any more will be flipped at the same time)

+
+ + 1 + A + + + 2 + B + + + 3 + C + + + 4 + D + + + 5 + E + + + 6 + F + + + 7 + G + + + 8 + H + + + 9 + I + + + 10 + J + + + 11 + K + + + 12 + L + + + 13 + M + + + 14 + N + + + 15 + O + + + + 16 + P + +
+ +
+
+
+
+

Buttons

+

Basic setup: button.btn

+

Use the .icon to assign a space, and then either .icon-refresh or .icon-exclamation-sign for the various icons to use.

+
+ + + +
+

2-way toggle

+

Basic setup:

+
+
+ + +
+
+ + +
+
+ + +
+
+
+
+
+

Dropdown

+

Javascript is required to use this customised drop down menu. The #dd selector is customisable to whatever jQuery selector you would prefer.

+
+ + +
+
+
+
+
+

Typography

+

TBC

+
+
+
+

Concertina section

+

TBC

+
+
+
+

Panels

+

.cardPanel

+

The card panel typically contains all available vote combinations, and has a responsive breakpoint before viewport width of 28ems that centrally aligns the cards. Afterwards, the design will revert back to the left. Otherwise, it is also responsible for some simple styling.

+
+ Lorem ipsum dolor sit amet, consectetur adipisicing elit. Illo et reprehenderit architecto eum delectus molestias ipsa corrupti perferendis aperiam suscipit repellat blanditiis rerum ea tempore doloribus provident quisquam impedit vel. +
+
+
+
+

Surgical classes

+
+

.bg

+

Applies a transparent background texture.

+
+
+

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Voluptatum neque excepturi facilis consequuntur illo rem ipsa ad aspernatur veniam eos dicta minus vero mollitia perferendis quibusdam iure laudantium animi sed.

+
+
+
+
+

.no-js-hide

+

With JavaScript disabled, this section will not be visible at all.

+

Think of it as an opposite to <noscript> Add a .no-js-hide class to those elements you want to remove.

+
+ +
+
+ + + + + \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..9e370bb --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,9 @@ +version: '3' +services: + poker: + build: . + ports: + - "5000:5000" + volumes: + - /Hatjitsu/node_modules + - .:/Hatjitsu diff --git a/lib/room.js b/lib/room.js index 2064ca5..6fe844b 100644 --- a/lib/room.js +++ b/lib/room.js @@ -10,6 +10,7 @@ var Room = function(io, roomUrl) { this.cardPack = 'goat'; this.connections = {}; // we collect the votes in here this.forcedReveal = false; + this.alreadySorted = false; }; Room.prototype.info = function() { @@ -73,11 +74,18 @@ Room.prototype.resetVote = function() { c.vote = null; }) this.forcedReveal = false; + this.alreadySorted = false; this.io.sockets.in(this.roomUrl).emit('vote reset'); } Room.prototype.forceReveal = function() { this.forcedReveal = true; + this.alreadySorted = false; + this.io.sockets.in(this.roomUrl).emit('reveal'); +} + +Room.prototype.sortVotes = function() { + this.alreadySorted = true; this.io.sockets.in(this.roomUrl).emit('reveal'); } @@ -93,6 +101,7 @@ Room.prototype.json = function() { hasAdmin: this.hasAdmin, cardPack: this.cardPack, forcedReveal: this.forcedReveal, + alreadySorted: this.alreadySorted, connections: _.filter(this.connections, function(c) { return c.socketId }) }; } diff --git a/package.json b/package.json index 1443e3a..7366e5a 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "hatchetapp.net", - "version": "0.0.1-71", + "version": "0.0.1-82", "subdomain": "hat", "domains": [ "hatchetapp.net", @@ -10,22 +10,17 @@ "start": "server.js" }, "engines": { - "node": "0.6.19" + "node": "0.8.x" }, "dependencies": { - "express": "2.5.10", + "express": "4.17.1", "express-cdn": "0.0.3", - "ejs": "0.7.1", + "ejs": "3.1.5", "gzippo": "0.1.7", - "socket.io": "~0.9.6", - "underscore": "1.3.3", - "sinon": "~1.3.4" + "socket.io": "~0.9.13", + "underscore": "1.3.3" }, "devDependencies": { - "socket.io-client": "*", - "chai": "~1.0.4", - "mocha": "*", - "sinon": "~1.3.4", - "sinon-chai": "~2.1.2" + "socket.io-client": "*" } } \ No newline at end of file diff --git a/resources/bg-mount.psd b/resources/bg-mount.psd new file mode 100644 index 0000000..95406cc Binary files /dev/null and b/resources/bg-mount.psd differ diff --git a/resources/vert-ribbing.psd b/resources/glyphicons.psd similarity index 51% rename from resources/vert-ribbing.psd rename to resources/glyphicons.psd index 70a2129..e178d99 100644 Binary files a/resources/vert-ribbing.psd and b/resources/glyphicons.psd differ diff --git a/resources/hatchet.ai b/resources/hatchet.ai deleted file mode 100644 index 2d5742a..0000000 --- a/resources/hatchet.ai +++ /dev/null @@ -1,1354 +0,0 @@ -%PDF-1.5 % -1 0 obj <>/OCGs[5 0 R 32 0 R 74 0 R 116 0 R 154 0 R]>>/Pages 3 0 R/Type/Catalog>> endobj 2 0 obj <>stream - - - - - application/pdf - - - hatchet - - - - - Adobe Illustrator CS5.1 - 2012-07-04T09:49:39+02:00 - 2012-07-05T12:35:45+02:00 - 2012-07-05T12:35:45+02:00 - - - - 256 - 256 - JPEG - /9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgBAAEAAwER AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE 1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp 0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo +DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A7dkW12KuxV2KuxV2KuxV 2KuxV2KqctxDCKyuE+Z3+7FUFNrluu0atIfH7I/rjbLhQcmt3bfYCoPYVP44LTwod7+9frM30Gn6 qYrSi0kjfaYn5knFK3FXYquWWRfsuw+RIxVWTUL1OkzH5nl+uuKKRMet3S/bVXH3H8MbXhRkOt2z 7SK0Z8eo/D+mG0cKNimilXlG4cexxYr8VdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdiq Hub+2t9nar/yLucUgJTc6xcyVEf7pPbdvvwMgECzMxJYkk9SdzilrFXYq7FXYq7FXYqyHy/5Tl1W 0muHcwp9m3alQzg7k/5I6YQGEp0lOpaXe6dcGC6j4N1VuqsPFTgZA2hMUuxVtXdGDISrDoQaHFUw ttZuI6CUeqvj0b78bQYprbXtvcD923xd0Ox+7CxIV8UOxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV bLLHEheRgqjqTiqTXmsSSVSCsafzftH+mBmAlpJJqdzil2KuxV2KuxV2KuxV2Kut7nSv0xpum319 DZSanOLe0EzqhkkpXgnI7segHckDqRiESNPZLe3htoI4IVCRRqFRR2AybjqOo6bZ6jbG3uk5odwf 2lPip7HFINPN9e8vXekT0f8AeWzn91OBsfY+ByJDdGVpTgZOxV2KtglSCDQjoRiqZ2esutEufiX/ AH4Oo+fjhtiYpukiSIHRgynoRixXYq7FXYq7FXYq7FXYq7FXYq7FXYqh7y9itUq27n7KDqcUgJBc 3c1y/KQ7fsqOg+WBmAo4q7FXYq7FXYq7FXYq7FUp80+aNH8s6PNquqy+nbxbIg3kkkP2Y417s1P4 nbFBNPkvzx531bzbrz6peMY0X4bK2U1WCIGqqDtU92bufoGTaCbfVv8AzjR/zkEfNEEPk3zTcFvM lvGRp+oSsK3sSb8HJpWdF79XAqfiqSofQuKqVzawXUDwToJIpBRlOKgvNfMfl2bSLiq1ks5CfSl8 P8lvf9eRIb4ytJsDJ2KuxV2Koi0vZrZ6oaqftIehxQQn9rdw3MfKM7j7SnqMLEhWxQ7FXYq7FXYq 7FXYq7FXYqhb+/S1T+aVvsr/ABOKQGPyyySuXkbkx6k4GazFXYq7FXYq7FXYq7FVGS6gjkEbtxYi vtiqU+bfOWh+VtIfU9UmCpuLeFKGSZ6VCRjv8+g74oJp8qefPPmsecdYa+vm9O2jqtlYqSY4Yz2H Tkx/abv8qATAaJStjWKFW0u7qzuobu0me3urd1lgniYo6SIeSujLQqykVBGKvvj/AJx8/Oi3/Mby yYNQkRPNWlqqapCAE9ZDsl1Go24v0cL9luwBWqr1fFVC9sre9tZLa4XnFIKEfqI9xikGnlutaRPp d89tLuv2opOzIeh/rkC3xNoDFLsVdirsVVIJ5YZBJGaMPx9jirIbK9juo6jZx9tPDCwIRGKHYq7F XYq7FXYq7FUPe3iWsXI7udkXxOKQGOyyvLI0jmrNuTgZrMVdirsVdirsVdirsVad1RC7bKoqcVeY fmD+aGkeWhIjEXesSCsVih+xUfC0rfsLTt1P44QGEpU+d/MPmTV/MOovf6pOZpm2ReiRpWoSNf2V H9p3yTUTaV4odirsVZF5A88az5I812PmPSXIntH/AHsBNEnhbaSGT/JdfuNCNwMVfo35R806T5r8 taf5h0mQyafqMQlhJpyU1KvG9K0aN1KN7jFU3xVJ/NGirqmmsFH+lQ1eA9ye6/7LAQyjKi8vIIJB FCOoyLe7FXYq7FXYqqQTyQSiSM0Yfj7YqyO0uo7mESJsejL3BwsCFbFDsVdirsVdiq2WVIo2kc0V RUnFWNXdy9zMZG6dFXwHhgbAFHFXYq7FXYq7FXYq7FVG9vbOxtZLu8nS2tYRylnlYIijxLGgGKvC PzI/P76ykmleUqpCfhl1Z1Ks3tAjCq/6zb+AHXJANUp9zxOWWWaV5ZnaSWQlpJHJZmY7kknck4Wt ZirsVdirsVdir6L/AOcQPzT/AEN5il8j6nNTTdbf1dMZiAsV8q0KVNNp0Wn+uqgD4jir7JxV2KvN vOml/UtWaVBSG7rIvgG/bH37/TkS3QNhIMDN2KuxV2KuxVEWN29tMHG6HZ18RighkiOroHU1VhUH CwbxV2KuxV2KpJrF56knoIfgjPxe7f2YGYCW4pdirsVdirsVdirsVed+efzt8q+WhJa2jjVtWWo+ rW7D0o2/4tmFVH+qtT40wgMTMB89+cfzA8z+bbn1dWuibdW5QWMVUgj/ANVKmp3+0xJ98lTSZEsb xQ7FXYq7FXYq7FXYqrWd3dWV3BeWkrQXVtIs1vPGSrpJGwZHVhuCrCoOKv0e/KTz7B578gaV5iUq LqaP0tRhSn7u7h+CZeILcQzDmoO/FhirMMVSHzrp/wBb0V5FFZbU+qvjx6P+G/0YCzgd3muRbnYq 7FXYq7FXYqmui3lG+rOdjvH8+4whiQnGLF2KuxVD39z9XtmcfbPwp8zikBjRJJqepwM3Yq7FXYq7 FXYqwfzj+cXkzyyJIXuf0hqSVX6jaEOwYdpH+wlD1qeXthpiZgPCPOv5zeb/ADP6lusv6M0t6j6l asQWU12ll2Z9jQjZf8nDTUZksCwsXYq7FXYq7FXYq7FXYq7FXYq+iv8AnDX8wG0vzbe+TbuSllrq GexBJot5bqSwUV4j1YQeR6kooxV9lYqtljSWJ43FUdSrDxBFDirx+8tntbua3f7ULsh/2JpkHJBU cVdirsVdirsVbVmVgymjA1B9xirJrS4FxbpKOp2YeBHXCwKtih2KpDrFz6lz6YPwRbf7I9cDMBAY pdirsVUbu8tLO3e5u547e3jFZJpWVEUeLMxAGKvNfNX/ADkF5P0rnDpQfWbtaj91+7twR4ysN/8A YKR74aYGYeM+bfzg87eZecM139RsH2NlZ1iQjpR2qZHr3BanthprMiWE4WLsVdirsVdirsVdirsV dirsVdirsVR+ga1faFrmn61p7BL3TbiK6tmIqPUhcOtR3FRuMVfpp5c12y8weX9N1yxNbTU7aK7g BpULMgcK1P2lrQ++KpjirzbzvaehrruBRbhFkHz+yfxXIlugdkgwM3Yq7FXYq7FXYqmWiXHCZoCf hk3X/WH9mIRIJ3hYKdxKIYXlP7AJ+ntirF2YsxYmpJqT7nA2NYq7FXYq+V/zy82Nrnna4tIZC1hp P+iRKD8JlU/vnp0rzJX5KMkGmZssG0rStS1fUrbTNMt3u7+8kWG2tohyd3Y0AAwsHo3mz/nGz81/ K/l1tf1DTopbKBDLfJazLNLbINy0qr1C/tFCwHU7Yq8uxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV 9r/84becG1b8urvy/M5a48u3RWIUFBa3nKWPfqT6om69qYq99xVhn5i24pZXAG/xxsfuI/jkS242 FYGx2KuxV2KuxV2Kro5GjkV1+0pBH0YqymN1kjV1+ywBH04WtAa5Nxt1jHWRt/kv9uJZRSPAydir sVUrtLh7SZLaQQ3LRssEzLzCOQQrFe9DvTFXxHq1hf6fql3Y6ghS+tpXjuVY1PNTRt+9fHvk3GLO PyC84aH5R/NTRta1yiaanrQy3JUt6BniaJZaDeilvi/ya4q+1vPv5sfl7oPky91a71axv7ea2kFn ZwzxzNeM6lVjjWNiWViaMw2A3JAxV+c2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KvcP8AnEHzQdI/ NhdLkYi31+0mtaFuKiaIfWI3I7mkTIv+tir7kxVjXn+MNosbd0nUj6VYYCzx83nmRbnYq7FXYq7F XYq7FU/0abnZ8T1jJX6OowsCgNbk5XYTsigfSd8BZRS/FLsVdirsVeJ/85B+QEuoF816en+lwKE1 OJerwqKLNTxj6N/k0/lwgtc49Xz/AJJqdirsVdirsVdirsVdirsVbALEKoqTsAOpOKsw0H8pvO2s KsiWX1K3bpNeEwj/AICjSfTxwWyESy6z/wCcebtkBvdajifukMDSD/gmeP8A4jjbLgTWD/nHzQlp 9Y1S6k339NY49vDcPvja8CLX8gvJoO93qDexlh/hCMFp4AqR/kH5JLqHuL/iSOVJYun/ACKxteAM l8ufkb5R8v6/p2uafdX/ANd0y4iurcSSxFC8LhwHAiUlTShFemNp8MPZh5714EGsR9in9uNr4YQ+ q+a9S1O0NrcJEIywaqKQaj5scbSIAJLgZOxV2KuxV2KuxV2KpnoUlJpI+zLX6VP9uIYyQl+/O9mP +UR9238MUhD4pdirTMqgliAB1JxVL7nVBusHX+c/wGKLS2WkoYSjmHBDhtwQeoNcUPnP8zvy3uvL uoyXunwPLoc9XR1BYW5J3jkI6Cp+EnqNuoyQLVKNMCwsXYq7FXYq7FXYqqQW89xMkFvG000hCxxR gszMegVRuTir0ryt+RmuX4S41uUaZbGh9BaPcMPl9lK+9T/k4LZiD1zy35D8r+XVB02yUXAFDdy/ vJj/ALNvs18FoMDMABkGBLsVbVWb7IJ+W+KVVbK6bpEfp2/Xiqqul3R68V+Z/pXFaTZAQihjUgCp 98Ut4q7FXYq7FXYq7FXYq7FXYqi9LfhfReBqv3jFBQ0jcpGbxJP3nFK3FVK6n9CEyUqRsB7nFUmn uZpjV227KOgxQp4odirRAIIIqDsQcVeZ+ffya0zVIpL7y/GljqYBY2y/DBMetAOkbHsR8Pj44QWJ i8HurW5tLmS2uomhuIWKSxOCrKw6gg5JqUsVdirsVZj5G/LLW/NLi4H+h6SrUe9kFeVOoiXbmffo PHtgtkI2968reR/LvlmDhptsPXIpLeSUed/m1Nh7LQYGwCmRRW80v92hb37ffgZIuPSZj9twvsNz itIhNLtx9osx+dB+GKaV0tLZPsxr9Ir+vFVUAAUGwxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxVVtG 43UJ8HX9eKlSxV2Kpfq7njGnYkkn5YoKW4odirsVdirsVYD+aX5cxeZLBr+wjVdctVrGRt66D/dT H+b+Qn5dDUEFjKNvnV0dHZHUq6khlIoQRsQQck1Mo8lfld5+86yFfLWjT30SnjJd0EVshFKhp5Sk fLevHlX2xV7V5Z/5wn81TyRy+Y9dsrGGoZ4LRJLqQitShLfV1UnpUFsVZ7LoU2lXJ0hYBCbOkKxI KIqKKLx/yeNKZFvCNt9MjWjTfG38vYf1wMqRwAAoBQDoMVdirsVdirsVdirsVdirsVdirsVdirsV dirsVdirsVXRf3qf6w/Xiq3FXYqsmhSaMo42PfwOKpLcW0kD8W6H7LdjihSxQ7FXYq7FXYqxvT/y M8pebPzJs7/VJzb6dLyk1CwSqfW50pwQSLTh6n7dNzTajNXJAsJx6vqbTtN0/TLGCw062jtLG2QR 29tAgjjRB0VVWgAwtaIxVjfnHy6L+2+uWyVvIB8QA3kQdvmO2AhnCVPO8i3OxV2KuxV2KuxV2Kux V2KuxV2KuxV2KuxV2KuxV2KuxVfF/ep/rD9eKtSrxkdfBiPuOKrcVdiqyWKOVCjioOKpVPps6MeA 5p2I6/diikKyspowIPgdsVdih2KuxVtHeN1dGKupDKymhBG4IIwq9q8m+Ym1jS0+s0W/hAE69OQ7 SAf5Xf3wgtUo0n+Fi7FWBedPLv1aU6lar/o8h/foP2HP7Xyb9eRIbYS6MUwNjsVdirsVdirsVdir sVdirsVdirsVdirsVdirsVdiqraLyuoR4uv68VK/UE4Xsw8WJ/4Lf+OKAh8UuxV2KuxVZLDFKvGR Qw7eI+WKpZdac8QLx/Gg6juMUUg8UOxVwNDXFWSaBr0trdx3UB4zx/bj7Mp6j5HFJFvXtOv7e/s4 7q3NY5BWh6g91PuMm0EUiMULZYo5onilUPHICrqehB2IxV5h5k0GTSb3itWtZatBIfDup9xkSG+M rSjAydirsVdirsVdirsVdirsVdirsVdirsVdirsVdiqL0pOV9H4LVvuGKCra3Hxulfs6/iNsSsUu xS7FXYq7FXYq7FUBe6eHrJCKN+0nj8sUUlhBBodiOoxQ7FW1ZkYMpow6EYpZp5H83CxuxbXTcbac gSeAboHH/G3thDGQt6qCCKjcHock0uxVCappltqVk9rcD4W3Vu6sOjD5YpBp5ZqWnXOnXj2twtHT oR0ZT0YexyDeDaFxS7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYqmmhR1lkk/lUKPpNf4YQxkidb h52yyDrG2/yO39MSsUiwMnYq7FXYq7FXYq7FUJeWKzDmnwy+PY/PFUpdGRirCjDqDihrFDsVenfl x5uN1GNGvnrcRj/RJD1dAKlD7qOnt8skGuY6s8wsHYqlHmTQItWs6LRbuIEwSf8AGp9jgIZRlTzG aGWGV4pVKSRkq6nqCOoyLesxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2Ksg0eH07MMeshLfR0GFg UVNEssTxt0cEYoYs6sjlGFGUkEe4wNjWKuxV2KuxV2KuxV2KqF1aJcLvs4+y39cVSaWKSJyjihGK FuKF8E80EyTwuY5YmDxuuxDA1BGFXtnlLzJDrulrPst3FRLuIdmp9oD+Vuo+7tkg0yFJ3ih2KsX8 4+W/rkRv7RK3cY/eoOsiDv8A6y/iPowENkJU8/yLa7FXYq7FXYq7FXYq7FXYq7FXYq7FXYqvhjaW VY16uQB9OKspRAiKi/ZUAD5DC1t4qkes23p3AlA+GXr/AKw64CziUuxS7FXYq7FXYq7FXYq7FVK4 to504v1/ZbuMVSa4t5IH4uPk3Y4oU8UJr5a1+40PVI7yOrRH4biH+eM9R8x1GFBFvb7O8t7y1iur ZxJBMoeNx3ByTSrYq7FWCec/Lf1d21K0X9w5/wBIjH7DH9oexyJDbCXRiWBsdirsVdirsVdirsVd irsVdirsVdiqaaJbcpGnYbJ8K/M9fwwhjIpzixdiqhe2wuLdo/2uqH3HTFILGiCpIIoRsRgZtYq7 FXYq7FXYq7FXYq7FVk0McqFHFQfvHyxVJrq1kt3od0P2WxQo4oZ7+WHmNobltFuG/cz1e0J/ZkAq y/Jhv8/nkgwmOr03C1uxVivnzVnt7SOwiaj3NWlI6+mO3+yP6sBbMYYDkW12KuxV2KuxV2KuxV2K uxV2KuxVciM7qiirMaAfPFWTW0CwQJEv7I3Pie5wsCq4odirsVSbWbPi/wBZQfC20nsfH6cSyiUr wMnYq7FXYq7FXYq7FXYq7FVskaSIUcVU9RiqT3lm8DVG8Z6N4exxQpW88tvPHPCxSWJg8bjqGU1B woe+aRqMepaZbX0ey3EYcqN6N+0v0NUZJpIReKGA/mFbyrqdvcEfunhCK3+UjMSP+GGRLbj5MVwN jsVdirsVdirsVdirsVdirsVdiqb6LZ/8fLj2jH6zhDGRTbFi7FXYq7FVsiJIjI4qrChGKscvbR7a Yod1O6N4jAzBQ+KXYq7FXYq7FXYq7FXYq7FWnRXUowqp6jFUkurdoJSp3U7qfEYoem/lVqJm0e4s WNWtJeSDwSUVA/4JWyQaphm+FghtR0601C1a2uk5xtuD0KnsynscUg08/wDMXlSXSYxcLOstszhF r8LgkEgU6HYZEhtjO0gwM3Yq7FXYq7FXYq7FXYq7FUVYWbXM1Oka7u3t4fTiglkSqqqFUUUCgHth YN4q7FXYq7FXYqo3drHcwmNtj1VvA4pBY5PBJDKY5BRh+PuMDNTxV2KuxV2KuxV2KuxV2KuxVD31 v60BAHxruv8ATFUz/LLURa+YxbsaJeRtFTtzX41P/CkfThDXMbPXck1OxVj3nm0luND5xiv1eRZX A3+EAqT9HKuAs4Hd5xkW52KuxV2KuxV2KuxV2KqttbSXEojjG56nsB44qSyO2t47eIRp0HU9yfHC wKrih2KuxV2KuxV2KuxVD3tlHdR0Ozj7D+GKQWPTwSwSGOQUYfj8sDNTxV2KuxV2KuxV2KuxV2Ku xVLJHl0/UobuDZo3WaI9uSmtPvxQQ90sL2G+soLyE1iuEWRPYMK0PuMm45V8VcQCKHcHqMVYrq/k SznZprGT6q5qTERWOvt3X8cFNgmwE9fH3yLa7FXYq7FXYq7FVW2tpbiQRxip7nsB74qSyG0tIraL gm7H7TdycLAlXxQ7FXYq7FXYq7FXYq7FXYqo3VpDcx8JBuPssOoOKQUgu7Ga2ejiqH7LjocDIFD4 pdirsVdirsVdirsVdiqjdW4nhKftDdT74qy78rtd/dy6HcGkkRMtqD4E/vE+g/F9JyQaph6Bha3Y qp3MbSW8saGjOjKp8CRQYqHjjKyMVYFWU0YHqCMg5LWKuxV2KuxVFWdhNctt8MY+056fR44oJT63 torePhGKDue5PvhY2q4odirsVdirsVdirsVdirsVdirsVadEdSrgMp6g4qlF5orCr224/wB9nr9B xpkClbKysVYEMOoOxwMmsVdirsVdirsVdirsVUq3Nrdw6hZNwu7dg6+9Ox+jbFBFvV/LfmOy12wF xAeE6UFzbn7Ub/8ANJ7HJtBFJtih2KsJ89aRpsCrfxsYrqd6NEKcX2qzU7HxORLbAnkw3A2OxVci O7BUUsx6Ab4qmtnovR7n6Ix/E4aYmSaqqqoVQAo6AdMWLeKuxV2KuxV2KuxV2KuxV2KuxV2KuxV2 KuxVRuLS3uBSVKnsw2I+nFNpVcaJMlTA3qL/ACnZv6YKZCSXyRyRtxdSreBFMUrcVdirsVdirsVd irdtLc2d2t5YzNbXS7c13DDwdTswxQRbNdL/ADDjZAmqWzRyjYzQfHGfcqSHX5fFkrazjTC48+aD HGWhaWd+yKjL95fjjaOAsI1nWbvVrs3FxRVA4xQqSVRfAeJ8T3yJLbGNIOOGWVuMalz4AVxSmNto kjUaduA/lXc/f0w0xMk0gtoIF4xIF8T3PzOKLVcUOxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2Ku xV2KuxVa8cci8XUMvgRXFUHNo1m+61jP+SdvuOKbQcmhTD+7kVh71U/xwUniQ76XfJ/uqo/ySDim 1FrS6XrC4/2JxTaz0pf5G+44q36Uv8jfccVXLaXTdIXP+xOK2rJpV83+6+I/yiBii0THoUp/vJFX 2UE/rphpHEjIdHs492BkP+UdvuGKLRiIiDiihV8AKDFDeKuxV2KuxV2KuxV2KuxV2KuxV//Z - - - - - - proof:pdf - uuid:65E6390686CF11DBA6E2D887CEACB407 - xmp.did:8D24E19C652068118C14FFB8992B3B41 - uuid:3946268a-4ffc-4c43-b93b-48817dc3077d - - xmp.iid:8C24E19C652068118C14FFB8992B3B41 - xmp.did:8C24E19C652068118C14FFB8992B3B41 - uuid:65E6390686CF11DBA6E2D887CEACB407 - proof:pdf - - - - - saved - xmp.iid:F97F1174072068118C14FFB8992B3B41 - 2012-07-03T21:46:09+02:00 - Adobe Illustrator CS5.1 - / - - - saved - xmp.iid:FA7F1174072068118C14FFB8992B3B41 - 2012-07-03T21:47:19+02:00 - Adobe Illustrator CS5.1 - / - - - saved - xmp.iid:FB7F1174072068118C14FFB8992B3B41 - 2012-07-03T21:47:54+02:00 - Adobe Illustrator CS5.1 - / - - - saved - xmp.iid:FC7F1174072068118C14FFB8992B3B41 - 2012-07-03T21:52:01+02:00 - Adobe Illustrator CS5.1 - / - - - saved - xmp.iid:FD7F1174072068118C14FFB8992B3B41 - 2012-07-03T22:25:22+02:00 - Adobe Illustrator CS5.1 - / - - - saved - xmp.iid:FE7F1174072068118C14FFB8992B3B41 - 2012-07-03T22:44:52+02:00 - Adobe Illustrator CS5.1 - / - - - saved - xmp.iid:FF7F1174072068118C14FFB8992B3B41 - 2012-07-04T08:25:43+02:00 - Adobe Illustrator CS5.1 - / - - - saved - xmp.iid:00801174072068118C14FFB8992B3B41 - 2012-07-04T08:26:23+02:00 - Adobe Illustrator CS5.1 - / - - - saved - xmp.iid:8C24E19C652068118C14FFB8992B3B41 - 2012-07-04T08:27:02+02:00 - Adobe Illustrator CS5.1 - / - - - saved - xmp.iid:8D24E19C652068118C14FFB8992B3B41 - 2012-07-04T09:49:36+02:00 - Adobe Illustrator CS5.1 - / - - - - - - Web - Document - - - 1 - True - False - - 120.000000 - 120.000000 - Pixels - - - - Cyan - Magenta - Yellow - Black - - - - - - Default Swatch Group - 0 - - - - White - RGB - PROCESS - 255 - 255 - 255 - - - Black - RGB - PROCESS - 0 - 0 - 0 - - - RGB Red - RGB - PROCESS - 255 - 0 - 0 - - - RGB Yellow - RGB - PROCESS - 255 - 255 - 0 - - - RGB Green - RGB - PROCESS - 0 - 255 - 0 - - - RGB Cyan - RGB - PROCESS - 0 - 255 - 255 - - - RGB Blue - RGB - PROCESS - 0 - 0 - 255 - - - RGB Magenta - RGB - PROCESS - 255 - 0 - 255 - - - R=193 G=39 B=45 - RGB - PROCESS - 193 - 39 - 45 - - - R=237 G=28 B=36 - RGB - PROCESS - 237 - 28 - 36 - - - R=241 G=90 B=36 - RGB - PROCESS - 241 - 90 - 36 - - - R=247 G=147 B=30 - RGB - PROCESS - 247 - 147 - 30 - - - R=251 G=176 B=59 - RGB - PROCESS - 251 - 176 - 59 - - - R=252 G=238 B=33 - RGB - PROCESS - 252 - 238 - 33 - - - R=217 G=224 B=33 - RGB - PROCESS - 217 - 224 - 33 - - - R=140 G=198 B=63 - RGB - PROCESS - 140 - 198 - 63 - - - R=57 G=181 B=74 - RGB - PROCESS - 57 - 181 - 74 - - - R=0 G=146 B=69 - RGB - PROCESS - 0 - 146 - 69 - - - R=0 G=104 B=55 - RGB - PROCESS - 0 - 104 - 55 - - - R=34 G=181 B=115 - RGB - PROCESS - 34 - 181 - 115 - - - R=0 G=169 B=157 - RGB - PROCESS - 0 - 169 - 157 - - - R=41 G=171 B=226 - RGB - PROCESS - 41 - 171 - 226 - - - R=0 G=113 B=188 - RGB - PROCESS - 0 - 113 - 188 - - - R=46 G=49 B=146 - RGB - PROCESS - 46 - 49 - 146 - - - R=27 G=20 B=100 - RGB - PROCESS - 27 - 20 - 100 - - - R=102 G=45 B=145 - RGB - PROCESS - 102 - 45 - 145 - - - R=147 G=39 B=143 - RGB - PROCESS - 147 - 39 - 143 - - - R=158 G=0 B=93 - RGB - PROCESS - 158 - 0 - 93 - - - R=212 G=20 B=90 - RGB - PROCESS - 212 - 20 - 90 - - - R=237 G=30 B=121 - RGB - PROCESS - 237 - 30 - 121 - - - R=199 G=178 B=153 - RGB - PROCESS - 199 - 178 - 153 - - - R=153 G=134 B=117 - RGB - PROCESS - 153 - 134 - 117 - - - R=115 G=99 B=87 - RGB - PROCESS - 115 - 99 - 87 - - - R=83 G=71 B=65 - RGB - PROCESS - 83 - 71 - 65 - - - R=198 G=156 B=109 - RGB - PROCESS - 198 - 156 - 109 - - - R=166 G=124 B=82 - RGB - PROCESS - 166 - 124 - 82 - - - R=140 G=98 B=57 - RGB - PROCESS - 140 - 98 - 57 - - - R=117 G=76 B=36 - RGB - PROCESS - 117 - 76 - 36 - - - R=96 G=56 B=19 - RGB - PROCESS - 96 - 56 - 19 - - - R=66 G=33 B=11 - RGB - PROCESS - 66 - 33 - 11 - - - - - - Grays - 1 - - - - R=0 G=0 B=0 - RGB - PROCESS - 0 - 0 - 0 - - - R=26 G=26 B=26 - RGB - PROCESS - 26 - 26 - 26 - - - R=51 G=51 B=51 - RGB - PROCESS - 51 - 51 - 51 - - - R=77 G=77 B=77 - RGB - PROCESS - 77 - 77 - 77 - - - R=102 G=102 B=102 - RGB - PROCESS - 102 - 102 - 102 - - - R=128 G=128 B=128 - RGB - PROCESS - 128 - 128 - 128 - - - R=153 G=153 B=153 - RGB - PROCESS - 153 - 153 - 153 - - - R=179 G=179 B=179 - RGB - PROCESS - 179 - 179 - 179 - - - R=204 G=204 B=204 - RGB - PROCESS - 204 - 204 - 204 - - - R=230 G=230 B=230 - RGB - PROCESS - 230 - 230 - 230 - - - R=242 G=242 B=242 - RGB - PROCESS - 242 - 242 - 242 - - - - - - Web Color Group - 1 - - - - R=63 G=169 B=245 - RGB - PROCESS - 63 - 169 - 245 - - - R=122 G=201 B=67 - RGB - PROCESS - 122 - 201 - 67 - - - R=255 G=147 B=30 - RGB - PROCESS - 255 - 147 - 30 - - - R=255 G=29 B=37 - RGB - PROCESS - 255 - 29 - 37 - - - R=255 G=123 B=172 - RGB - PROCESS - 255 - 123 - 172 - - - R=189 G=204 B=212 - RGB - PROCESS - 189 - 204 - 212 - - - - - - - - - Adobe PDF library 9.90 - - - - - - - - - - - - - - - - - - - - - - - - - endstream endobj 3 0 obj <> endobj 7 0 obj <>/Resources<>/ExtGState<>/Properties<>/XObject<>>>/Thumb 174 0 R/TrimBox[0.0 0.0 120.0 120.0]/Type/Page>> endobj 156 0 obj <>stream -HKn7)xH6IVF`d7G>_5gI`g/~wS}8)__;~9O)xr._\swzx -;m*O3ǕbC ǩÌ7\jw |fq=Q5Jf}E%'z㜕E c#p,ulE{cY-B~ b==5Lj9q -Ya<)9%2Zp9ZMd!2Ae3Z[X]fł8hJPIXHq,cE -k dZ|ܪ/Pq2Lw+}=T&l{ -d -ĐƁ\Y.aD@[jTv d[fDK'`bk:lox]%./ց夸OU*}ry - a3f"ٔSR,M7A1-_uQqEX ٰ6m 5v@򿽓bFd .9C4uqXF9kW*9Q!҈bnfK^H -JB ŏ/4a3&TJ FhFI=;;GiA -:+fCt0=:hH0%kŧT^1ԱoE -u-/Ϗo'ͬ֟]Ugi4 zlCL$Zg@uߞOD,5lL 䫴³]I4Z;DT2BR$ͨ*ʈk1Xw>DYBA%Q/³"iҨmZxMז;eN)`.dXq$'JHp8"/?{ud@xRrnX9;׽Oű].x2HyEVn==M"l\䖳H βͪ'%n]l$$B E -KR~%9`ɼo endstream endobj 157 0 obj <> endobj 174 0 obj <>stream -8;THh_%?i*#XYZjh^HJ``H\_["oPuE1@YZB=ADe1]f@>V6rctlUm4S*N+\hF?e<&Y -o&7K4?ZEW_$G;U[G^&bg endstream endobj 176 0 obj [/Indexed/DeviceRGB 255 177 0 R] endobj 177 0 obj <>stream -8;X]O>EqN@%''O_@%e@?J;%+8(9e>X=MR6S?i^YgA3=].HDXF.R$lIL@"pJ+EP(%0 -b]6ajmNZn*!='OQZeQ^Y*,=]?C.B+\Ulg9dhD*"iC[;*=3`oP1[!S^)?1)IZ4dup` -E1r!/,*0[*9.aFIR2&b-C#soRZ7Dl%MLY\.?d>Mn -6%Q2oYfNRF$$+ON<+]RUJmC0InDZ4OTs0S!saG>GGKUlQ*Q?45:CI&4J'_2j$XKrcYp0n+Xl_nU*O( -l[$6Nn+Z_Nq0]s7hs]`XX1nZ8&94a\~> endstream endobj 163 0 obj <>/ExtGState<>>>/Subtype/Form>>stream -/CS0 cs 0.702 0.631 0.631 scn -/GS0 gs -120 0 -120 120 re -f - endstream endobj 164 0 obj <>/ExtGState<>>>/Subtype/Form>>stream -/CS0 cs 0.702 0.631 0.631 scn -/GS0 gs -q 1 0 0 1 119.75 60.125 cm -0 0 m -0 -33.068 -26.807 -59.875 -59.875 -59.875 c --92.943 -59.875 -119.75 -33.068 -119.75 0 c --119.75 33.068 -92.943 59.875 -59.875 59.875 c --26.807 59.875 0 33.068 0 0 c -f -Q - endstream endobj 165 0 obj <>/ExtGState<>>>/Subtype/Form>>stream -/CS0 cs 0 0 0 scn -/GS0 gs -q 1 0 0 1 50.6226 102.46 cm -0 0 m --0.476 -0.86 -2.821 -5.553 y --3.095 -5.998 -3.386 -6.439 -3.679 -6.879 c --1.253 -5.248 1.146 -3.478 3.432 -1.578 c -1.376 -0.562 0 0 y -f -Q - endstream endobj 166 0 obj <>/ExtGState<>>>/Subtype/Form>>stream -/CS0 cs 0 0 0 scn -/GS0 gs -q 1 0 0 1 68.4536 90.8022 cm -0 0 m --6.125 6.878 -17.831 11.658 y --18.307 10.797 -20.652 6.105 y --31.574 -11.626 -57.934 -25.272 y --59.257 -30.11 l --56.259 -33.703 -51.842 -37.15 y --47.504 -38.155 -46.89 -38.859 -44.187 -40.454 c --43.52 -40.847 -41.613 -42.42 -39.118 -44.566 c --31.498 -51.123 -18.388 -63.035 y --11.109 -69.947 -12.887 -73.759 -5.787 -81.639 c --2.051 -86.278 7.515 -89.282 9.242 -81.277 c -6.53 -80.747 5.137 -78.791 5.639 -75.387 c -0.306 -74.774 -0.694 -72.655 -0.475 -69.691 c --9.737 -68.586 -5.038 -61.217 y --15.392 -52.92 l --29.801 -41.368 -31.13 -39.348 v --31.133 -39.345 -31.136 -39.34 -31.138 -39.337 c --32.423 -37.348 -19.552 -29.118 -15.194 -27.025 c --11.658 -25.327 -2.579 -23.671 3.812 -22.656 c -10.638 -21.654 l -10.101 -17.326 6.125 -6.878 0 0 c -f -Q - endstream endobj 167 0 obj <>/ExtGState<>>>/Subtype/Form>>stream -/CS0 cs 0.702 0.631 0.631 scn -/GS0 gs -q 1 0 0 1 88.8242 73.6436 cm -0 0 m --6.898 0.151 l --8.148 0.163 -9.502 0.166 -10.898 0.156 c --10.279 -1.709 -9.877 -3.329 -9.732 -4.495 c --16.559 -5.498 l --22.95 -6.512 -32.029 -8.168 -35.564 -9.866 c --37.151 -10.628 -39.868 -12.206 -42.618 -13.998 c --39.098 -19.002 -30.832 -29.168 y --21.988 -40.038 l --27.839 -47.173 -18.886 -50.049 v --19.591 -53.222 -18.955 -55.701 -13.796 -57.331 c --14.68 -60.34 -14.073 -62.479 -12.343 -63.727 c --11.971 -63.891 -11.575 -64.031 -11.129 -64.119 c --12.856 -72.123 -22.422 -69.119 -26.158 -64.48 c --33.257 -56.601 -31.48 -52.789 -38.759 -45.876 c --51.868 -33.964 -59.489 -27.407 v --61.983 -25.262 -63.891 -23.688 -64.557 -23.295 c --67.26 -21.701 -67.875 -20.997 -72.212 -19.991 c --76.629 -16.544 -79.628 -12.952 v --78.304 -8.113 l --73.54 -5.643 -67.229 -1.45 v --68.274 0.036 -69.411 1.777 -70.333 3.507 c --68.229 8.511 l --54.738 13.294 -41.881 21.938 v --41.588 22.377 -41.297 22.818 -41.022 23.264 c --38.678 27.956 -38.202 28.816 v --36.825 28.254 -34.77 27.239 v --31.64 29.839 -28.727 32.682 -26.282 35.759 c --23.194 40.419 -22.583 41.266 v --11.826 33.963 -6.92 25.398 v --2.014 16.833 0.185 4.789 0 0 c --28.949 46.356 m --62.018 46.356 -88.824 19.55 -88.824 -13.519 c --88.824 -46.587 -62.018 -73.394 -28.949 -73.394 c -4.119 -73.394 30.926 -46.587 30.926 -13.519 c -30.926 19.55 4.119 46.356 -28.949 46.356 c -f -Q - endstream endobj 168 0 obj <>/ExtGState<>>>/Subtype/Form>>stream -/CS0 cs 0.702 0.631 0.631 scn -/GS0 gs -q 1 0 0 1 37.3154 51.4653 cm -0 0 m -0.002 -0.003 0.005 -0.008 0.008 -0.011 c -0.756 -1.147 5.642 -5.299 9.773 -8.714 c -7.186 -5.15 4.169 -1.021 1.476 2.602 c -0.294 1.458 -0.334 0.517 0 0 c -f -Q - endstream endobj 169 0 obj <>/ExtGState<>>>/Subtype/Form>>stream -/CS0 cs 0.702 0.631 0.631 scn -/GS0 gs -q 1 0 0 1 44.7026 62.0522 cm -0 0 m -0.001 -0.003 0.004 -0.009 0.006 -0.013 c -0.182 -0.451 0.73 -1.306 1.504 -2.406 c -4.254 -0.614 6.97 0.963 8.557 1.725 c -12.093 3.423 21.172 5.079 27.563 6.094 c -34.389 7.096 l -34.245 8.263 33.842 9.882 33.223 11.747 c -27.39 11.705 20.797 11.421 17.757 10.454 c -13.114 8.975 -0.939 2.389 0 0 c -f -Q - endstream endobj 170 0 obj <>/ExtGState<>>>/Subtype/Form>>stream -/CS0 cs 0 0 0 scn -/GS0 gs -q 1 0 0 1 44.7026 62.0522 cm -0 0 m -0.001 -0.003 0.004 -0.009 0.006 -0.013 c -0.182 -0.451 0.73 -1.306 1.504 -2.406 c -4.254 -0.614 6.97 0.963 8.557 1.725 c -12.093 3.423 21.172 5.079 27.563 6.094 c -34.389 7.096 l -34.245 8.263 33.842 9.882 33.223 11.747 c -27.39 11.705 20.797 11.421 17.757 10.454 c -13.114 8.975 -0.939 2.389 0 0 c -f -Q - endstream endobj 171 0 obj <>/ExtGState<>>>/Subtype/Form>>stream -/CS0 cs 0.702 0.631 0.631 scn -/GS0 gs -q 1 0 0 1 62.7275 11.6084 cm -0 0 m --5.703 9.827 -3.321 13.636 -9.359 22.447 c --12.097 26.264 -15.639 31.143 v --19.771 34.558 -24.656 38.71 -25.404 39.846 c --25.407 39.849 -25.41 39.854 -25.412 39.857 c --25.746 40.374 -25.118 41.315 -23.936 42.459 c --24.934 43.801 -25.888 45.075 -26.758 46.223 c --28.864 49.001 -30.486 51.052 -31.079 51.599 c --33.481 53.817 -33.972 54.692 -38.083 56.567 c --39.495 58.26 -41.132 60.585 v --47.443 56.392 -52.208 53.922 y --53.531 49.083 l --50.533 45.491 -46.116 42.044 y --41.778 41.039 -41.164 40.334 -38.46 38.74 c --37.794 38.347 -35.887 36.773 -33.392 34.628 c --25.771 28.071 -12.662 16.159 y --5.383 9.247 -7.161 5.435 -0.061 -2.445 c -3.675 -7.084 13.241 -10.088 14.968 -2.083 c -14.522 -1.996 14.126 -1.856 13.754 -1.691 c -14.093 -1.936 14.458 -2.158 14.882 -2.333 c -11.858 -10.695 2.919 -5.706 0 0 c -f -Q - endstream endobj 172 0 obj <>/ExtGState<>>>/Subtype/Form>>stream -/CS0 cs 0 0 0 scn -/GS0 gs -q 1 0 0 1 62.7275 11.6084 cm -0 0 m --5.703 9.827 -3.321 13.636 -9.359 22.447 c --12.097 26.264 -15.639 31.143 v --19.771 34.558 -24.656 38.71 -25.404 39.846 c --25.407 39.849 -25.41 39.854 -25.412 39.857 c --25.746 40.374 -25.118 41.315 -23.936 42.459 c --24.934 43.801 -25.888 45.075 -26.758 46.223 c --28.864 49.001 -30.486 51.052 -31.079 51.599 c --33.481 53.817 -33.972 54.692 -38.083 56.567 c --39.495 58.26 -41.132 60.585 v --47.443 56.392 -52.208 53.922 y --53.531 49.083 l --50.533 45.491 -46.116 42.044 y --41.778 41.039 -41.164 40.334 -38.46 38.74 c --37.794 38.347 -35.887 36.773 -33.392 34.628 c --25.771 28.071 -12.662 16.159 y --5.383 9.247 -7.161 5.435 -0.061 -2.445 c -3.675 -7.084 13.241 -10.088 14.968 -2.083 c -14.522 -1.996 14.126 -1.856 13.754 -1.691 c -14.093 -1.936 14.458 -2.158 14.882 -2.333 c -11.858 -10.695 2.919 -5.706 0 0 c -f -Q - endstream endobj 173 0 obj <>/ExtGState<>>>/Subtype/Form>>stream -/CS0 cs 0.702 0.631 0.631 scn -/GS0 gs -q 1 0 0 1 50.6226 102.46 cm -0 0 m --0.476 -0.86 -2.821 -5.553 y --3.095 -5.998 -3.386 -6.439 -3.679 -6.879 c --1.253 -5.248 1.146 -3.478 3.432 -1.578 c -1.376 -0.562 0 0 y -f -Q - endstream endobj 188 0 obj <> endobj 162 0 obj <> endobj 159 0 obj [/ICCBased 189 0 R] endobj 189 0 obj <>stream -HyTSwoɞc [5laQIBHADED2mtFOE.c}08׎8GNg9w߽'0 ֠Jb  - 2y.-;!KZ ^i"L0- @8(r;q7Ly&Qq4j|9 -V)gB0iW8#8wթ8_٥ʨQQj@&A)/g>'Kt;\ ӥ$պFZUn(4T%)뫔0C&Zi8bxEB;Pӓ̹A om?W= -x-[0}y)7ta>jT7@tܛ`q2ʀ&6ZLĄ?_yxg)˔zçLU*uSkSeO4?׸c. R ߁-25 S>ӣVd`rn~Y&+`;A4 A9=-tl`;~p Gp| [`L`< "A YA+Cb(R,*T2B- -ꇆnQt}MA0alSx k&^>0|>_',G!"F$H:R!zFQd?r 9\A&G rQ hE]a4zBgE#H *B=0HIpp0MxJ$D1D, VĭKĻYdE"EI2EBGt4MzNr!YK ?%_&#(0J:EAiQ(()ӔWT6U@P+!~mD eԴ!hӦh/']B/ҏӿ?a0nhF!X8܌kc&5S6lIa2cKMA!E#ƒdV(kel }}Cq9 -N')].uJr - wG xR^[oƜchg`>b$*~ :Eb~,m,-ݖ,Y¬*6X[ݱF=3뭷Y~dó ti zf6~`{v.Ng#{}}jc1X6fm;'_9 r:8q:˜O:ϸ8uJqnv=MmR 4 -n3ܣkGݯz=[==<=GTB(/S,]6*-W:#7*e^YDY}UjAyT`#D="b{ų+ʯ:!kJ4Gmt}uC%K7YVfFY .=b?SƕƩȺy چ k5%4m7lqlioZlG+Zz͹mzy]?uuw|"űNwW&e֥ﺱ*|j5kyݭǯg^ykEklD_p߶7Dmo꿻1ml{Mś nLl<9O[$h՛BdҞ@iءG&vVǥ8nRĩ7u\ЭD-u`ֲK³8%yhYѹJº;.! -zpg_XQKFAǿ=ȼ:ɹ8ʷ6˶5̵5͵6ζ7ϸ9к<Ѿ?DINU\dlvۀ܊ݖޢ)߯6DScs 2F[p(@Xr4Pm8Ww)Km endstream endobj 187 0 obj <> endobj 186 0 obj <> endobj 185 0 obj <> endobj 184 0 obj <> endobj 183 0 obj <> endobj 182 0 obj <> endobj 181 0 obj <> endobj 180 0 obj <> endobj 179 0 obj <> endobj 178 0 obj <> endobj 154 0 obj <> endobj 190 0 obj [/View/Design] endobj 191 0 obj <>>> endobj 160 0 obj <> endobj 161 0 obj <> endobj 158 0 obj <> endobj 192 0 obj <> endobj 193 0 obj <>stream -%!PS-Adobe-3.0 %%Creator: Adobe Illustrator(R) 15.0 %%AI8_CreatorVersion: 15.1.0 %%For: (Rich Archer) () %%Title: (hatchet.ai) %%CreationDate: 05/07/2012 12:35 %%Canvassize: 16383 %%BoundingBox: 140 -260 260 -140 %%HiResBoundingBox: 140 -260 260 -140 %%DocumentProcessColors: Cyan Magenta Yellow Black %AI5_FileFormat 11.0 %AI12_BuildNumber: 39 %AI3_ColorUsage: Color %AI7_ImageSettings: 0 %%RGBProcessColor: 0 0 0 ([Registration]) %AI3_Cropmarks: 140 -260 260 -140 %AI3_TemplateBox: 400.5 -300.5 400.5 -300.5 %AI3_TileBox: -79.5 -580 479.5 203 %AI3_DocumentPreview: None %AI5_ArtSize: 14400 14400 %AI5_RulerUnits: 6 %AI9_ColorModel: 1 %AI5_ArtFlags: 0 0 0 1 0 0 1 0 0 %AI5_TargetResolution: 800 %AI5_NumLayers: 1 %AI9_OpenToView: 110 -133 6 1027 802 18 0 0 296 173 0 0 0 1 1 0 1 1 0 1 %AI5_OpenViewLayers: 7 %%PageOrigin:0 -600 %AI7_GridSettings: 72 8 72 8 1 0 0.8 0.8 0.8 0.9 0.9 0.9 %AI9_Flatten: 1 %AI12_CMSettings: 00.MS %%EndComments endstream endobj 194 0 obj <>stream -%%BoundingBox: 140 -260 260 -140 %%HiResBoundingBox: 140 -260 260 -140 %AI7_Thumbnail: 128 128 8 %%BeginData: 27450 Hex Bytes %0000330000660000990000CC0033000033330033660033990033CC0033FF %0066000066330066660066990066CC0066FF009900009933009966009999 %0099CC0099FF00CC0000CC3300CC6600CC9900CCCC00CCFF00FF3300FF66 %00FF9900FFCC3300003300333300663300993300CC3300FF333300333333 %3333663333993333CC3333FF3366003366333366663366993366CC3366FF %3399003399333399663399993399CC3399FF33CC0033CC3333CC6633CC99 %33CCCC33CCFF33FF0033FF3333FF6633FF9933FFCC33FFFF660000660033 %6600666600996600CC6600FF6633006633336633666633996633CC6633FF %6666006666336666666666996666CC6666FF669900669933669966669999 %6699CC6699FF66CC0066CC3366CC6666CC9966CCCC66CCFF66FF0066FF33 %66FF6666FF9966FFCC66FFFF9900009900339900669900999900CC9900FF %9933009933339933669933999933CC9933FF996600996633996666996699 %9966CC9966FF9999009999339999669999999999CC9999FF99CC0099CC33 %99CC6699CC9999CCCC99CCFF99FF0099FF3399FF6699FF9999FFCC99FFFF %CC0000CC0033CC0066CC0099CC00CCCC00FFCC3300CC3333CC3366CC3399 %CC33CCCC33FFCC6600CC6633CC6666CC6699CC66CCCC66FFCC9900CC9933 %CC9966CC9999CC99CCCC99FFCCCC00CCCC33CCCC66CCCC99CCCCCCCCCCFF %CCFF00CCFF33CCFF66CCFF99CCFFCCCCFFFFFF0033FF0066FF0099FF00CC %FF3300FF3333FF3366FF3399FF33CCFF33FFFF6600FF6633FF6666FF6699 %FF66CCFF66FFFF9900FF9933FF9966FF9999FF99CCFF99FFFFCC00FFCC33 %FFCC66FFCC99FFCCCCFFCCFFFFFF33FFFF66FFFF99FFFFCC110000001100 %000011111111220000002200000022222222440000004400000044444444 %550000005500000055555555770000007700000077777777880000008800 %000088888888AA000000AA000000AAAAAAAABB000000BB000000BBBBBBBB %DD000000DD000000DDDDDDDDEE000000EE000000EEEEEEEE0000000000FF %00FF0000FFFFFF0000FF00FFFFFF00FFFFFF %524C45FFA8CAA8FFA8CAA8FFA8CAA8FFA8CAA8FFA8CAA8FFA8CAA8FFA8CA %A8FFA8CAA8FFA8CAA8FFA8CAA8FFA8CAA8FFA8CAA8FFA8CAA8CAA8A8A1A8 %A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1FD04A8FFA8CAA8FFA8CAA8FFA8CAA8 %FFA8CAA8FFA8CAA8FFA8CAA8FFA8CAA8FFA8CAA8FFA8CAA8FFA8CAA8FFA8 %CAA8FFA8CAA8FFA8CAFD2EA8CAA8A8A1A8A1A87DA87DA17DA87DA17DA87D %A17DA87DA17DA87DA17DA87DA17DA8A1A8A8CAFD2EA8CAA8CAA8CAA8CAA8 %CAA8CAA8CAA8CAA8CAA8CAA8CAA8CAA8CAA8CAA8CAA8CAA8CAA8CAA8CAA8 %CAA8CAA8FFFD04A8A1A87DA8A1A87DA8A1A87DA8A1A87DA8A1A87DA8A1A8 %7DA8A1A87DA8A1A87DA8A1A8A1A8A8CAA8CAA8CAA8CAA8CAA8CAA8CAA8CA %A8CAA8CAA8CAA8CAA8CAA8CAA8CAA8CAA8CAA8CAA8CAA8CAA8CAA8CAFD2B %A8A1A87DA17DA17DA17DA87DA17DA87DA17DA87DA17DA87DA17DA87DA17D %A87DA17DA87DA17DA17DA17DA87DFD2BA8CAA8FFA8CAA8FFA8CAA8FFA8CA %A8FFA8CAA8FFA8CAA8FFA8CAA8FFA8CAA8FFA8CAA8FFA8CAA8FFA8A8A1A8 %A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8 %A1A8A1A8A1A8A1A8A1A8A1A87DFD04A8FFA8CAA8FFA8CAA8FFA8CAA8FFA8 %CAA8FFA8CAA8FFA8CAA8FFA8CAA8FFA8CAA8FFA8CAA8FFFD24A8CAA8A87D %A87DA17DA87DA17DA87DA17DA87DA17DA87DA17DA87DA17DA87DA17DA87D %A1A1A87DA17DA87DA17DA87DA17DA87DA17DA87DA8A1CAFD24A8CAA8CAA8 %CAA8CAA8CAA8CAA8CAA8CAA8CAA8CAA8CAA8CAA8CAA8CAA8CAA8CAA8CAA8 %CAA1A8A1A87DA8A1A87DA8A1A87DA8A1A87DA8A1A87DA8A1A87DA8A1A87D %A8A1A87DA8A1FFFFA87DA87DA8A1A87DA8A1A87DA8A1A87DA8A1A8A1A8A8 %CAA8CAA8CAA8CAA8CAA8CAA8CAA8CAA8CAA8CAA8CAA8CAA8CAA8CAA8CAA8 %CAA8CAFD23A87DA17DA87DA17DA87DA17DA87DA17DA87DA17DA87DA17DA8 %7DA17DA87DA17DA87DA17DFD04FFA87DA17DA87DA17DA87DA17DA87DA17D %A87DA17DA8A1FD21A8FFA8CAA8FFA8CAA8FFA8CAA8FFA8CAA8FFA8CAA8FF %A8CAA8FFA8CAA8FFA8CAA8A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8 %A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A87DFD07FFA1A8A1A8A1A8A1A8A1A8 %A1A8A1A8A1A8A1A8A1A8A1CAA8CAA8FFA8CAA8FFA8CAA8FFA8CAA8FFA8CA %A8FFA8CAA8FFA8CAA8FFA8CAFD1FA8A1A17DA87DA17DA87DA17DA87DA17D %A87DA17DA87DA17DA87DA17DA87DA17DA87DA17DA87DA8FD08FF7DA17DA1 %7DA87DA17DA87DA17DA87DA17DA87DA17DFD1FA8CAA8CAA8CAA8CAA8CAA8 %CAA8CAA8CAA8CAA8CAA8CAA8CAA8CAA8FFA8A87DA8A1A87DA8A1A87DA8A1 %A87DA8A1A87DA8A1A87DA8A1A87DA8A1A87DA8A1A87DA8A1A87DA8FD0AFF %A1A8A1A87DA8A1A87DA8A1A87DA8A1A87DA8A1A87DA8A8CAA8CAA8CAA8CA %A8CAA8CAA8CAA8CAA8CAA8CAA8CAA8CAA8CAA8CAFD1BA8A1A87DA17DA87D %A17DA87DA17DA87DA17DA87DA17DA87DA17DA87DA17DA87DA17DA87DA17D %A87DA827A8FD0AFFA1A17DA17DA87DA17DA87DA17DA87DA17DA87DA17DA1 %A1FD1BA8CAA8FFA8CAA8FFA8CAA8FFA8CAA8FFA8CAA8FFA8CAA8FFA8CAA8 %A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1 %A8A1A8A1A8A1A8A1A852F8F8A8FD0AFFA8A8A1A8A1A8A1A8A1A8A1A8A1A8 %A1A8A1A8A1A8A1A8A1CAA8CAA8FFA8CAA8FFA8CAA8FFA8CAA8FFA8CAA8FF %A8CAA8FFFD18A8CAA1A17DA87DA17DA87DA17DA87DA17DA87DA17DA87DA1 %7DA87DA17DA87DA17DA87DA17DA87DA17DA852FD04F8A8FD0AFFA8A17DA8 %7DA17DA87DA17DA87DA17DA87DA17DA87DA17DFD19A8CAA8CAA8CAA8CAA8 %CAA8CAA8CAA8CAA8CAA8CAA8CAA8A8A1A8A1A87DA8A1A87DA8A1A87DA8A1 %A87DA8A1A87DA8A1A87DA8A1A87DA8A1A87DA8A1A87DA8A1A852FD06F8FD %0BFFA8A17DA8A1A87DA8A1A87DA8A1A87DA8A1A87DA8A1A87DA8A8CAA8CA %A8CAA8CAA8CAA8CAA8CAA8CAA8CAA8CAA8CAFD17A87DA17DA87DA17DA87D %A17DA87DA17DA87DA17DA87DA17DA87DA17DA87DA17DA87DA17DA87DA17D %A852FD08F8FD0BFFA1A17DA87DA17DA87DA17DA87DA17DA87DA17DA87DA1 %7DFD17A8FFA8CAA8FFA8CAA8FFA8CAA8FFA8CAA8FFA8CAA8CAA1A8A1A8A1 %A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1 %A8A1A8A1CA76FD09F827FD0BFFA1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1 %A8A1A8A1A8A1A8A8FFA8CAA8FFA8CAA8FFA8CAA8FFA8CAA8FFA8CAFD15A8 %7DA87DA17DA87DA17DA87DA17DA87DA17DA87DA17DA87DA17DA87DA17DA8 %7DA17DA87DA17DA87DA852FD0BF852FD0BFF7DA87DA17DA87DA17DA87DA1 %7DA87DA17DA87DA17DA87DA8A8CAFD12A8CAA8CAA8CAA8CAA8CAA8CAA8CA %A8CAA8CAA8A8A1A87DA8A1A87DA8A1A87DA8A1A87DA8A1A87DA8A1A87DA8 %A1A87DA8A1A87DA8A1A87DA8A1A8A1A852FD0DF87DFD0BFF7DA8A1A87DA8 %A1A87DA8A1A87DA8A1A87DA8A1A87DA8A1A8A8FFA8CAA8CAA8CAA8CAA8CA %A8CAA8CAA8CAFD13A87DA17DA17DA87DA17DA87DA17DA87DA17DA87DA17D %A87DA17DA87DA17DA87DA17DA87D7D767D7DA827FD0FF8A8FD0AFFA87DA8 %7DA17DA87DA17DA87DA17DA87DA17DA87DA17DA87DA1FD12A8CAA8FFA8CA %A8FFA8CAA8FFA8CAA8FFA8A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8 %A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A87DA17DA127FD10F827FD0BFF %A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A87DA8A8CAA8FFA8 %CAA8FFA8CAA8FFA8CAA8FFFD11A87DA17DA87DA17DA87DA17DA87DA17DA8 %7DA17DA87DA17DA87DA17DA87DA17DA87DA17DA8FD047DFD13F852FD0AFF %A8A87DA17DA87DA17DA87DA17DA87DA17DA87DA17DA87DA17DFD11A8CAA8 %CAA8CAA8CAA8CAA8CAA8CAA8A8A1A8A1A87DA8A1A87DA8A1A87DA8A1A87D %A8A1A87DA8A1A87DA8A1A87DA8A1A87DA8A1A87DA17D76FD15F8A8FD0AFF %A8A8A1A87DA8A1A87DA8A1A87DA8A1A87DA8A1A87DA8A1A87DA8A8CAA8CA %A8CAA8CAA8CAA8CAA8CAFD0FA87DA17DA87DA17DA87DA17DA87DA17DA87D %A17DA87DA17DA87DA17DA87DA17DA87DA17DA87DA17652FD17F8FD0BFF7D %A17DA17DA87DA17DA87DA17DA87DA17DA87DA17DA87DA17DFD0FA8FFA8CA %A8FFA8CAA8FFA8CAA8FFA8A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8 %A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A87627FD18F852FD0BFFA1A8A1 %A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A8FFA8CAA8FFA8 %CAA8FFA8CAFD0DA8A1A87DA17DA87DA17DA87DA17DA87DA17DA87DA17DA8 %7DA17DA87DA17DA87DA17DA87DA17DA852FD1BF8A8FD09FFA8A87DA17DA8 %7DA17DA87DA17DA87DA17DA87DA17DA87DA17DA87DFD0DA8CAA8CAA8CAA8 %CAA8CAA8FFA8A87DA8A1A87DA8A1A87DA8A1A87DA8A1A87DA8A1A87DA8A1 %A87DA8A1A87DA8A1A87DA8A8A127FD1CF852FD0AFFA8A8A1A87DA8A1A87D %A8A1A87DA8A1A87DA8A1A87DA8A1A87DA8A1CAA8CAA8CAA8CAA8CAA8CAFD %0DA87DA17DA87DA17DA87DA17DA87DA17DA87DA17DA87DA17DA87DA17DA8 %7DA17DA87DA87D52FD1FF8A8FD0AFF7DA17DA17DA87DA17DA87DA17DA87D %A17DA87DA17DA87DA17DA1A1FD0BA8CAA8FFA8CAA8FFA8CAA8A8A1A8A1A8 %A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8 %7D27FD20F827FD0AFFCAA1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8 %A1A8A1A8A1A8A8FFA8CAA8FFA8CAA8FFFD0BA87DA87DA17DA87DA17DA87D %A17DA87DA17DA87DA17DA87DA17DA87DA17DA87DA8A1A127FD23F87DFD09 %FFA8A17DA17DA87DA17DA87DA17DA87DA17DA87DA17DA87DA17DA87DA8A8 %CAFD08A8CAA8CAA8CAA8CAA8FFA1A87DA8A1A87DA8A1A87DA8A1A87DA8A1 %A87DA8A1A87DA8A1A87DA8A1A87DA8A152FD25F852FD0AFFA1A8A1A87DA8 %A1A87DA8A1A87DA8A1A87DA8A1A87DA8A1A87DA8A1A8A8CAA8CAA8CAA8CA %FD09A8A1A17DA17DA87DA17DA87DA17DA87DA17DA87DA17DA87DA17DA87D %A17DA8A1A85227FD27F8A8FD09FFA87DA87DA17DA87DA17DA87DA17DA87D %A17DA87DA17DA87DA17DA17DFD09A8FFA8CAA8FFA8CAA8A8A1A8A1A8A1A8 %A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A87D27FD29F827FD %09FFA8A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8 %A1FFA8CAA8FFA8CAFD09A87DA87DA17DA87DA17DA87DA17DA87DA17DA87D %A17DA87DA17DA8A1A87627FD2CF8A8FD09FF7DA87DA17DA87DA17DA87DA1 %7DA87DA17DA87DA17DA87DA17DA87DA1A8CAFD06A8CAA8CAA8CAA8CAA1A8 %7DA8A1A87DA8A1A87DA8A1A87DA8A1A87DA8A1A87DA8A1A8A17D27FD2EF8 %52FD09FFA87DA8A1A87DA8A1A87DA8A1A87DA8A1A87DA8A1A87DA8A1A87D %A8A1A8A8CAA8CAA8CAFD07A8A1A17DA17DA87DA17DA87DA17DA87DA17DA8 %7DA17DA87DA1A1A85227FD31F8FD09FFA8A17DA87DA17DA87DA17DA87DA1 %7DA87DA17DA87DA17DA87DA17DA87DFD07A8CAA8FFA8CAA8A8A1A8A1A8A1 %A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A17D27FD33F87DFD09FFA1A8A1 %A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1FFA8CAA8 %FFFD07A87DA87DA17DA87DA17DA87DA17DA87DA17DA87DA8A1A15227FD35 %F827FD09FFA87DA87DA17DA87DA17DA87DA17DA87DA17DA87DA17DA87DA1 %7DA87DA1A8CAFD04A8CAA8CAA8CAA1A87DA8A1A87DA8A1A87DA8A1A87DA8 %A1A8A1A87D52FD39F8A8FD08FFA8A17DA8A1A87DA8A1A87DA8A1A87DA8A1 %A87DA8A1A87DA8A1A87DA8A1A8A8CAA8CAFD05A8A1A17DA17DA87DA17DA8 %7DA17DA87DA17DA87D52FD3CF852FD08FFCA7DA17DA87DA17DA87DA17DA8 %7DA17DA87DA17DA87DA17DA87DA17DA17DFD05A8FFA8CAA8A8A1A8A1A8A1 %A8A1A8A1A8A1A8A1A8A1A87D27FD3DF827FD08FFCAA87DA8A1A8A1A8A1A8 %A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A8FFA8CAFD05A87DA87D %A17DA87DA17DA87DA17DA87DA1A127FD3FF8A8FD08FF7DA17DA87DA17DA8 %7DA17DA87DA17DA87DA17DA87DA17DA87DA17DA87DFD05A8CAA8FFA8A87D %A8A1A87DA8A1A87DA8A1A87DA8A1A1FD07F8275227FD36F852FD08FFA8A1 %A87DA8A1A87DA8A1A87DA8A1A87DA8A1A87DA8A1A87DA8A1A87DA8A1A8A8 %CAFD05A87DA17DA87DA17DA87DA17DA87DA17DA827FD06F87DFFFFA827FD %36F8A8FD07FFA1A17DA17DA87DA17DA87DA17DA87DA17DA87DA17DA87DA1 %7DA87DA17DA1A1A8A8A8CAA8CAA1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1 %27FD05F827FD04FFA8FD36F8A8FD08FFA1A8A1A8A1A8A1A8A1A8A1A8A1A8 %A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A8FFA8A8A8A1A87DA17DA87DA17D %A87DA17DA87DA1A176FD06F827FD05FFFD36F852FD07FFA8A17DA17DA87D %A17DA87DA17DA87DA17DA87DA17DA87DA17DA87DA17DA87DA8A8A8CAA8A8 %7DA8A1A87DA8A1A87DA8A1A87DA8A1A87D27FD06F8A8FFFFFF52FD36F827 %FD08FF7DA8A1A87DA8A1A87DA8A1A87DA8A1A87DA8A1A87DA8A1A87DA8A1 %A87DA8A8CAA8A8A87DA17DA87DA17DA87DA17DA87DA17DA87DA84BFD07F8 %7DA852FD38F8A8FD06FFA8A17DA87DA17DA87DA17DA87DA17DA87DA17DA8 %7DA17DA87DA17DA87DA17DA8A8A8FFA8A8A1A8A1A8A1A8A1A8A1A8A1A8A1 %A8A1A8A1A827FD41F87DFD07FF7DA8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1 %A8A1A8A1A8A1A8A1A8A1A8A1A8A1CAA8A8A87DA17DA87DA17DA87DA17DA8 %7DA17DA87DA1A17DFD33F8FD0427522752275227524B524B7DFD05A8CAA8 %A17DA87DA17DA87DA17DA87DA17DA87DA17DA87DA17DA87DA17DA87DA17D %A8A8A8CAA1A8A1A87DA8A1A87DA8A1A87DA8A1A87DA8A1A8A152FD2BF827 %275252FD047DA17DA17DA87DA17DA1A1A8A1A8A1A17DA87DA17DA8A1A87D %A8A1A87DA8A1A87DA8A1A87DA8A1A87DA8A1A87DA8A1A87DA8A1A87DA8A8 %A8A17DA87DA17DA87DA17DA87DA17DA87DA17DA87DA17D27FD28F8277676 %A17D7D767D7D7D767D7D7D767D7D7D767D7DA17DA87DA17DA87DA17DA87D %A17DA87DA17DA87DA17DA87DA17DA87DA17DA87DA17DA87DA17DA87DA17D %A8CAA1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A17DA17DFD26F8527D %A17DA17D7D7DA17D7D7DA17D7D7DA17D7D7DA17DA8A1A8A1A8A1A8A1A8A1 %A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1 %A87DA8A8A8A17DA87DA17DA87DA17DA87DA17DA87DA1FD047D76A152FD22 %F82752FD057D767D7D7D767D7D7D767D7D7D767D7D7D767D7DA17DA87DA1 %7DA87DA17DA87DA17DA87DA17DA87DA17DA87DA17DA87DA17DA87DA17DA8 %7DA17DA87DA17DA8A8A1A87DA8A1A87DA8A1A87DA8A1A87DA87D7D7DA17D %7D7DA827FD1FF8277D7DA17D7D7DA17D7D7DA17D7D7DA1FD077DA17DA17D %A8A1A87DA8A1A87DA8A1A87DA8A1A87DA8A1A87DA8A1A87DA8A1A87DA8A1 %A87DA8A1A87DA8A1A87DA8A1A8A87DA17DA17DA87DA17DA87DA17DA87D7D %767D7D7D767D7D7D767D27FD1CF82752A17D7D767D7D7D767D7D7D767D76 %7D76FD047DA17DA17DA87DA17DA87DA17DA87DA17DA87DA17DA87DA17DA8 %7DA17DA87DA17DA87DA17DA87DA17DA87DA17DA87DA17DA87DA8A8A1A8A1 %A8A1A8A1A8A1A8A1A87DA17DA17D7D7DA17D7D7DA17DA17D52FD18F82776 %7DA87D7D7DA17D7D7DA17D7D7DA17DA17DA8A1A8A1A8A1A8A1A8A1A8A1A8 %A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8 %A1A8A1A8A1A8A1A8A1A8A1A8A87DA87DA17DA87DA17DA87DA1FD047D767D %7D7D767D7D7D76FD057DFD16F8277D7D7D767D7D7D76FD047DA17DA17DA8 %7DA17DA87DA17DA87DA17DA87DA17DA87DA17DA87DA17DA87DA17DA87DA1 %7DA87DA17DA87DA17DA87DA17DA87DA17DA87DA17DA87DA17DA87DA8A87D %A8A1A87DA8A1A87DA87D7D7DA17D7D7DA17D7D7DA17D7D7DA17D7D7DA127 %FD12F8277DA17DA1FD057DA17DA8A1A87DA8A1A87DA8A1A87DA8A1A87DA8 %A1A87DA8A1A87DA8A1A87DA8A1A87DA8A1A87DA8A1A87DA8A1A87DA8A1A8 %7DA8A1A87DA8A1A87DA8A1A87DA8A1A87DA8A87DA17DA87DA17DA87DA1FD %047D767D7D7D767D7D7D767D7D7D76FD057D27FD10F852FD047D76FD047D %A17DA17DA87DA17DA87DA17DA87DA17DA87DA17DA87DA17DA87DA17DA87D %A17DA87DA17DA87DA17DA87DA17DA87DA17DA87DA17DA87DA17DA87DA17D %A87DA17DA87DA17DA8A8A1A8A1A8A1A8A1A8A1A87D7D7DA17D7D7DA17D7D %7DA17D7D7DA17D7D7DA17DA127FD0EF8527DA17D7D7DA17DA8A1A8A1A8A1 %A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1 %A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1 %A8A1A8A1A8A17DA17DA87DA17DA87DA1FD047D767D7D7D767D7D7D767D7D %7D767D7D7D767D7D7D27FD0CF8277D7D76FD047DA87DA17DA87DA17DA87D %A17DA87DA17DA87DA17DA87DA17DA87DA17DA87DA17DA87DA17DA87DA17D %A87DA17DA87DA17DA87DA17DA87DA17DA87DA17DA87DA17DA87DA17DA87D %A17DA8A8A1A87DA8A1A87DA87D7D7DA17D7D7DA17D7D7DA17D7D7DA17D7D %7DA17D7D7DA17DA127FD08F8527DA8FFA87D7D7DA1A1A87DA8A1A87DA8A1 %A87DA8A1A87DA8A1A87DA8A1A87DA8A1A87DA8A1A87DA8A1A87DA8A1A87D %A8A1A87DA8A1A87DA8A1A87DA8A1A87DA8A1A87DA8A1A87DA8A1A87DA8A1 %A87DA8A1A8A17DA87DA17DA87DA17DA17D7D767D7D7D767D7D7D767D7D7D %767D7D7D767D7D7D767D7D7DFD05F8277DFD05FFA87D7DA17DA87DA17DA8 %7DA17DA87DA17DA87DA17DA87DA17DA87DA17DA87DA17DA87DA17DA87DA1 %7DA87DA17DA87DA17DA87DA17DA87DA17DA87DA17DA87DA17DA87DA17DA8 %7DA17DA87DA17DA87DA8A8A1A8A1A8A1A8A1A8A1A87DA17D7D7DA17D7D7D %A17D7D7DA17D7D7DA17D7D7DA1FD047DF8F8F87DFD08FFA8A8A1A8A1A8A1 %A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1 %A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1 %A8A1A8A1A8A1A8A1A8A1A8A17DA87DA17DA87DA17DA87DA1767D7D7D767D %7D7D767D7D7D767D7D7D767D7D7D76FD047D52F8A8FD0AFFA8A17DA87DA1 %7DA87DA17DA87DA17DA87DA17DA87DA17DA87DA17DA87DA17DA87DA17DA8 %7DA17DA87DA17DA87DA17DA87DA17DA87DA17DA87DA17DA87DA17DA87DA1 %7DA87DA17DA87DA17DA87DA8A87DA8A1A87DA8A1A87DA8A1A1FD057DA17D %7D7DA17D7D7DA17D7D7DA17D7D7DA17D7D76A8FD0CFFA1A87DA8A1A87DA8 %A1A87DA8A1A87DA8A1A87DA8A1A87DA8A1A87DA8A1A87DA8A1A87DA8A1A8 %7DA8A1A87DA8A1A87DA8A1A87DA8A1A87DA8A1A87DA8A1A87DA8A1A87DA8 %A1A87DA8A1A87DA8A17DA17DA87DA17DA87DA17DA87DA1767D7D7D767D7D %7D767D7D7D767D7D7D767D7D7D76FD047DFD0DFF7DA17DA87DA17DA87DA1 %7DA87DA17DA87DA17DA87DA17DA87DA17DA87DA17DA87DA17DA87DA17DA8 %7DA17DA87DA17DA87DA17DA87DA17DA87DA17DA87DA17DA87DA17DA87DA1 %7DA87DA17DA8A87DA8A1A8A1A8A1A8A1A8A1A8A1A87D7D7DA17D7D7DA17D %7D7DA17D7D7DA17D7D7DA1FD057DFD0DFF7DA8A1A8A1A8A1A8A1A8A1A8A1 %A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1 %A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1 %A8A87DA17DA87DA17DA87DA17DA87DA17DA87D7D767D7D7D767D7D7D767D %7D7D767D7D7D767D7D7D767DA1FD0CFFA87DA87DA17DA87DA17DA87DA17D %A87DA17DA87DA17DA87DA17DA87DA17DA87DA17DA87DA17DA87DA17DA87D %A17DA87DA17DA87DA17DA87DA17DA87DA17DA87DA17DA87DA17DA87DA17D %A8A8A1A87DA8A1A87DA8A1A87DA8A1A87DA8FD077DA17D7D7DA17D7D7DA1 %7D7D7DA1FD047DA8FD0CFFA87DA8A1A87DA8A1A87DA8A1A87DA8A1A87DA8 %A1A87DA8A1A87DA8A1A87DA8A1A87DA8A1A87DA8A1A87DA8A1A87DA8A1A8 %7DA8A1A87DA8A1A87DA8A1A87DA8A1A87DA8A1A87DA8A1A8A17DA17DA17D %A87DA17DA87DA17DA87DA17DA87DA17D7D767D767D7D7D767D7D7D767D7D %7D76FD047DA8A8FD0BFFA8A17DA87DA17DA87DA17DA87DA17DA87DA17DA8 %7DA17DA87DA17DA87DA17DA87DA17DA87DA17DA87DA17DA87DA17DA87DA1 %7DA87DA17DA87DA17DA87DA17DA87DA17DA87DA17DA87DA8A8A1A8A1A8A1 %A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A17DA17D7D7DA17D7D7DA17D7D7D %A17D7D7DA8A1A8FD0CFFA8A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8 %A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8 %A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A8A1A87DA17DA87D %A17DA87DA17DA87DA17DA87DA17DA87DA1FD047D767D7D7D767D7D7D76FD %047DA87DA8FD0CFFA8A17DA17DA87DA17DA87DA17DA87DA17DA87DA17DA8 %7DA17DA87DA17DA87DA17DA87DA17DA87DA17DA87DA17DA87DA17DA87DA1 %7DA87DA17DA87DA17DA87DA17DA87DA17DA87DA8A87DA8A1A87DA8A1A87D %A8A1A87DA8A1A87DA8A1A87DA8A1A87DA17D7D7DA17D7D7DA17D7D7DA17D %7D7DA8A1FD0DFFA1A8A1A87DA8A1A87DA8A1A87DA8A1A87DA8A1A87DA8A1 %A87DA8A1A87DA8A1A87DA8A1A87DA8A1A87DA8A1A87DA8A1A87DA8A1A87D %A8A1A87DA8A1A87DA8A1A87DA8A1A87DA8A8A8A17DA87DA17DA87DA17DA8 %7DA17DA87DA17DA87DA17DA87DA17D7D767D767D7D7D767D7D7D76FD047D %A17DFD0DFF7DA17DA17DA87DA17DA87DA17DA87DA17DA87DA17DA87DA17D %A87DA17DA87DA17DA87DA17DA87DA17DA87DA17DA87DA17DA87DA17DA87D %A17DA87DA17DA87DA17DA87DA17DA8CAA1A8A1A8A1A8A1A8A1A8A1A8A1A8 %A1A8A1A8A1A8A1A8A1A8A1A8A1A17DA17D7D7DA17D7D7DA17D7D7DA17DA8 %A8FD0DFFA1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8 %A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8 %A1A8A1A8A1A8A1A8A1A87DFD04A87DA87DA17DA87DA17DA87DA17DA87DA1 %7DA87DA17DA87DA17DA87DA1767D7D7D767D7D7D767D7D7D767D7DA1A8FD %0DFF7DA17DA87DA17DA87DA17DA87DA17DA87DA17DA87DA17DA87DA17DA8 %7DA17DA87DA17DA87DA17DA87DA17DA87DA17DA87DA17DA87DA17DA87DA1 %7DA87DA17DA87DA1A1CAFFA8A87DA8A1A87DA8A1A87DA8A1A87DA8A1A87D %A8A1A87DA8A1A87DA8A1A8FD057DA17D7D7DA1FD057DA8A8FD0CFFCA7DA8 %7DA8A1A87DA8A1A87DA8A1A87DA8A1A87DA8A1A87DA8A1A87DA8A1A87DA8 %A1A87DA8A1A87DA8A1A87DA8A1A87DA8A1A87DA8A1A87DA8A1A87DA8A1A8 %7DA8A1FD04A87DA17DA87DA17DA87DA17DA87DA17DA87DA17DA87DA17DA8 %7DA17DA87DA1767D7D7D767D7D7D767D7D7D767D7DA8CAFD0CFFA87DA17D %A87DA17DA87DA17DA87DA17DA87DA17DA87DA17DA87DA17DA87DA17DA87D %A17DA87DA17DA87DA17DA87DA17DA87DA17DA87DA17DA87DA17DA87DA17D %A8A8A8FFA8A87DA8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8 %A1A8A1A8A1A87D7D7DA17D7D7DA17D7D7DA17D7D7DA8FD0DFFA87DA8A1A8 %A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8 %A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A8CA %A8A8CAA1A17DA87DA17DA87DA17DA87DA17DA87DA17DA87DA17DA87DA17D %A87DA17DA87D7D767D7D7D767D7D7D767D7D7D76CAFD0CFFA8A17DA87DA1 %7DA87DA17DA87DA17DA87DA17DA87DA17DA87DA17DA87DA17DA87DA17DA8 %7DA17DA87DA17DA87DA17DA87DA17DA87DA17DA87DA17DA87DA17DA8A8A8 %CAA8A8A1A87DA8A1A87DA8A1A87DA8A1A87DA8A1A87DA8A1A87DA8A1A87D %A8A1A87DA87D7D7DA17D7D7DA17D7D7DA17D7D7DFD0DFFA8A87DA8A1A87D %A8A1A87DA8A1A87DA8A1A87DA8A1A87DA8A1A87DA8A1A87DA8A1A87DA8A1 %A87DA8A1A87DA8A1A87DA8A1A87DA8A1A87DA8A1A87DA8A1A8A8CAFD05A8 %7DA17DA87DA17DA87DA17DA87DA17DA87DA17DA87DA17DA87DA17DA87DA1 %7DA87D7D767D7D7D767D7D7D76FD047DFD0DFFA8A17DA87DA17DA87DA17D %A87DA17DA87DA17DA87DA17DA87DA17DA87DA17DA87DA17DA87DA17DA87D %A17DA87DA17DA87DA17DA87DA17DA87DA17DA17DA8A8A8CAA8FFA8A8A1A8 %A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8 %7DA17D7D7DA17D7D7DA1FD047DA8FD0DFFA8A8A1A8A1A8A1A8A1A8A1A8A1 %A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1 %A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A8FFFD05A87DA17DA87DA17DA8 %7DA17DA87DA17DA87DA17DA87DA17DA87DA17DA87DA17DA87DA1FD047D76 %7D7D7D767D7D7D767DA8FD0DFF7DA17DA17DA87DA17DA87DA17DA87DA17D %A87DA17DA87DA17DA87DA17DA87DA17DA87DA17DA87DA17DA87DA17DA87D %A17DA87DA17DA87DA17DFD05A8CAA8CAA8A8A1A87DA8A1A87DA8A1A87DA8 %A1A87DA8A1A87DA8A1A87DA8A1A87DA8A1A87DA8A1A87DA17D7D7DA17D7D %7DA17D7D7DA1FD0EFF7DA8A1A87DA8A1A87DA8A1A87DA8A1A87DA8A1A87D %A8A1A87DA8A1A87DA8A1A87DA8A1A87DA8A1A87DA8A1A87DA8A1A87DA8A1 %A87DA8A1A8A1FFA8CAFD05A87DA17DA17DA87DA17DA87DA17DA87DA17DA8 %7DA17DA87DA17DA87DA17DA87DA17DA87DA17D7D767D767D7D7D767D7D7D %76A8FD0EFF7DA17DA17DA87DA17DA87DA17DA87DA17DA87DA17DA87DA17D %A87DA17DA87DA17DA87DA17DA87DA17DA87DA17DA87DA17DA87DA17DA87D %FD05A8FFA8CAA8CAA1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8 %A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A17DA17D7D7DA17D7D7DA17DA8FD0E %FFA1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1 %A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A8FFA8CAFD %07A87DA17DA87DA17DA87DA17DA87DA17DA87DA17DA87DA17DA87DA17DA8 %7DA17DA87DA17DA87D7D767D7D7D767D7D7D767D7DFD0EFFA87DA17DA87D %A17DA87DA17DA87DA17DA87DA17DA87DA17DA87DA17DA87DA17DA87DA17D %A87DA17DA87DA17DA87DA17DA87DA17DA8A1FD05A8CAA8CAA8CAA8A8A1A8 %7DA8A1A87DA8A1A87DA8A1A87DA8A1A87DA8A1A87DA8A1A87DA8A1A87DA8 %A1A87DA8A1A1FD057DA1FD057DFD0EFFA87DA87DA8A1A87DA8A1A87DA8A1 %A87DA8A1A87DA8A1A87DA8A1A87DA8A1A87DA8A1A87DA8A1A87DA8A1A87D %A8A1A87DA8A1A87DCAA8CAA8CAFD07A87DA17DA17DA87DA17DA87DA17DA8 %7DA17DA87DA17DA87DA17DA87DA17DA87DA17DA87DA17DA87DA1767D7D7D %767D7D7D767D7DFD0DFFA8A87DA17DA87DA17DA87DA17DA87DA17DA87DA1 %7DA87DA17DA87DA17DA87DA17DA87DA17DA87DA17DA87DA17DA87DA17DA8 %7DFD07A8CAA8FFA8CAA8CAA1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1 %A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A87D7D7DA17D7D7DA17D %7DA8FD0DFFA8A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1 %A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A8FFA8CAA8 %FFFD09A87DA17DA87DA17DA87DA17DA87DA17DA87DA17DA87DA17DA87DA1 %7DA87DA17DA87DA17DA87DA17DA17D7D767D7D7D767D767DFD0CFFA8A17D %A17DA87DA17DA87DA17DA87DA17DA87DA17DA87DA17DA87DA17DA87DA17D %A87DA17DA87DA17DA87DA17DA87DA17DA8A1FD07A8CAA8CAA8CAA8CAA8A8 %A1A87DA8A1A87DA8A1A87DA8A1A87DA8A1A87DA8A1A87DA8A1A87DA8A1A8 %7DA8A1A87DA8A1A87DA87D7D7DA17D7D7DA17DA8FD0BFFA87DA8A1A87DA8 %A1A87DA8A1A87DA8A1A87DA8A1A87DA8A1A87DA8A1A87DA8A1A87DA8A1A8 %7DA8A1A87DA8A1A87DA8A1A87DCAA8CAA8CAA8CAFD09A87DA17DA17DA87D %A17DA87DA17DA87DA17DA87DA17DA87DA17DA87DA17DA87DA17DA87DA17D %A87DA17DA17D7D767D7D7D767D7DFD0BFF7DA17DA87DA17DA87DA17DA87D %A17DA87DA17DA87DA17DA87DA17DA87DA17DA87DA17DA87DA17DA87DA17D %A87DA17DA87DFD09A8FFA8CAA8FFA8CAA8CAA1A8A1A8A1A8A1A8A1A8A1A8 %A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8 %7DA17D7D7DA17D7DA8FD09FFA8A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8 %A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8 %A1A8A8FFA8CAA8FFA8CAFD0BA87DA17DA87DA17DA87DA17DA87DA17DA87D %A17DA87DA17DA87DA17DA87DA17DA87DA17DA87DA17DA87DA1FD047D767D %7D7DA8FD08FFA87DA17DA87DA17DA87DA17DA87DA17DA87DA17DA87DA17D %A87DA17DA87DA17DA87DA17DA87DA17DA87DA17DA87DA17DFD0BA8CAA8CA %A8CAA8CAA8CAA8A8A1A87DA8A1A87DA8A1A87DA8A1A87DA8A1A87DA8A1A8 %7DA8A1A87DA8A1A87DA8A1A87DA8A1A87DA8A1A8FD057DA17DA8FD08FFA8 %A8A1A87DA8A1A87DA8A1A87DA8A1A87DA8A1A87DA8A1A87DA8A1A87DA8A1 %A87DA8A1A87DA8A1A87DA8A1A87DA8A1A8A1FFA8CAA8CAA8CAA8CAFD0BA8 %A1A17DA17DA87DA17DA87DA17DA87DA17DA87DA17DA87DA17DA87DA17DA8 %7DA17DA87DA17DA87DA17DA87DA1FD047D767D7DFD09FF7DA17DA17DA87D %A17DA87DA17DA87DA17DA87DA17DA87DA17DA87DA17DA87DA17DA87DA17D %A87DA17DA87DA17DA17DFD0BA8CAA8FFA8CAA8FFA8CAA8FFA8A8A1A8A1A8 %A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8 %A1A8A1A8A1A8A1A87D7D7DA17D7DCAFD09FFA1A8A1A8A1A8A1A8A1A8A1A8 %A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8 %A1A8A1A8A8FFA8CAA8FFA8CAA8FFFD0DA87DA17DA87DA17DA87DA17DA87D %A17DA87DA17DA87DA17DA87DA17DA87DA17DA87DA17DA87DA17DA87DA17D %A87D7D767D76A8FD0AFFA1A17DA87DA17DA87DA17DA87DA17DA87DA17DA8 %7DA17DA87DA17DA87DA17DA87DA17DA87DA17DA87DA17DFD0DA8CAA8CAA8 %CAA8CAA8CAA8CAA8CAA1A87DA8A1A87DA8A1A87DA8A1A87DA8A1A87DA8A1 %A87DA8A1A87DA8A1A87DA8A1A87DA8A1A87DA8A1A87DA8FD047DA1FD0BFF %CAA87DA8A1A87DA8A1A87DA8A1A87DA8A1A87DA8A1A87DA8A1A87DA8A1A8 %7DA8A1A87DA8A1A87DA8A1A8A8CAA8CAA8CAA8CAA8CAA8CAFD0FA87DA17D %A87DA17DA87DA17DA87DA17DA87DA17DA87DA17DA87DA17DA87DA17DA87D %A17DA87DA17DA87DA17DA1767D767DFD0CFFA8A17DA87DA17DA87DA17DA8 %7DA17DA87DA17DA87DA17DA87DA17DA87DA17DA87DA17DA87DA17DFD0FA8 %FFA8CAA8FFA8CAA8FFA8CAA8FFA8A87DA8A1A8A1A8A1A8A1A8A1A8A1A8A1 %A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A17D %A17DFD0CFFCA7DA8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8 %A1A8A1A8A1A8A1A8A1A8A1A87DA8A8CAA8FFA8CAA8FFA8CAA8FFA8CAFD0E %A8CAA8A87DA87DA17DA87DA17DA87DA17DA87DA17DA87DA17DA87DA17DA8 %7DA17DA87DA17DA87DA17DA87DA17DA87D7D767DA8FD0BFFA8A17DA87DA1 %7DA87DA17DA87DA17DA87DA17DA87DA17DA87DA17DA87DA17DA87DA17DA8 %7DA1A1CAFD0EA8CAA8CAA8CAA8CAA8CAA8CAA8CAA8FFA8A87DA8A1A87DA8 %A1A87DA8A1A87DA8A1A87DA8A1A87DA8A1A87DA8A1A87DA8A1A87DA8A1A8 %7DA8A1A87DA87D7D7DA8FD0CFF7DA87DA8A1A87DA8A1A87DA8A1A87DA8A1 %A87DA8A1A87DA8A1A87DA8A1A87DA8A1A87DA8A8CAA8CAA8CAA8CAA8CAA8 %CAA8CAA8CAFD12A8A17DA87DA17DA87DA17DA87DA17DA87DA17DA87DA17D %A87DA17DA87DA17DA87DA17DA87DA17DA87DA17DA17D7D76FD0CFFA87DA1 %7DA87DA17DA87DA17DA87DA17DA87DA17DA87DA17DA87DA17DA87DA17DA8 %7DA17DFD11A8CAA8FFA8CAA8FFA8CAA8FFA8CAA8FFA8CAA8A8A1A8A1A8A1 %A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1 %A8A1A8A1A8A1A17D7DA8FD0CFFA87DA8A1A8A1A8A1A8A1A8A1A8A1A8A1A8 %A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1FFA8CAA8FFA8CAA8FFA8CAA8FF %A8CAA8FFFD15A87DA17DA87DA17DA87DA17DA87DA17DA87DA17DA87DA17D %A87DA17DA87DA17DA87DA17DA87DA17DA87D7D76A1FD0DFFCA7DA17DA17D %A87DA17DA87DA17DA87DA17DA87DA17DA87DA17DA87DA17DA8A1FD13A8CA %A8CAA8CAA8CAA8CAA8CAA8CAA8CAA8CAA8CAA8A8A1A87DA8A1A87DA8A1A8 %7DA8A1A87DA8A1A87DA8A1A87DA8A1A87DA8A1A87DA8A1A87DA8A1A87DA8 %7D7D7DFD0FFFA8A8A1A87DA8A1A87DA8A1A87DA8A1A87DA8A1A87DA8A1A8 %7DA8A1A8A1CAA8CAA8CAA8CAA8CAA8CAA8CAA8CAA8CAA8CAFD17A87DA17D %A87DA17DA87DA17DA87DA17DA87DA17DA87DA17DA87DA17DA87DA17DA87D %A17DA87DA17DA17D7D7DFD0FFF7DA17DA17DA87DA17DA87DA17DA87DA17D %A87DA17DA87DA17DA1A1FD15A8FFA8CAA8FFA8CAA8FFA8CAA8FFA8CAA8FF %A8CAA8FFA8A87DA8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8 %A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A17DA1FD0EFFCAA8A1A8A1A8A1A8A1 %A8A1A8A1A8A1A8A1A8A1A8A1A8A1A87DA8A8CAA8FFA8CAA8FFA8CAA8FFA8 %CAA8FFA8CAA8FFA8CAFD16A8CAA8A87DA87DA17DA87DA17DA87DA17DA87D %A17DA87DA17DA87DA17DA87DA17DA87DA17DA87DA17DA87D7D76A8FD0EFF %7DA87DA17DA87DA17DA87DA17DA87DA17DA87DA17DA87DA1A1CAFD16A8CA %A8CAA8CAA8CAA8CAA8CAA8CAA8CAA8CAA8CAA8CAA8CAA8A87DA8A1A87DA8 %A1A87DA8A1A87DA8A1A87DA8A1A87DA8A1A87DA8A1A87DA8A1A87DA8A1A8 %7DA87D7D7DFD0EFFA87DA8A1A87DA8A1A87DA8A1A87DA8A1A87DA8A1A87D %A8A8CAA8CAA8CAA8CAA8CAA8CAA8CAA8CAA8CAA8CAA8CAA8CAFD1BA87DA1 %7DA17DA87DA17DA87DA17DA87DA17DA87DA17DA87DA17DA87DA17DA87DA1 %7DA87DA17DA87D7D7DFD0DFFA1A17DA87DA17DA87DA17DA87DA17DA87DA1 %7DA17DFD1BA8CAA8FFA8CAA8FFA8CAA8FFA8CAA8FFA8CAA8FFA8CAA8FFA8 %CAA8FFA8A87DA8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1 %A8A1A8A1A8A1A8A1A8A1A87D7DA8FD0DFF7DA8A1A8A1A8A1A8A1A8A1A8A1 %A8A1A8A1A8A1A8A8FFA8CAA8FFA8CAA8FFA8CAA8FFA8CAA8FFA8CAA8FFA8 %CAA8FFFD1CA8CAA8A87DA87DA17DA87DA17DA87DA17DA87DA17DA87DA17D %A87DA17DA87DA17DA87DA17DA87DA176A1FD0EFF7DA87DA17DA87DA17DA8 %7DA17DA87DA17DFD1DA8CAA8CAA8CAA8CAA8CAA8CAA8CAA8CAA8CAA8CAA8 %CAA8CAA8CAA8CAA8FFA8A87DA8A1A87DA8A1A87DA8A1A87DA8A1A87DA8A1 %A87DA8A1A87DA8A1A87DA8A1A87DA8A1A876A8FD0EFF7DA8A1A87DA8A1A8 %7DA8A1A87DA8A8CAA8CAA8CAA8CAA8CAA8CAA8CAA8CAA8CAA8CAA8CAA8CA %A8CAA8CAA8CAFD21A87DA17DA17DA87DA17DA87DA17DA87DA17DA87DA17D %A87DA17DA87DA17DA87DA17DA87DA176A8FD0CFFA1A17DA87DA17DA87DA1 %7DA17DFD21A8FFA8CAA8FFA8CAA8FFA8CAA8FFA8CAA8FFA8CAA8FFA8CAA8 %FFA8CAA8FFA8CAA8FFA8A87DA8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1 %A8A1A8A1A8A1A8A1A8A1A8A1A8A1A87DA8FD0AFFA8A8A1A8A1A8A1A8A1A8 %7DA8A8CAA8FFA8CAA8FFA8CAA8FFA8CAA8FFA8CAA8FFA8CAA8FFA8CAA8FF %A8CAA8FFA8CAFD22A8CAA8A87DA87DA17DA87DA17DA87DA17DA87DA17DA8 %7DA17DA87DA17DA87DA17DA87DA17DA87D7DA8FD07FFA8A87DA17DA87DA1 %7DA87DA8A8CAFD22A8CAA8CAA8CAA8CAA8CAA8CAA8CAA8CAA8CAA8CAA8CA %A8CAA8CAA8CAA8CAA8CAA8CAA8CAA8CAA8A8A1A87DA8A1A87DA8A1A87DA8 %A1A87DA8A1A87DA8A1A87DA8A1A87DA8A1A87DA87DA17DCACAFFFFFFA8A1 %7DA8A1A87DA8A1A8A1CAA8CAA8CAA8CAA8CAA8CAA8CAA8CAA8CAA8CAA8CA %A8CAA8CAA8CAA8CAA8CAA8CAA8CAA8CAFD29A8A1A87DA17DA17DA87DA17D %A87DA17DA87DA17DA87DA17DA87DA17DA87DA17DA87DA17DA17DA17DA17D %A17DA17DA17DFD29A8CAA8FFA8CAA8FFA8CAA8FFA8CAA8FFA8CAA8FFA8CA %A8FFA8CAA8FFA8CAA8FFA8CAA8FFA8CAA8FFA8CAA8CAA8A8A1A8A1A8A1A8 %A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A8A1A87DA8A1A8 %7DA8A1A8A8FFA8CAA8FFA8CAA8FFA8CAA8FFA8CAA8FFA8CAA8FFA8CAA8FF %A8CAA8FFA8CAA8FFA8CAA8FFA8CAA8FFFD2CA8CAA8A8A1A87DA17DA87DA1 %7DA87DA17DA87DA17DA87DA17DA87DA17DA87DA17DA87DA17DA8A1A8A8CA %FD2CA8CAA8CAA8CAA8CAA8CAA8CAA8CAA8CAA8CAA8CAA8CAA8CAA8CAA8CA %A8CAA8CAA8CAA8CAA8CAA8CAA8CAA8CAA8CAA8CAA8CAA8A8A1A8A1A87DA8 %A1A87DA8A1A87DA8A1A87DA8A1A87DA8A1A8A1FD04A8FFA8CAA8CAA8CAA8 %CAA8CAA8CAA8CAA8CAA8CAA8CAA8CAA8CAA8CAA8CAA8CAA8CAA8CAA8CAA8 %CAA8CAA8CAA8CAA8CAFD39A8A1A8A1A87DA87DA87DA87DA87DA8A1A8A1FD %36A8A8 %%EndData endstream endobj 195 0 obj <>stream -%AI12_CompressedDataxiܶ( }p}cL OZ^y g/&&^t[ 6.udĦZ]Xܑxzyz3֓l$b~Y?mDo?cї?}5fCo+o_ oI·hzvs˯竇 y~҇+TX?|_LTXsmYhlvx{yu(̳X 6>x>xwy~~w}wow_zm~ͮ yo#I#~+ի770z]a~E5=Tg,._}{%/79hgi//ͯW4U{f}a?on]DiyMhO= eF9}TG"6w%MU|?nU .7|xu&0%_70w׏iַ~ss&mnw꣔GHf,U*(+uhRfk՗0E?¤pߠ;QeR,GCWPh]仗r~wxp xr}+ @_4xuu}#oo܉/y|F?,YW?|z}Ί`X߄ ,:.o{TJַX߿_C/ wXw,;R@w0zi4 ^uzǹl}//GoG?]jBJ~#p-ݒ{Н޵OoonW] t-cϛwWo">%%?.7/|UB% "Qۻw(=^]PoWPy8+6uVK w4]Qhv)Sd* U() |(ueL.)DWT2Ռ|5#_W3Ռ\5#*F8/HP#0WgqI͜{3΍ܰ=v#O([b6](fˬZ*CnBlY2#|̠b̬Y5<˹s3/v>j-B/Ypt/b̖j,e).pA]pKY-W .Ir S."C]~ +F2l? K5N骠xtpr^ -. W+  @XMH/ PS Ѓkv9y0.*쵘+9f++S啪4fU߹Z[U -f~Y,SR̊Z1/TUQ00=S Fd'`0͡[?*\dSPKmtsRgV+¼To -+rMx& 0YD*UeqD+-0,~#Ap -BҒLVRZʢ H WVd; 1'HJ#aQzf5p6U;uEZ; )SHZOFg GcԼ@(s\HAh"SpCITA3= Z *WqOi\P|fZ -X -0D%h!hNV]N=ɱ050!8LCe\+{ f@f<:tJPU?n;E# OewpI ?I/l⥶\~%h<-r˵x Sf[閫J/|[rUt]&ʷ\zD$`M՜M n ޗ4{ѷԱHg߰QAѰp4DaM=Z Ee; !4n֡N|4ύUYADXyD"94$e uğ6 -Y,9QYe u"+l[HgD@ځ!T@GrqK|aJu&Q¥|lEkZ"<5,CӃ#\baDc*Ht$HL<΁H.KMGg - 3ìY.,*#<,- )75<1<-0%yOp3!$af:# k#ȫ`o@;P R"Rx:B鴄'f+ -*ۖ5H7PqHuA`F4V0QQa6ҬOI(*O"扂&^_$Μ$N/a)H֒pA k"e.EZ4JbגdRf$;$S\&w!\5#  vi've$.ITE1e.\ -%.X5.UDX\UU&% +洮i\V;$@Y#QPb*}$*0919SS= [8Q:yGCט -!,p L-p tfĞ@.'vѾ>=]o7c #@ ڶ"ݚcV USPU%UTft-ܵ - J#bݕe*e͉͝qZ2> -/%_L9"噌lDbCqd! *+'2!Qb )gA6Q=)ᒻ/Ѱ#5/ʛhW!VK$_{YJ9' IrQ:}[Hx2H!\ӺhN%Q41x INH]8Ya*U 5?0"l%2# -4w,_^@tX⭳MXTMJ˔g*἞{^d+ 'DUUVeYiϡcNقJ\)'Kd=BK\''csfge m2XB$p&Oͥ2Τ¥`ɒL+'P0ɂqBLH/>Fّ$G Bc]dlʋui@4IT$\lFYq[lz$hYv s {7q#!_:*ΤLYT"37z_yx-㱋 ^k? ~3~UoY2HsE&T|p"s: -b   ,}Dڃu(jb^'rcS~Ep݇jE/֖DtZ|tyGע)NpCEd  @Eˌ؈W\EHHQeJ*ڜ.lH٦*[s،8E{?Nْ,dl9D c+(g(,pN%0- ilD& -(s!*'gn;2C{J O~ϰt>$D4w%;"QXL:v#+ɝ?W?٠fvr:?EedLTTS^ՅUzN #Ƥ)QoNq)`3I/? AwhI0\8!TSz $?DչC;t;?5yGc%9^|mR А:# -‹0SVgKu0πZ4l'N/\Hʾk -Jla;aӸD6'"n_"n_"n_]kzq|^|Ekw1t~vQ 󛔚tTi$f秾hL~_["Dedo)$3 ~"vO*kqCsCBŠh_e ZꞆ3cÂHϑSΰ"xa;]"FvU1OG6j]1U.Ocɜbf! [D;ȼvƺp,\(+S|MA2D)Z SqLY ֧ Dg3'|!rn -b81G)>sAhMN#+b=2K3O7 I~net D!zI-C W ]s~%)1@úCLbx%B=mYKSkYꪼfJY; ]( ; ҌtP"XRD+nJB]Jg}_gbf<97/8J:Xh`iX A$sYNT+qް59YN(`؉L]hRz5e;j"U44n"(hz?꾑yjUۙהꩻ׈KT!|Rp&n+ёݤ# )?#wC]#;Ftغmq7>ʮ3FiԈYg$a}RqAZ^@< - ُ#|L&"y*!Hq#Gh^̛5D={a?ɇKxZyk$D -$J%{^k츮ۚ%{2l#y):QDkm*WP2rmU> qq/EI>L{%AV*R91%W- @ߜبA }ߢep*fY\RK'v>f{D}!NSeੜ]mGeU5L!iJE૝LKG&)%OK95 LH@Ǚ*A*N*R9""D#;H NӬ$X[$%r8f[R¹4Ye."<|Ss f>^t>9 ,.\* -̙&jpO 9>8Qʙ7t|K nV|Rykww(-D-Tks-yRM*Sۭ/Zxlp;1xtHJLS~04;bkP莫P W]_Q|!I_&qJ J xJ^KGӈ jA0*]:KO;9^\JЙm? ;żbz脳K̩ 7q/2؝Y /Q'IJS lS,.8b*N:?I擎Bgav5b[@xFy^aI&~O=(;J 8.! $.![DQ1 |VyT - #|}G=wĝ43c09>h)\81-8֨龿\]|CnKt~9O}qH%6,s/jij|&|4.BHkv ͞5_M)]Y9vGyIJrJnM2Qb9wOUbf"0TX,D-@WÖ3oGImmDF"I:2[QikZv![,EɯHP2V.ٯ>O ؎LtpQ;Q4 2 bPa(gaXPrO\0ʥZ^LH0l NPu'K1G![SU2*\ҍe_`a#5t+'0!Hź\pZ!ReݜTSlsdr%ʞ%8 ,O`A2 &.Y$+XPQ$$wEᆽ"_!e`$5JD8o$Hn0P *a"$s i~E5 -碖^t-2c!@Pʠ,{gVL[qgF$nL{EvԜ5!GhxjFfjFwUi&E&ͨ*tu<X>A˖lmnY]yh -VrY|_WHWB -|ܸKXɪAU6@:`#'tTUfqbEQyz[* -Vr5>ҊӄRq03Sd7st*9.N9"Hf@DFx >+ |(\eS+:Bjp7灐,Ve yt< ׺*?ONכO;ݮl,H6T (3  -_CaP⬥aTU|rPl3WIuOV$ -*+2;' pës^1gxu'JԾAi&. %A{NB̒ZܸM|@™N Gr -VavEIt :Y5Qvtk}+p43=RU;f˺_ʟ_rI bTꗚ%t %IIʎIsJI%T+3~ NѼSyYW4'S Q+>tA+b\$~E$]ʒMrawV\p -yB,#v)XCOIRJ>)C4dRH!}4*FJ}FtUW"+ ebwW¥*vXqHr&1#gsdKj*g -b9st> U@u]rץWO]0/u 좖c.Kv60rðx=60Qw٪sj(СYC hlqhe]I)DQ$|i Ҷwډȭ+RS8ȉdEBGym({u=^`z*KO͖X̲T?cdޮo6_]HQkUc:NڿMLF.*~ tb4"18#f:>ErlH7Z;wL:EG^=0M[D ZL[&GLP$$[C'B2dܰn\`sr31"W4:p탮5=ggkK,Ig7w;j ȯr\} H>4M~<~|hzV+ wERk?%2L ?Qx:8L㥟:aN8tk\wӵ=:J#ŽBgduu5Žx5O{8)IqН-&wI2t-LCsDK wRzJ61BڙYU%ٶ^dmuq9X Y*#FM$k, Jv;aaX 25,>vx|nXJ,[8nID̋"Hj 49EOFHgaQis#nMؐ!aUkd0#VdZYg[qd;Gkf>\i>7k,9,|dQzMPS[;6;T$J@ṽ幾鹵CYϖ9|半M_'W0.gl_  Aɺ)h'*6eD̒k\R傎Drl6&L.RokukYR`d i}Vham6ri21*(Fk9aC ڊX}wZ6N){N99{)hhFmԊ%zMAaQL1iEr"%WUr?ex~ɕ4E "}(Z$D `xƗ6 -\ 0' ] wdŧ{ȣNS%_+ P˶O1OLB\w# ,zo\v{̀zG>ģN:CyDB2`Mg:mn -A+ er#hD{O8I*rcw:q[$?4:xSɻp=l}X%x]$R2ci:Q5Ufky|~ܯL$q w_DkDR/ #)4,MEC3w^2HmL*fa C)^ܘpp"m`43wq-!!5!""ٰK4D"44 ;QbD:0=qRs{?Гe )"Q-bѢ&A" [p/=% vRnuNvW|1Z]d]L*+:XMu甂֙P AW?NwN80ݰ#iAejFҋ}B]I)o80ߢ8~gn&+qbDqt;TPa@RTA*`+#>&-&l^䮂4駽mn(AAAAAAPa@vheZBf!RY5[ b>i9x\^c / yر;CԂ&.H)bEuE"C".+[Yrtj|{kh-$h3d֢>sx} swZr%s)́qFjO<\&K_ϕֵa@x<`dJQID7 ԇxZ0 <l2`ThN4=bZD%*4a3l"@eCƮ<]CG_.<qK!nTH{"G8f,T @J B2 -Q!2:$#@0Cѡ+ss,hE::@5mũ1OCA#A.8eʧp.VLOPۈi [= #i!~W?T޼N1mY>B/.*N -ċvM=^4='y,t 68>5XCZ:vFDz.WTPa@*LtfU'8a>*=ڙ> y)ɽ?5fc(NcW|7[բyKҤY֜TO~igºi5#lVo~sj,qvVƺWr*JshD׆ozd t I47$~z P='SԀyHf -pyzïfs07u|^)#|\f."v#,Ocǰp[]l&e"k(#pdȝ5\MEi<~O־N^;0^S?QF973m3 ^qcoj0ʽ8Z"%)bZ_%aah$b ^/OKM13S1i:AtddhdJ0av 8&9&خȅ UQv4 I(>M*\qg\E+MFpRV[G,"H#vf$ؒEʻ?IdH4Q(K ڎ\*rGT>R3yhĊXRAH4e_P.}5sHTIr)TR !%BzCĖhK<ȥqSZ KTP9[ZA+!Ôak D+MK+I`4l#Ѕq -!qIxSk4xQrsE88\8&)уt2sYRzj:gP4=->g;왃2с_xT;'UQfUh̝| -J];Ŏ@i3Pfy[chR8숗xpM:@qlCOe/,&6 C&`r&C3NǎyLlUr -X%&+e*%0K#2(ʟRahS\8W'1N~]gAv ;dv ;°`pϰ`0>XTPa@mWhjǾ=Jck3)v=!qUPPAdvG{Xu=$B -su C ȺeE ~'v@#Xt*@Oy&Q޵DJvšSȖ?q-BAJ#F;oG8 Z`= 0 T"xܺF>4)՜I 6:el]}$-4YiLs>uDjh_b痐^X@ʝ{hB -< 4V)F*|S2It!K+ 1Ͷ6>F5(o>C1'qB>, I`ؕVY[%Rd֍Wnzd _S -^YQx̂fiub1!oq6ItB4bLWhJCZ'P<}ȍy,FT!7cn|8U jrSۃ TGY  5Y5 댱by8_5s48lAUIX~6֐JcG54LT (Z@INwB%;A7A7A7A7AAׯN>4.5.W,x7𾿈?]n!vn!vnpPa@ۏXLLfLX ,Jt:kιO3|.jfAcs;hH6$h,c͐$x܁R.8Y{AРРhl5l= py%?Syl}[fƒI07YeЦk(UEC)U;i[1"Z1Q$-µ;Y\9Ji\uQ6뢁$lm&,:@:ddG.m-z">9lUm[()|,b=? /O(WpA3mO KGژ#M(hwMΉHlΞ:"89t3Ѣi):Eˁ; "xbԻhU9pRg - [ڡH穜b+YUS<,F9ym94^RwW7w+8;rV RbӝR-Qr>*32uD1 $VAQZWR`Bf?ء {n0{똝-\@JәN:v:sG4hfSK,{|tԤ0䴝̷}Qo0Z؎&PeZxxPʎ~2N -f}&<Y΋}$D*o:f7m%k%-rÕmQÁNd$7}?-8}Q_sn}fIn2];ynKY_tvo']' -WIY_)cwؖ9lۇ-ouZ| W@ m@Qⁿ| !$xh7%:w):4n[~\Vk&9J|C֡wJɝNV_qQF5AduqX%lWxNĶY߱DPb{QWۉĶ Jl1C\Vkj֭.6.K %/ `cPb~]BoB ?d 5Ҵ2y*6Zx„%O*yoQ4FX -+C -<`I8NRL48 -Ub[Nb;A=EPz%V*p|7A%,ز_6QʚfqWֹi'md:Q=9I 'Ix;:Y#w6엁;DFebVL*jiWr$tѱ۲7u7wP,Jpo:NÎovt/)NH!&Q,h&k!tQ$N-txB^RکG3ųq`: -?bvV(W.Uz8a]H>*Xu83E'.9)pρ5CMjM -4ZV Qkd -Pe YQl G2Y- *&ʳkXJűO5,NI ,'6ӪvkZZ[0,B5taqkd -Pe b$,ҀK }jĪaK@VIg!=I pX4{Qa/ q+$B LJsq%sO@ 1Q!@j -Q7p3U]DXRUoߪܽ.AV dJ~ַ8:@Lߠ˱ʪjˇ_G_fӋǛW'_^"Yf8ZimŒř-,J( b2d2+ -Ua+4ayCa=hK_\Hf1\4 LǬrU:̢չuBܳ]'!QifeY^T<_suBaQ8 e2r#P0T51+}a<ap{@H ->ҪH汰& h)ap -V897dI带}~&+$gR̉@d&*J'sT@<)\UZŹi -@1NrC: Q}B?\"h -QC416PFk'ͨr - -Bes/1X*AfsWXA"# 7]V(r"5k: 2{S[gHܵ.th&52H*a" ǰHbɲj"1h"ӡr(Ahsd*|rUVN>Σ,]eyԎ,I) y%vCc72Ȫr̍G -sBB`<LJieL*_eI'C)0V~Z˅DMLJ"3y.;ap-Vf&ѭ,rAɫ0AJm --O^}3힥d*̕- y.)53sPTCnZ="TP9Zi㞅en -_kIdNb5`3YTN'RRva"3 -v+b`2^6U {ٴ0^$eV+ =QDjN8ÄHo{~bjA-*X. IW\8_TP9vȗ9F9"({k.etFJOZsP=%P - (+s߁Pl *S*U9Pr\CdƷ^WWP:|N~w//Pa?noC?׏t[~wt t׏כۋGhxf̥ޗ@vz!׏7_F1~8 PD}G\{_cKjPi{ppGv{k]Knݽz% ݃G]G:mwW8w߽߯Юn.Qˇ=4"@Ff|}n~}{(_ݐ|c:X`Z2s4tPv|7Kxhvy4WwoׯdƄI-^lތ_0{OU޾qԠ ޠ ޠ ޠgw/a깪{_?]?~ƏG ynHнWbѠ1\.6rg pÛ77~0fIhC~˖uyճqnsx33n^8ţwTPtS.^“UPZZ:ջi["ba/]Pgϵ#㋻mLcoگs\r~wa}{_l {?ndk{%:kD|AǾ@ψvR~s 5=N~ DǨׁ́0~\_{'>[lzfyGPyw_?hc=u_< l/+/{r 鴘pHZfn_]_>9pwݯEъIv`Ο׭\^]{9Gl'}~k@֞ x:1M>O`NY^O -,#[COvK&;nؙ+s۫43tג:Z\\wln[#ozD`Tm]n_n7^=iWl/<5ott92~h[B[C$Ag6#¡Ҩ?9Zecx -TVϨ _r4)=׷W7~>OPL<]|Xp=O@Tg{ -5"xSS?89Gac0^^^=\Aoѯ!4<>'&۞,A/as/c歾Q]0/ɩgu"׼ !Nsb?i,ͽyB[rhʞe6=} 4k !;߾]?$m˳˲ҝlH/DB4ͯE)Z+(@юhB_,,mso'@О=A[,@>y mg=>WzH'qìt_ :òͲ){}[6\6F&ݾ :=ȤuyY?,su{ysu{3g2@#F~1x5ecR>\҈w|C]g#0{7Eg/} wwV̏=&&#=.(ss}RCL6Z&qu 5=w"[@@4j}O7 ' -pOc>H]z7fF_,,t mGC~ǫ?6?^|ճ1K,w'N&e}?r<r7rE5{2) S4߼y|yY`@3qo~ln{7<|s~}k?w~w(jY+yyýUW@Oo^Lsuxx^U/#k}k:DѯQ%?cxXCBhNVweXk ]I/8[_ë+eyO9qz:No@=f5+m~}G (/m.@N鳲;9+۝Oᙃi; v4؝`w FU;=IݻQ߂? ^f({BmѧoyBrQëcQtr;e5Og'M ZbgC_=sh:Ï}3㚽3v8LYΞQ!TX;k_hv*"30g$ y>bީ~R!ԇsS{_ܣ95Nkg*h ~O7Û77 :j0o.s~ _g^b#ru  GSozNm>YyvL3|}H|B?f='?iլՐլҠ^ լgTA5TA5;_]+2ϾH]vS`ِ|c:pZPڻ`4j_\??޿~^|llȏg͡᱓~/7Lz$A7}G:rw|C]1Zq|tdw~?wAxsxX_wճ{4Cᄿ̽1? ~;.Ǜypw2o:.|u}n^;`mOt],Iz X>,}[0grt -CCcúo9S뇠G@S"OUΤG+:sS#/3xBh=*&Y bk6bkz6'GlC\U/'dK FhAĽM՘iQB_OeOYAtrǻh3<7R8D~jb'$(vZ~۳˱ѭ=ۍuFt뫇Wg5{i;cldώwR?wl O=c9tyg>#4||ai`ѧ³.Om9C&=DY, 9$$: 0k%?Fe.LF>^ zw 2)'ZYoXXC羈~ĥq1OȎ118:=F}GQ DTJ<ԇ[NC6(EԖ=;a8-|}/Hz++ujzXԨ_VKXzer5l6Y?L>cr_5'ʡiC lP}!τ 11Cqt^_ -*D2Gdzv*NېN;i,{6'Ի '@Wqwwgҡ?}1Vf(,2Xa iųͯW ;#[/y}w-yJd)x Ii2(j)C"w}EOC|?+]b?*&:zʉ R#M*ӣ'(kKje -JXBKE|jU];2<wջBq,'FI3z"60P=S:I3UGRr_(yQ'F e%0^]KOVwh+<7jm[cEhh&*(qd^a0APR4j(m̅/%N?:j/эtyk8qs7I;Sdq6 ɸ q7")rq۠ 49nB|9 _AY& ԬQ&:Z+W—J] |#eʼ5^fQ\#,PJ4*U]&6 -ab@p`sc2ptLLKrk*&E&rDʉ69;,P5Yo/Y+I򪉴Q,%`kK%0 מsilYM*L2,ghhwXͤҶ"˭!) 7 -a4w+@ӪV*"`<33kӢ -{k.ޔA뒄e(}NWTħIl)BI`( -57wW >d/^'ǂrs)*g'~JLl-Jxu" rj p.lO5ށjT/8E$H??:~_jW_#Yi7heM}dv* -tS1 -i-Tg xCO~ ǿ(TX3=43HL}?_k5]@_]@*X(gRP"ٯ)-qYVrT@ - ښ"P9hs%L2mTVTI[XR7;}&p(5g -ʃhdZAΘiSaڒc׽ J'lLk2ݣNn'UסЈ\qs4pR~=[hi/7SIZ5}#G99:G|4g/B[:Nۻ4 ǃk\kP(Iȁ +ׁ^n﹧a"V^DԱqs\] -W*h+Zݺ;V76AbKfX찌K/7Iƒѥ~Ekgvqt+[%~f5 -T#H0mo 2pW#AKԋmU[d#yҲa1R!yu;-،8v*"QuSlYg*3Vb`,,/6o!st"&rstn;1"0/.G ';fVʕl8qoo{BaHU6lT_fkq -^ -6"~d5LGep'4:;QJjy&96O8a'g8H9His8:92 ' -9'˝;`%I[fb ie}J81m]ŒB =??  &s `X9M ~K$I,(H!1\#5*TOjUo[Yen2H4nD1$ UF2ڽP"6^R.sɮ`2<"@=@M|8R }xv40#S]=VP>-1,`F}4߱T_n|enw}( =A\_5R NjY;ãrL j9 Yyaf -C }kRv5$L#fئgOhږfRQMQj//kJҁ$dT&8UUHlc4U*7wkCTUu|1=*Bz%hOJ(9wr K*dߙw`._'MȏLE%OQ 1w,iҁ4WNid&{,I'ypa<HyVImj -\.jaZ-"01~{|#/"ME B%-8Փ;G! t끲=~fB 0)E|%)*_mu 0-vSʬ P `YdBI\SLi%4uc0~>RD KWf -7?^R8nԩud/ -g ;p<}pW$ Oͅ`\@_# XPd&7+84XP/3@,p_Ip} gk?~ 0Нw[Hȋ7E5Mj!%*B;$qcӿ?pU)SVn3hbm}p6s2jBu& [4-0nU"`r5T& =9@}JҴs ;?f@Sp++"S68/s|Ͽ_Nµ -ۗX5< 7f@K^l&l~萾4!ЄP>n k-8 r͓ӬJ2J;xCUǞCe4-$@fh("- -{i,՞$~[G8{B؆DаO6U`&Y%h+Hh'tӦF鱺oV0hܣ+m >jJ 5d'"(HvP8׼TW`7ZE.fS܇A&)u&h)sox> d`Ilr_&Zvзr.zZդ4{_D=p ])tIe +h 2 -v4kCAN-tۺVr)m[dmDGVډO׺,dBsT2ln蜘/ y}'t,c**iV.l.Fy ^ݶ*6erK2g/x73zlb~|&Y5FTViAkC: |GKu\E5+vWR2D L -5怚#(;,{MqOz|[:t^7=K+:VQ|uc>a80$ŧ߾`@|Cj(8&C%*λ% E4h"*%81A.ܠdOSQCTKYZ(os^p=` cɈN]P&p1AN15ؤOv -5/E)M2NhC\mVD5'"802?˘'W"ͱZGb3@0ИYD!&6JS#H7KthhOk*͛Rl2[{%BOe:Vla(,EWt؂lah@KZPGH"娻Hs:p-ZSCkn;/,#UJS6E 8 *y -­,yޞ>z'A`QuG9&@˧cIm5O>ܩBM&}O%Jt9H25p|cܬF"D_<ۤ~P7í5{p= -AjFh||ܬc*:b +z(^|W=uԙ1ML9jkKm]{A-22#$+`as &Yi8EspI_'X?EYJ2C#IU 5r6D:b?,qHUJdh%FrNh"s(f| lgk -=W@+u.:'Ȳ#_G p*du*\IJ"5+2W@BTB .CP`Y`&W3c0?N |E: ZB5Qfj0>9rMKxAbP kO񰠇#e2e$ NnYLJ0YE@47| 9 q!xT <>ԹpkT0>,rVetU\luJm\aJn<PRĻo6\ ~zA -%So7*bS)p.݇OJ?gY{\`#ɑ<F\U_'?ܿrkH (RH%~J0͵E$+DIј7PkDp *IgUfӅh =t/7{|q@_Š5Pau&ze2z4rnG *.7-2LXB54F@$32QY7P/=5.% 0\@֜éBJ?_(-P(Afԣ Ly"Qq(Kxz&^V/ũ}PKЁZj D."9ʔ#_jq}s8hLov(HZH\7B=MZ`T5P"AWF'6(qӠ9+y_S" _ǘ=` /MRozl 6Ӊd-P1\'] ^FR T i͡ ,ڠTx@g(xZ|oB"TcjXIjo+ONǪZc;|GΑ-6_],PgJQNzǓC[HN*A&'8+ iBBE7\۵\CסN7 Pf!^BS&lh (@A]&U4C~?{o !AČ -pſ[oK?^!|2OMB}}?ݎMU1ONfYQ͊WD" װ[1^=6WD -6.]5{2_Ph2xVf! n! 냻tRū - !6- HjFQx5 -Wd -KMF;WFgh hK0=Xݙ/j |eOhev^buk>@^0h!-Sƻ7q29h FW 4_ϞيWzG `G2crN[wyd(`a өv j utʠ2W ԮfbՒ쯶a#VK`HFJcg cTV)kVKsxdR`@WD*+Hr-UbLLÓ+8$hDGx0&' D&V7|GH,ؒV@L9ˀY/jXWF0`soȐ)ʃ -Jp#8C4 \C r`\#wpPTN1$P+ >d3 Hlt8xYƛ<,QcӰF"d)$WBA68ׁx^#/ɐ~Ǜ -ApǜdfHwVa ZUzhnkz<5 2OV*cE0~g;JF^2G"q`4:dOOCe>@3YX>o(KQ"3<vs.Bt:k̪hܷ **<BXe¼ [ .#Q>YcY0N ASeQX _riƁ wA),sY٘"=KQENh(eaD?ƅ&2wJzTDv2v9[jHJ.aoJ2sd,l!$^XQYtp$KXJ 4QE +Pd% Νug -"OpDU bD%n"w "'6H;yg -.0za%12 hAhM6e:#LAplI!寵5s $P|tb(~Up\jg -n!2gp(( G^%Porb -]#XuȔþ&G"2P}a-IBʌW!E4Fr81,ex -!Q'KQ]D;B7h#Y;D?aw@wxADz"Kx"2ho>1lP)ţDZȑC^J`1LNs^a܆ytgbT*X?`k ̭ }f^~ -jkD^~*as/?R -DxyaA$Fb$Tfr)2} n :.+F&l`9K[CqiTY,5 E+P+*"+ Y%8%̡( G<DE,s.4$,xh 쾐4F:N\-BϘ -o`ldwfh0''a\:#(nFŰ(1XC>4hVV.|tsGˈfIɼ3̂α%{%:!ܯ*:b"L]Amō j~Im2WB)"^D ]GAmcDB BAAq +B0Re&\k$4Qh~4!L,`` --řhr0A@ޡ*T2g!#uk!P8K7nF" O;CyX#SԼ ǻg# $9JǎlB1a|sa)5Z[8CT;M)AhVL{,"Ww@wuugM-3M_`8߂D?@1sIDy\ylGzE.y?3x+Z -(PY-)HJBtK>4xbW A2hu>5s 99[ &촸aLHZ2NOXB"VfҫH}/ nmuJŷu$ɐk'~?A4{; iȇOyWZ2\M R$K ,%OeL/0Xj]ǐuX`GEh -:ܩy}p/<d}+{YP Ӡ> 9} 芺4ݤ"ZeXё j=%;D0b 1q/' H!|NO'|k;47lmnIµEBθG$IQQ1Er`)vqnr+lFr4c0l &M e+7gz*i ᯋ4^dj&UM]{N%1+m!ww&Hnp" |'gus/n-x9XbIF.$r ^9rl ) a ͵% c]EWSoh;.A?J7@*t R!b6>"hGwp!AepsRLJU\e,,s di} # e^~AjToN] Ң*eNBhɕ6,bƓBe:>?'B(v)+R^.9v)ϱK#3b,4EQ]WE9]R0D|W0^5 lZD!i H~RncEZI!rK?,iWzcW(D_q:/ -RLg7,wQuW}:a`7:ff)F\k0~d&ŕ&rmay_,6|Y:VAGP9tJYRiXph"#20]o SNGc)@Wø\$e  1JShѱZU%{9]&EgLt=Ooǒ%p.,Q6ڈHOMܑS2`"DDM7Fy!0h1"F]"EZrcD )mԪ颗~[w5#vy}Bә/i2e -ZRI7&jU$pe ҕ㰟(L*T0B%ؠ:Y:]/ë;$-u$vog%kwʹF'} PQV0nD]8]WtP,P߫OZuvE+O ɪ52.Gz7wVTp튀n^".u͈UԵղ+wW!&TyNd#CM` .M. .OQI%"P8rx/U:,@Qzљā&J%|Q/JE(OO/JE(ՏT,ucVQ@tjgEq_$k%}/EH֯C/EHuHEH"Y -¨d1'^ڶdAQO'$נ?2'B?Ņpr|1&$?7b_&OLƠfgU%Dt]y{" o p,kP^nHo#Yp#Y &qÞ>}/3ӨEdVq-5-ۄߝo?|%P -/OnJA(<_^]yzR30bSP鍹`&kI?ɫ\k2z} ?B~r;῏P}/ -SiBbmY(p&\⿞,7k\+PvAT.%HG+( $K">?OCOak׃_,_}ك؃)W ިv s4ޙYH#QMVޗ#[')osi<]4Uw[[YV5nMcm?_2ё'sN8,_:mn[V҇5BG7:K֠+[l+WVؙOSj_.E|;^E/Hm,^M3Zk1v6&+ bh5ڙ 1/Dvzu<yu4Wݕ;^APJǩ&׃lmhlH&iu[7N^ˆ*=eI=_?6WJ]:/d>_zOrx<\ ؆9Y)(1MO׉6j/ҙ G6YKUX}~(|zG?!A4n*&6yj8_iwSa끺2wߴ L),(v6@;Zxf%oEfֵa{ SNSUxsSo02/FӌRZ+K/f[38%Au \~=*/c,'jM,S3 *A,d./(LLPp20sLQ؅OW5<+QeEyi"s"0,YbC˱|W] `cHU A -<aT?Ac0T֌g871N!d2)9vJh#tـ$kSWR-0 BUDIVr.`|,4 r,S@ˊH#|0 -_ ЍE 8UAhycGg>9|sR$vZթQfm1:Ӹr;?G % G u>=&q]R1f? ?~vAoĂNé?/؏ڐlSGszuŏĂOЂy 鹏cpi'RO5=>^g&RU ٰEtezL$70`B¡ACt9п|B.vN *~ZZcX1? h()ONѭl5) -r߈2pҵQGg,? g:4W83ßzZϰ?̜H:N>*Ϻg/&}4A, 3`cQArkICym]Vwl/;Bg`2v]Bc]ߙuDNƹ&S+lRS#9GLa\-RJu<_Y}2WŊr[GZ #XgGLcxm&CMW3:̫Ѡ?y VVEd$Lc4hv>$=F|XҁbM,Iut'=WڒjwUs&c&f8Pe.O\ vP҆4(ۭҰb˱nlUٞ8˸ qQBpAfTV9۸EB |9:aY[RxLC`<ݐƣ  II'l0 #8Yp`-a۞O4hUqB 3Mt:"ixxNk@ JLliI'"WBnv`mA kwdo%x [䫲9~MA9ΒPk -gIg<^GZSxCζs$/0l6̋$EZclhYԢ oix=jDE^*abb0编9ZfKunxZ]M%p9m2hW?r,yAal5 1Zϲ^ 05KdUkvmBV?xR rZM-f5:^E[!Cv_*3#^XoncK*pˉUKCc[!0H{uZK C"b-uJ :Y˹kWA80tq<;hrR`#rzuW*fz,k˧*9~؏ isBXrHˢmu0o*nNJ :h58WJoji[0Q`tDm;u"{AЂ ˥?2g%}:끊 -֩dG8S k ~olOU -%~S-jF^օe5/Fٙ!>08~Xoɪ}X@Q`zb%Us.fmimYuuW>ZH删HvNi-sL9avRcUdGi`>!>o l; t:]{Bp @㞲s~XöGa@\1a5 y 'tхg9ͨ+D1f#Gʙ}1[1fѮPjwM+GF#[[**ہаu5Erd}o* -5L{G01bxiotЁx Ezs^Ekͨh'##V̠ >lY뎒 >S-u.]4T/_߸ ]w尺*!> - ߵky`2퓣'E XfŠg -FP/_ Rë {p(0KJgNxfIlIbB_HOsCmj>5+ ؍1ye%zf.$z`P_53ʭ2) pW]l}8r@EZu9W@ZGx*=CeNJ)-]EI.W^uͨr6c2gɛw@ԁojaաi+r.{8b?K˔LЦ6|v.>;A +|\$\ o:*XX kɵ׷\:e a^(_`9e55d*U$m(kuKk1!Ӫ@[kl*u9z"(*\~ula_a_WV]6l ߗSnX[3OvA*I 4rs,K4 Lo -Jicd$2, E0_(ױv{B0mG9;£-0+ypW|>I '59N/+e2V"IF1&E,t4N^NbZ&~X%əwOˏ3o).#2q3<\FغNu7sT]ؖ6d%Zީcb{L`f;Ɔ{y>dr5Rq)߱Sxejl=}M!C^=Sܩ,<=:>o`-[Ozy_0uL/si}:4ֆ_`QlҞY&^騞xC$Y,aDoxc"٫mwhD>Z5V`=j9]ۺ|3V:eObЮȥ.mћH=]Uu)K?{\{^2%)jW">zN2mߗsЋ,e}uOf_hc-W {.9x\'\IkhB -<` ( Nt2>:;魖dނF=i[)zyy'+8Yڪ$+OV?)?zH]`bb>ƔNxxh.m?(gOҬ=kB7RQ.16/\!El %x;T_}ĝp7DF?)H#m'.Uhe'YIͅ]бp+9 ɅA ݔ.Uf'^EPpX(G,b~%;8)tA{8y:ɥGD9sz5ȧ:Rn[cwÊ'63 /~ɷ:|( 4-W#vfUUQt"¨H+ ݗph*d'_N#Bx[ɏd(i9@cPJVNJAe ~>Xdw\'ݐ5ZgvQ.N^t;r!!ۂ| 'o˽ ߟw.W)4OS<"{8 Bs{:Rbu櫱=iwZ@l웭`<&5YMҭy"a(ӣ+' osĄa)+!qUȥÓ t},zJt1W]zNס%<(">J"w_cX R~('|7B}B8X]Щn"a >nՈbM c s!$P`t0(NE1lbD0E1h< L80 B=@PFxZ;b/^|Ү3˰YZe@8M#)= Z%C_֬h#űZ@5+Ufqe)btsLp9CE@٩^ iZ0ٛn`z4i.~X{90fjU6baDrVZ#,Yă")Kͮ jV >j;Ԭ94۷:1^H -8_Le* 7%/D<0d긗Kl{Û LDM&󸲓2%w0{ushЖCpHZdP BXpС*QXS6K)9zW% -UG 6%'/zdy\fňk'PSp_yOS%a ;6=S!GkI"s4yY@R<|,$ωlΏ!aaKwVk ]4&˗qq>*GZ{"6gTRUhTl Q &y˼]?[oR$z_|_dއlc˝G)Fc&Bڱk(p@;8/DP;N7H+3jNSH}8g+„9נt'0)2xnoah?-;4P={y xcp2;0P˚ݾg<ӹ gDMxJ Ӿl_ɹO.ۛp^WZ(u^JvO rMr@`#{I[G9pwm.{/??&+>NOD/5=T!٫w; 0Sm ߂wTR:unAj"zv8mLJoʥvK:0OFscëvr2as:NpRҗ -zWɹ@e;.}ܙoq -lѱ{S&“K\:dPbm ADn z?_.aԻ\ZJFcSţ0{+wvsP9,XlIx (݊{9&H7i%}P(knkhg~v޽ T|)d9(X +EJLJ%rɥDDLnVDfHGJRV/^U%%L1K#@U -zK<#ZXꠝ؏ ߂&T{{|n7/cZ35ļV]8%GwRld"!*j7*\4N߲uGzUwgdd~Bگ6D;:7x4ԣNŗ~.m9t_Qi:9>ޏPQ;/rY%/6_H\21S:9)l/3Dž4hwR%3Y^5e -{ uTl,PROU;}f!IpeJ'w r&ԝ`EC "l rٓNp`a/Pȗc)ˬT}B -]K&:~lǩ9کƷ-=Zq{ -Qx\=Ol(g 'KLڸv%" ^J$:xڕq']:g4Apᘓmꍜ8:q:ruР"'mʛCRJ]iY)Y\r Ef -ֈT#^Nr lo@^,^nSP~CKa3  1qpzCV8i̱f - Lp睈܅S##|n|&)Mۡc_!4JL~>98-sdGh -n " c:n|pZuɘ)g1"*{OIabzAaS8x=a7L7Hq, Gzi={O2gׅx"ZRq$Gcp ]AI7i//aэ!iz[6Urux{?rm2}'FT J5'BM)lμ I,.M锱$Y\ /Ad)1;MӦAIzgՋL-3;HMzQZI,R&;ޤ%Pxl!y$[ҝ\y92$Kc;'Vvt?d(3-WTF)1:V˼:1l2y/H@۩2Sc׵,{ZbLF -~} [c crix~x@DBS8$:ʝǀOe!;r7eDo>sId 9oQޛi*Lp,{e گ RR:\Oƒ]@W\rvWT~({޽ڛN%۟a_m8Vl50(g֭yZm#Ğ}Nߓvޛ;ZjQ™Gtoek:x\s)K>&JZ~&Zghؑ'=8 -OF˔+T#Gr'1#T'O&<%fs|q`#>JZR%t{eݡT٫k[t}MKpaB=d;Ij,^qn90WO9̕;q?r/t:5] ߟvK^ -erFB aN Pl)M{u )޸h -5br4mISc.M|IET_3Ǖy\~%ݲ0PӑHhDpKjeeLs˅a.sm_T>QeqmOW\+j a -ʳ=/ ];K~|5ka/0߆fdmدjnFo. d5|9qr8?lջOpT``T~֬W'P^M[M;a+.]U#$4OKI҆k]F,kd<\#F빜hKd_]+t󀍱O\Y\d?H5mUk ѮtfU鄍DMw0Bsu?!5ALo{u45ax^#fho=2~5rMzpx=kÍe&5RQp NFl_β9TȄPo:>ބd1,A$Y<ֈh8mfqv4Gu0]i`ZEs ]U=hv֪;֌\iN՞ꬊbn"틒>ӜKt ]w9^o []j,V4ǫc6",Jt1')2ǂ܉RpN`NNɮ;4}%ܠF5+gJQW=֓) m!-$ -iK7\1>IH6!C궳!NwF3 v'=B-R*^vg'j(쾍LP40*7NzvO8H%j+wrv;i௿r/{g{mnx=K~l ᱒_;S =5Ộz|}1)^-\c 9? ?~R)5ȯ@ +v8K~@͋}ʓ_P;n*xāEhD~XKwxP%KS\:GJF&]{.x%IfZa6sI2vT$TJVG\6Xխ{<O' ~0q7L?2[{{_01gƃzlxo\bXˆx;;ukH@8%M^in?YvsV|)\أ[R8 E~Ke#?3v,SKWM߶RT[=#x:_ u${I -9-N%~kRHi:3B:^ }M5r)<7ܽg/gFs-ϲUfw<4JS!:S[Sa{ldynSYOVMIg_=6Dj]f\ gih 4*޼wq\WRرGx}KuQUO!mϽ{s{v3-.Xu{eu}3w:@wGfʽ{t=dj(bn[:w#Yw񖛟\Jnѷv=On} Vs¡{jd1ߵǏWWwݩ;}yvg}-wpz>M}vO*ϫɖ\8ܗͥjfwϱ&Rv?w/q](7-w/}mnCww? wx;tɦg:`6C#&sE7y6mft7t󢼙{:6 fl~"l^t{-CyHv67j܈%i: ^[ux/*mi{qs2l 6^il?xSɠwFٛo7'DZ,~Z4j] vu>AތJ/J7tu;i|nww4%^u\}Pz7mͶpގGS}apVo-`iÃV׏E'Hqx3kH:X -b_[a09u"G~$tqQ(uIO"g{c>rwy!(FKOUO3Z9N6}6E#M5w/sճ( bHyvz>̔Ûf6~v+B2x+\҅75?< -Lӣ +ǣ?ݏcwOWDS l~ex[=s o)6N$JO*--uiRޟ^C,|e~s{mo)&ؘ+nxA)pᏔMR"ˣrD]j,07r_)*FrvL]ޕJ}%>ثf˾]Rea{|m\^)a#n΂kv|ْo3{Nsk^xpWu=Oj!Cut?}^\|W:I3]%\>//?+?nP{l~\Ӷ - qu%JemR(WR~Uw5t|᭕G}\[ ݫ.1^ݥN:zkIH<^ʾnh^5;%<˽VH7T+ݷk!V}z*ۣϞ+ w7onb>q޶_eه^-rx?:j|1gA2Gw%._͡Dj#GoC:ϵL%׆abbG^s" 㛅njߪYp@}k yi ;bnx9۫c)K}N鯭ohpYmid[Su.t}gW"Ͷ/?d hvL#fTFgTTsrݻX]M3}]z֙PaΡHN ٓWڬ'mĚv.9ϙ^dOe{`;xeUjms&5 -glOJCm'rrzrG&\o'`.Nj^YT{ҮiNzN{&{R鴷 gQiIoxvy5trz4?bO]eM_z]\'sqRnb=JϜtT?zSX&RR٫1zyv=i[H3.4kfN-f<^VL6^ZI/JQIsIln -L[E31Wyyl&mH{JgĜx)r'kReQ:β://gwwdR|{lKg;Iwik}y=,kR8m{N=j5s냗-2)^tgҫt=z-'vPIa2Vq0uOr&JoIuL%ʭ9齚Mb#*Lǽ].Ia9f+C藍sүgɫeNٕ܌0&aJ[EWcYN&=SI/wȤ89pػऒgp>gґgє4k?JξNEuNno?3gs8?p x][*ߞoG/UUs{oJw ,\c.,ٓߚTkWפ.^Ӻp'%?gRA'z͝<ϝ4Bd)h4wRSؓ"Euxz,?)#l/7pswkO |zP΍Cv;vpqKz*EA鶒Xzmy\wPw$$ nyt\<5K'K'8>3qCT^O%~~?e!wTY6^$2Ŭgt3ͅɱ!l^Զz~stzaۼ:h-zذ{C欧,L6$m[FߚSͩkg'{an,ByϮṞai<}m,g60;`Ν;`k  -ro>!k~ #{~e9L&N``Qz-Q : r;>Θi DJT,t~ REkCQL1@`]@BJu#``#&&Z]l17G2_ cWa<)ds(lZUnG3i8v$RQ57!psK$TXe[6K &E!8$Mu*:I>MP@`J)rD`.gNs%żmqы7'ј:f3.G;9z{ h 69G}>hiƉ| :N|ďqA͌)'R,m%ރ,hg萭h#w%<>8>˗_O>@_,bhl;KFbN&3bK,I85ORÄ#sG!~'~ -cP{"㸃eF4 6 _5cKC,Ɖ,t*HyXt%Oi\]vp$NPoq|?? bvpuĄI,<β$D:H,$'^*RT+yMgq}X"JM/n,ohB= /NCDS189x%!,C[^hQ#.S"Sҵ٪7`ZjS8q7'6 暬 -:zsK:Wy*& #V/E^8.Qp `"0K]NY"Ϟ%[WwŽ+QxXg@Z\<_zf6~:Y=l['k.i޸h7:v}Pow X^K6=NZ,VZIf%cЉ^b=1K-'yvZ<̝TjlUإ~xL.zk#[증?Z =%`b7ݏoWag}Wbˠ - Gޤ~|?6/\ԥ[ޤ?vT`]O&/ -~o=Up}SQs`(c+iAc[нbD ) PzM}>䈋,*,95,σZ$j;¸SEI.!"R ID.0OBqlDtgsZqq]E{z'e{qNN~t,^Wӱj&|Wӱ|L8t.4˼,V5kB&P"Gci,Y9j:V-ޟN5N0'B5>>j:OTXʍ3wt:tZ:m1KzkJVӱDjtcdCŬSxj:n9j:qũ 卉On"E Z5zt`)Wӱ%)Tӱ؃zF5]HddJtet,`*SMǪom_,M.^&O!e3y:ߒ03~u|B N_t$8PreBbMfb!N3oQ%rDKB"]Z;av2Q-5y{䱈GHc`Ϝ-+]6w{UIq* Ur %H'ۍU!e&K%.ԣansGkB݉>vpϕv*xR>vl{ZJV?QlP{XFs^N$9^aO/Y#$!t?7&u؂z"4gPxOm.W6 UH>p6 ?& et'67(pyve:Q|JZv2Pa-x/=LV@l* jESvqAyehנ?x @KCL2ź8&j{Z !?D,LUox-:AG 0n VMG!h "<  -<;܍+y=& CFrŤ}u |AcD3;MS^h=XDVd]$R2I~.z;[ͱ)~aէWZ,\I(:7dG= "L7}wD8Sܓlq"D5]^vV3* #LA}˘D+7^K!Dʘܛ CY-cZUU.fDR)2*ߓڕ瑊xD;1@FS {Ce]b5V1_vuw5UDߦT^M]Ej)4 WXpsPƒح~XY9i\8jOV|jUQI6!]*_;rNꪇKFsgC݇m~eExE͓=exRWgW׼"+ևݫԞ8N޺/=eIJ.]6JW>1Y|eMH!=\ex=o;ˇI߸}ފۀI ֤[*NzGp?iyrev`}20s+es%]nqC`WU:`q ztiT=KA.fቓ^6zH%I*66ՙ8tC:zUܣuf UynQI'O+,5EY/KK/@H-'$<-s=Xj^릿gd%pu9Ť He(M3MvMʸ!HZ4',o*в֋Y- ̝4Z9Lkj6r0FiI*}ke^?ˎzUO_Ku]~J -|,be dTcUtρcIv8Tw-ɑoFTe^yU@)`XK#Bad5fv0XX6`0TZM#1!O'v+`ravhBl*@@{HxbB5U5~r*@@ ѫEkz*@X&|_ :LMV}t}'Tr/X8VqN 2C<\hRFE|np⽧lхMc7+:x2ʸ$dT><]kߔsv2?/_*KXO[*IApui.S|˦7?7=n=W: {GK2%:/픆I}m=?OYkFVk=9yY|]>ep}`'LH~?]jWEImYYO*Oge5.6w6֯mm, wpT51GUiy_)Oy8zfs9Z[!ҥÏ4ONN6wY"~-๨I^IEcΝ]ւ=}Ͻ>&t{\.|h7 5ɍIJ?{ݭxvXwVրj߉T?' 4sc8^Z^/Zu6Xm_mt=s9 -2vo֗vCw䍝?oͳ~ h@U;$T`6e3w  JT?W -̥A]A4aj*{U#w+ڒ gM*Vdk9W{e^/zDj^_)k[|;[cgeٞ,o97U1NcQgeS?%2z;Ʈ -hյ$[₁gB)w""¯ve,,(?7| T{/*$_[÷y&6XYEQ-/,> ҧSS' -uxԄ#ɈZZOO[+IOwerd/'}JvĢnOރYj&F {Z6\wR6FArKӺO<ڗ#2by˥4t#[jQuPrTo[n3e ԭnVR&l6_sUh٤?}^`"׍$ |O=P`_4jV.T9+jNB6%&(ogC *ŅwEk<C?LMזc ^m7{beU?z_ouV?vfy,!+] cAʐ0ERL*]LX#cMi^$s~Al*T'uxY2@6ZNZk_x+ꖎyt)+<̖f^^7_g-/D&G|4y^ϛŘ~E_09쓆eD̯'mH:aFT1e_ܒ ?ό;`w -:*o--KoH7fG_3=tsg|}~i"%S몶rJ%Rkm15h +9?mRRV/{8??ܰqWl!@o^-ՅKQ@Fmh Y>ݪ˥ цK'&M4Fz_uwdm,3ka+X7QڞDI sr|Hm\L&6;SR]HT?yѱ+'/,x&;PwSb~x3ƩJ# An~?@X4NH @P- AF{IA0^ ]xO_kuhcgy.F;} v魍ن4q;0Ail>ίLfq\9\zᇹvh\ u{>Ds>;[seQh*/ZuGt-$}fF\MV:}#SnV H(#yNUNȩeKY5";݃9K4dL\7=qX8]X?Wv>6N6?q2wC4Rǧq^rucsB-8|{vD}Izg ?OjFdrtGNZ2ZK* cbOq-7BI[{V'Sa?N-ɻ]vbe;{#G?5c_O*y6v9Wc\u^Rs \3Ou]+/PdKl`aGH -Ɏ~6{c2N81|SaW -VH—$ʁAs)5Vٓse[Ūk$JEva\]*KSr:>w`{oBg5O G2n|^MnΒ'q.6O Ĺg±W߫J&TO?<~=)$-Y>XK7da3} QW,wAS1qJTRBٝ)W.c~GɚDM7\Mz?1{W3u5voIvqE;Wt:mYϜ3N9w{A0+;|Sz$rbފ*R^w6N^\'ߋ+QE;8UUtvTYK2UL^\1oEI_+QERM⊮LWS#JѩDWB1luo"υ;qq{X坟G@kμetq} 8^(۞c2}"$bg^uÞIuldZ,r۴}۬!y2O%Yi3g>{ͣi[!.ȣ"/f݁(ZJcqKoGv@z=煡l:Ԍf⮷{p{&UV[8\͋ z;#$^7Ѱ kȕV3 -tIxLvMŋқ8`S?>b|{՘YcKkY^и` ifwo|:HH%U6j VU4 $ɪ*\3`%CՊj8 RI'nÇ?4%C)?o Y3?ҏ.#/6@Ɇ`wBkJUf=QTTTmP4_;!!F*B_=->?Omف6t$r0#Ԍ*9Š( -|IOl"UKƌZIU]I)JTk%@t JzHJQdrV}E4& SUaUq4Y-U ?mtSI2%5&XTآ ƨ - RaO%*z/<Wj:<ҟ·d ۪j4 \I=/ay*,NCT!LBDKU]#BRZOT6{*OՒ&#xUX` Pte8@8JDs p0Gkֳ}H`C߫P EJ*Z@PT5SxKG FV(R%Nn09BcGQk*e@Hd5dz6&lhK&_5]"p.I@DY Sj܁Jx+ -6x5jTǐ`6) vequ\z _E ESrUH> -FB!Jpe_FސPMS%!@| $(AB@#?R -&+V@U`!p2D-J2*H *tLR+\DoDQH*%DBB4?@4t`EC3?cFeY?;F֨$:>stream -7@GyQP> kij+NeTg:k%U<DmrT+qF/%@*YaS,#g+LjeX>ZwDW-0|,n_ լ\E#JF)LeT5 0#蠆T U\ &!J ҏsp`\o nWz^Jr ՐK~t௺Zw`%oO02'S*C5Yi±U:RzYX8SQV* %̒Qٜ7.}L|'LZXB0ߪJh,#ge a3,7ۀ -ZF40tS9<v|P$s8U1j'DYg6`a00P3m}`^gSJM 'DpGZ1LeV$I@ |D[;'2) Jd A֓)l ;^@1W+f6cH[H6Ep2-x2s9ӳ->gwrVB }^/c@{H™tSDO|\lI^.~WD v7iBsHRD*u{ {_ӨLo0,yG_~2z*> endobj 32 0 obj <> endobj 74 0 obj <> endobj 116 0 obj <> endobj 146 0 obj [/View/Design] endobj 147 0 obj <>>> endobj 108 0 obj [/View/Design] endobj 109 0 obj <>>> endobj 66 0 obj [/View/Design] endobj 67 0 obj <>>> endobj 24 0 obj [/View/Design] endobj 25 0 obj <>>> endobj 155 0 obj [154 0 R] endobj 197 0 obj <> endobj xref 0 198 0000000004 65535 f -0000000016 00000 n -0000000206 00000 n -0000047556 00000 n -0000000006 00000 f -0000157880 00000 n -0000000008 00000 f -0000047607 00000 n -0000000009 00000 f -0000000010 00000 f -0000000011 00000 f -0000000012 00000 f -0000000013 00000 f -0000000014 00000 f -0000000015 00000 f -0000000016 00000 f -0000000017 00000 f -0000000018 00000 f -0000000019 00000 f -0000000020 00000 f -0000000021 00000 f -0000000022 00000 f -0000000023 00000 f -0000000026 00000 f -0000158520 00000 n -0000158551 00000 n -0000000027 00000 f -0000000028 00000 f -0000000029 00000 f -0000000030 00000 f -0000000031 00000 f -0000000033 00000 f -0000157950 00000 n -0000000034 00000 f -0000000035 00000 f -0000000036 00000 f -0000000037 00000 f -0000000038 00000 f -0000000039 00000 f -0000000040 00000 f -0000000041 00000 f -0000000042 00000 f -0000000043 00000 f -0000000044 00000 f -0000000045 00000 f -0000000046 00000 f -0000000047 00000 f -0000000048 00000 f -0000000049 00000 f -0000000050 00000 f -0000000051 00000 f -0000000052 00000 f -0000000053 00000 f -0000000054 00000 f -0000000055 00000 f -0000000056 00000 f -0000000057 00000 f -0000000058 00000 f -0000000059 00000 f -0000000060 00000 f -0000000061 00000 f -0000000062 00000 f -0000000063 00000 f -0000000064 00000 f -0000000065 00000 f -0000000068 00000 f -0000158404 00000 n -0000158435 00000 n -0000000069 00000 f -0000000070 00000 f -0000000071 00000 f -0000000072 00000 f -0000000073 00000 f -0000000075 00000 f -0000158021 00000 n -0000000076 00000 f -0000000077 00000 f -0000000078 00000 f -0000000079 00000 f -0000000080 00000 f -0000000081 00000 f -0000000082 00000 f -0000000083 00000 f -0000000084 00000 f -0000000085 00000 f -0000000086 00000 f -0000000087 00000 f -0000000088 00000 f -0000000089 00000 f -0000000090 00000 f -0000000091 00000 f -0000000092 00000 f -0000000093 00000 f -0000000094 00000 f -0000000095 00000 f -0000000096 00000 f -0000000097 00000 f -0000000098 00000 f -0000000099 00000 f -0000000100 00000 f -0000000101 00000 f -0000000102 00000 f -0000000103 00000 f -0000000104 00000 f -0000000105 00000 f -0000000106 00000 f -0000000107 00000 f -0000000110 00000 f -0000158286 00000 n -0000158318 00000 n -0000000111 00000 f -0000000112 00000 f -0000000113 00000 f -0000000114 00000 f -0000000115 00000 f -0000000000 00000 f -0000158094 00000 n -0000000000 00000 f -0000000000 00000 f -0000000000 00000 f -0000000000 00000 f -0000000000 00000 f -0000000000 00000 f -0000000000 00000 f -0000000000 00000 f -0000000000 00000 f -0000000000 00000 f -0000000000 00000 f -0000000000 00000 f -0000000000 00000 f -0000000000 00000 f -0000000000 00000 f -0000000000 00000 f -0000000000 00000 f -0000000000 00000 f -0000000000 00000 f -0000000000 00000 f -0000000000 00000 f -0000000000 00000 f -0000000000 00000 f -0000000000 00000 f -0000000000 00000 f -0000000000 00000 f -0000000000 00000 f -0000000000 00000 f -0000000000 00000 f -0000158168 00000 n -0000158200 00000 n -0000000000 00000 f -0000000000 00000 f -0000000000 00000 f -0000000000 00000 f -0000000000 00000 f -0000000000 00000 f -0000061974 00000 n -0000158636 00000 n -0000048147 00000 n -0000049644 00000 n -0000062404 00000 n -0000058648 00000 n -0000062166 00000 n -0000062280 00000 n -0000058534 00000 n -0000050545 00000 n -0000050806 00000 n -0000051252 00000 n -0000051665 00000 n -0000052683 00000 n -0000054273 00000 n -0000054717 00000 n -0000055301 00000 n -0000055873 00000 n -0000056965 00000 n -0000058045 00000 n -0000049708 00000 n -0000157843 00000 n -0000049981 00000 n -0000050031 00000 n -0000061910 00000 n -0000061846 00000 n -0000061782 00000 n -0000061718 00000 n -0000061654 00000 n -0000061590 00000 n -0000061526 00000 n -0000061462 00000 n -0000061398 00000 n -0000061334 00000 n -0000058470 00000 n -0000058685 00000 n -0000062048 00000 n -0000062080 00000 n -0000062480 00000 n -0000062681 00000 n -0000063673 00000 n -0000091312 00000 n -0000156901 00000 n -0000158663 00000 n -trailer <<6F85D9CE53C14B87922D34201E64DF23>]>> startxref 158837 %%EOF \ No newline at end of file diff --git a/server.js b/server.js index 1c5e9d6..2cb29fd 100644 --- a/server.js +++ b/server.js @@ -86,6 +86,10 @@ app.get('/debug_state', function(req, res) { }); }); +app.get('/styleguide', function(req, res) { + res.render('styleguide.ejs'); +}); + app.get('/:id', function(req, res) { if (req.params.id in lobby.rooms) { res.render('index.ejs'); @@ -220,6 +224,17 @@ io.sockets.on('connection', function (socket) { } }); + socket.on('sort votes', function (data, callback) { + statsSocketMessagesReceived++; + var room = lobby.getRoom(data.roomUrl); + if (room.error) { + callback( { error: room.error }); + } else { + room.sortVotes(); + callback( {} ); + } + }); + socket.on('toggle voter', function (data, callback) { statsSocketMessagesReceived++; // console.log("on toggle voter for " + data.roomUrl, socket.id, data); diff --git a/test/mocha.opts b/test/mocha.opts deleted file mode 100644 index fb5f824..0000000 --- a/test/mocha.opts +++ /dev/null @@ -1 +0,0 @@ ---reporter spec \ No newline at end of file diff --git a/test/test-app.js b/test/test-app.js deleted file mode 100644 index 04ad28f..0000000 --- a/test/test-app.js +++ /dev/null @@ -1,119 +0,0 @@ -var should = require('chai').should(); -var io = require('socket.io-client'); -var socketURL = "http://0.0.0.0:5000"; -var options = { - transports: ['websocket'], - 'force new connection' : true -}; - -var errorMsg = "room undefined does not exist"; - -describe("Socket Server events", function() { - describe('Creating or joining a room', function(){ - it('should not allow users to join non-existant rooms', function(done){ - var client1 = io.connect(socketURL, options); - var fakeroom = 'Room'; - client1.emit('join room', fakeroom, function(callback){ - callback.should.have.property('error', errorMsg); - client1.disconnect(); - done(); - }); - }); - - it("should allow users to create and join a room", function(done){ - var client1 = io.connect(socketURL, options); - client1.emit('create room', {}, function(roomUrl) { - client1.emit('join room', {roomUrl : roomUrl} , function(callback){ - callback.should.have.property('clientCount', 1); - client1.disconnect(); - done(); - }); - }); - }); - - it("should assign a specific count of users across multiple rooms" ,function(done){ - var client1 = io.connect(socketURL, options); - client1.emit('create room', {}, function(roomUrl1) { - client1.emit('join room', {roomUrl : roomUrl1}, function(callback){ - callback.should.have.property('clientCount', 1); - client1.disconnect(); - - var client2 = io.connect(socketURL, options); - client2.emit('create room', {}, function(roomUrl2) { - client2.emit('join room', {roomUrl : roomUrl2}, function(callback){ - - var client3 = io.connect(socketURL, options); - client3.emit('join room', {roomUrl : roomUrl2}, function(callback) { - - callback.should.have.property('clientCount', 2); - client2.disconnect(); - client3.disconnect(); - done(); - }); - }); - }); - }); - }); - }); - - it("should update client count on joining room or disconnection", function(done){ - var client1 = io.connect(socketURL, options); - client1.emit('create room', {}, function(roomUrl){ - client1.emit('room info', {roomUrl : roomUrl}, function(callback){ - // client1 has yet to join room, so no admin is set and clientCount is zero - Object.keys(callback).length.should.equal(6); - callback.should.have.property('clientCount', 0); - - client1.emit('join room', {roomUrl : roomUrl}, function(callback){ - client1.emit('room info', {roomUrl : roomUrl}, function(callback){ - // client1 has now joined room, so _now_ room info is updated - Object.keys(callback).length.should.equal(6); - callback.should.have.property('clientCount', 1); - - var client2 = io.connect(socketURL, options); - client2.emit('join room', {roomUrl : roomUrl}, function(callback){ - client2.emit('room info', {roomUrl : roomUrl}, function(callback){ - callback.should.have.property('clientCount', 2); - - client1.disconnect(); - client2.emit('room info', {roomUrl : roomUrl}, function(callback){ - callback.should.have.property('clientCount', 1); - - client2.disconnect(); - done(); - - }); - }); - }); - }); - }); - }); - }); - }); - - }); - - describe('Assigning room administrator', function(){ - - it("should consider the first visitor to a room as the administrator", function(done){ - var client1 = io.connect(socketURL, options); - client1.emit('create room', {}, function(roomUrl){ - client1.emit('room info', {roomUrl : roomUrl}, function(callback){ - callback.should.have.property('createAdmin', true); - callback.should.have.property('hasAdmin', true); - callback.should.have.property('clientCount', 0); - client1.emit('join room', {roomUrl : roomUrl}, function(callback){ - client1.emit('room info', {roomUrl : roomUrl}, function(callback){ - callback.should.have.property('createAdmin', false); - callback.should.have.property('hasAdmin', true); - callback.should.have.property('clientCount', 1); - client1.disconnect(); - done(); - }); - }); - }); - }); - }); - }); - -}); \ No newline at end of file diff --git a/test/test-lobby.js b/test/test-lobby.js deleted file mode 100644 index 2f2edbd..0000000 --- a/test/test-lobby.js +++ /dev/null @@ -1,184 +0,0 @@ -var chai = require('chai'); -var sinon = require('sinon'); -var sinonChai = require("sinon-chai"); -var should = chai.should(); -var LobbyClass = require('../lib/lobby.js'); -var RoomClass = require('../lib/room.js'); - -chai.use(sinonChai); - -describe('Lobby Class', function(){ - - describe('#createRoom()', function(){ - - it('should return a room url', function(){ - var lobby = new LobbyClass.Lobby() - , stub - , spy - ; - stub = sinon.stub(lobby, 'createUniqueURL', function(){ - return 'fakeURL'; - }); - spy = sinon.spy(lobby, 'createRoom'); - lobby.createRoom(); - spy.should.have.returned('fakeURL'); - }); - - it('should instantiate a Room', function(){ - var lobby = new LobbyClass.Lobby() - , stub - , spy - ; - stub = sinon.stub(lobby, 'createUniqueURL', function(){ - return 'fakeURL'; - }); - lobby.createRoom(); - lobby.rooms['fakeURL'].should.be.an.instanceof(RoomClass.Room); - }); - - it('should create a unique rooms[room] object', function(){ - var lobby = new LobbyClass.Lobby() - ; - Object.keys(lobby.rooms).length.should.equal(0); - lobby.createRoom(); - Object.keys(lobby.rooms).length.should.equal(1); - lobby.createRoom(); - Object.keys(lobby.rooms).length.should.equal(2); - Object.keys(lobby.rooms)[0].should.not.equal(Object.keys(lobby.rooms)[1]); - }); - - it('should call #createUniqueURL()', function(){ - var lobby = new LobbyClass.Lobby() - , mock - ; - mock = sinon.mock(lobby); - mock.expects("createUniqueURL").once(); - lobby.createRoom(); - mock.verify; - }); - - it('should trigger again if the room name already exists', function () { - var lobby = new LobbyClass.Lobby() - , stub - , spy - ; - stub = sinon.stub(lobby, 'createUniqueURL', function(){ - return 'fake'; - }); - spy = sinon.spy(lobby, 'createRoom'); - lobby.createRoom(); - lobby.createRoom(); - - spy.should.have.been.calledThrice; - spy.should.have.been.calledWith('fake'); - }); - - it('should define default room values', function(){ - var lobby = new LobbyClass.Lobby(); - var room; - lobby.createRoom(); - room = Object.keys(lobby.rooms)[0]; - Object.keys(lobby.rooms[room]).length.should.equal(7); - lobby.rooms[room].should.have.property('createAdmin', true); - lobby.rooms[room].should.have.property('hasAdmin', false); - lobby.rooms[room].should.have.property('cardPack', 'fib'); - lobby.rooms[room].should.have.property('clientCount', 0); - lobby.rooms[room].should.have.property('connections').and.be.empty; - }); - }); - - describe('#createUniqueURL()', function(){ - - it('should be called from #createRoom()', function(){ - var lobby = new LobbyClass.Lobby(); - var spy = sinon.spy(lobby, "createUniqueURL"); - lobby.createRoom(); - spy.should.have.been.calledOnce; - }); - - it('should generate a random 4-character string', function(){ - var lobby = new LobbyClass.Lobby(); - var string = lobby.createUniqueURL(); - string.should.match(/^[0-9a-zA-Z]{4}$/); - }); - }); - - describe('#joinRoom()', function(){ - - var testSocket = { id : 1234567890 }; - - it('should expect a room parameter', function() { - var lobby = new LobbyClass.Lobby(); - var test1 = lobby.joinRoom(testSocket); - test1.should.have.property('error', 'room undefined does not exist'); - }); - - it('should error if trying to join a non-existent room', function(){ - var lobby = new LobbyClass.Lobby(); - var stubRoom = sinon.stub(lobby, 'createUniqueURL', function(){ - return 'fake'; - }); - var test1 = lobby.joinRoom(testSocket, 'fake'); - test1.should.have.property('error', 'room fake does not exist'); - }); - - it('should call #getRoom() and return room', function() { - var lobby = new LobbyClass.Lobby(); - var stubRoom = sinon.stub(lobby, 'createUniqueURL', function(){ - return 'fake'; - }); - var getRoomSpy = sinon.spy(lobby, 'getRoom'); - lobby.createRoom(); - lobby.joinRoom(null, 'fake'); - getRoomSpy.should.have.been.calledWith('fake'); - }); - - it('should be a member of the room on success', function() { - var lobby = new LobbyClass.Lobby(); - var stubRoom = sinon.stub(lobby, 'createUniqueURL', function(){ - return 'fake'; - }); - var getRoomSpy = sinon.spy(lobby, 'getRoom'); - lobby.createRoom(); - lobby.joinRoom(null, 'fake'); - getRoomSpy.should.have.returned(lobby.rooms['fake']); - }); - - it('should return the roomUrl on success', function(){ - var lobby = new LobbyClass.Lobby(); - var stubRoom = sinon.stub(lobby, 'createUniqueURL', function(){ - return 'fake'; - }); - var joiner; - lobby.createRoom(); - joiner = lobby.joinRoom(null, 'fake'); - joiner.should.have.property('roomUrl', 'fake'); - }); - - }); - - describe('#getRoom()', function() { - - it('should return a room object', function () { - var lobby = new LobbyClass.Lobby(); - var stubRoom = sinon.stub(lobby, 'createUniqueURL', function(){ - return 'fake'; - }); - var getRoomSpy = sinon.spy(lobby, 'getRoom'); - lobby.createRoom(); - lobby.getRoom('fake'); - getRoomSpy.should.have.returned(lobby.rooms['fake']); - }); - - it('should return an error when no room parameter is specified', function () { - var lobby = new LobbyClass.Lobby(); - var response = lobby.getRoom('notThere'); - response.should.have.property('error', 'room notThere does not exist'); - }); - - }); - - describe('#broadcastDisconnect()', function(){ - it('should be tested somehow. Now idea how though.'); - }); -}); \ No newline at end of file diff --git a/test/test-room.js b/test/test-room.js deleted file mode 100644 index dd5d472..0000000 --- a/test/test-room.js +++ /dev/null @@ -1,70 +0,0 @@ -var io = require('socket.io-client'); -var socketURL = "http://0.0.0.0:5000"; -var options = { - transports: ['websocket'], - 'force new connection' : true -}; - -var chai = require('chai'); -var sinon = require('sinon'); -var sinonChai = require("sinon-chai"); -var should = chai.should(); -var LobbyClass = require('../lib/lobby.js'); -var RoomClass = require('../lib/room.js'); -chai.use(sinonChai); - -describe('Room Class', function(){ - describe('default values', function(){ - it('should provide default values', function(){ - var room = new RoomClass.Room('testio','testroom'); - room.should.deep.equal({ - io : 'testio', - roomUrl : 'testroom', - createAdmin : true, - hasAdmin : false, - cardPack : 'fib', - clientCount : 0, - connections : {} - }); - }); - }); - - describe('#info()', function(){ - it('should call #getClientCount()', function(){ - var room = new RoomClass.Room(); - var mock = sinon.mock(room).expects('getClientCount'); - room.info(); - mock.should.have.been.calledOnce - }); - it('should set hasAdmin after first call', function(){ - var room = new RoomClass.Room(); - var mock = sinon.mock(room).expects('getClientCount'); - room.should.have.property('hasAdmin', false); - room.info(); - room.should.have.property('hasAdmin', true); - }); - }); - - describe('#enter()', function(){ - it('should create connections[socket]', function(){ - var room = new RoomClass.Room(); - room.enter( { id : 12345 } ); - room.should.deep.property('connections.12345.socketId', 12345); - }); - }); - - describe('#leave()', function(){ - it('should delete connections[socket]', function(){ - var room = new RoomClass.Room(); - room.connections = { - 'fake' : { socketId : 'fake', vote : null, voter : null } - }; - room.leave( { id : 'fake'} ); - room.should.have.property('connections').and.be.empty; - }); - }); - - describe('#setCardPack()', function(){ - - }); -}); \ No newline at end of file