<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Andrew's blog.</title>
    <description>Andrew Sturges. Blog. Hi.
</description>
    <link>http://andrewsturges.com/blog/</link>
    <atom:link href="http://andrewsturges.com/blog/feed.xml" rel="self" type="application/rss+xml" />
    <pubDate>Sat, 17 Sep 2016 02:04:50 +0000</pubDate>
    <lastBuildDate>Sat, 17 Sep 2016 02:04:50 +0000</lastBuildDate>
    <generator>Jekyll v3.2.1</generator>
    
      <item>
        <title>A summary of Zillow Talk: The New Rules of Real Estate</title>
        <description>&lt;h1 id=&quot;summary-of-zillow-talk-the-new-rules-of-real-estate&quot;&gt;Summary of Zillow Talk: The New Rules of Real Estate&lt;/h1&gt;

&lt;p&gt;All content credited to the authors, Spencer Roscoff and Stan Humphries, and to Grand Central Publishing.&lt;/p&gt;

&lt;p&gt;My &lt;a href=&quot;http://kbfinancialadvisors.com/&quot;&gt;financial planner&lt;/a&gt; recommended this book when I mentioned we&amp;#39;d start looking to buy a home some time in the next few years. 
It&amp;#39;s a great read, and full of interesting anecdotes.
Sometimes I found myself mentally summarizing the chapters, which are written like short blog posts.
By the time I&amp;#39;d finished the book, I decided to write down my notes and put them here in case someone finds them useful.&lt;/p&gt;

&lt;h2 id=&quot;1-warren-buffet-is-always-right&quot;&gt;1. Warren Buffet Is (Always) Right&lt;/h2&gt;

&lt;h4 id=&quot;why-buying-a-home-is-still-a-really-smart-investment&quot;&gt;Why Buying a Home is Still a Really Smart Investment&lt;/h4&gt;

&lt;p&gt;Buying a home is a good investment, for three reasons.
First, taking into account &amp;quot;stock dividends, rental income, tax advantages&amp;quot; and other factors,
the authors conclude that for the period 1975--2014, the S&amp;amp;P 500 returned 10.4 and real estate returned 11.6 percent.
Second, real estate is less volatile than stocks.
Third, with \$100,000, you can take ownership of a \$500,000 home, but only take ownership of \$100,000 worth of stocks.&lt;/p&gt;

&lt;h2 id=&quot;2-stats-and-the-city&quot;&gt;2. Stats and the City&lt;/h2&gt;

&lt;h4 id=&quot;timing-is-everything-when-deciding-to-buy-or-rent&quot;&gt;Timing is Everything When Deciding to Buy or Rent&lt;/h4&gt;

&lt;p&gt;When deciding between buying and renting, how long you plan to stay in your home determines which one is a better financial decision.
If you plan to stay for only a short time, you should rent.
If you plan to stay for 20 years, you should buy.
There&amp;#39;s a breakeven duration, after which the financial decision flips from renting to buying.
The breakeven horizon varies by market, from a low of 0.9 years in Riverside, California, to 4.2 years in Washington, D.C.&lt;/p&gt;

&lt;h2 id=&quot;3-2-4-6-8-neighborhoods-that-will-appreciate&quot;&gt;3. 2-4-6-8 Neighborhoods That Will Appreciate&lt;/h2&gt;

&lt;h4 id=&quot;predicting-the-next-hot-spot&quot;&gt;Predicting the Next Hot Spot&lt;/h4&gt;

&lt;p&gt;Homes farthest from the city center appreciate more quickly than homes in the city center.
Hip, cool, expensive neighborhoods have a halo effect--after a few years they will pull up the values of homes in surrounding neighborhoods.
The strongest predictor of a neighborhood&amp;#39;s gentrification is average age of its housing stock:
&amp;quot;The older the average is, the more likely a given neighborhood will see strong appreciation.&amp;quot;
The final predictor of a neighborhood about to appreciate is low home ownership.&lt;/p&gt;

&lt;h2 id=&quot;4-the-starbucks-effect&quot;&gt;4. The Starbucks Effect&lt;/h2&gt;

&lt;h4 id=&quot;how-lattes-perk-up-home-prices&quot;&gt;How Lattes Perk Up Home Prices&lt;/h4&gt;

&lt;p&gt;The authors compare Starbucks locations with Zillow home prices.
They find that Starbucks causes home prices to appreciate.
Dunkin&amp;#39; Donuts doesn&amp;#39;t cause the same effect.&lt;/p&gt;

&lt;h2 id=&quot;5-it-39-s-the-worst-house-for-a-reason&quot;&gt;5. It&amp;#39;s the Worst House for a Reason&lt;/h2&gt;

&lt;h4 id=&quot;why-you-shouldn-39-t-buy-the-worst-house-in-the-best-neighborhood&quot;&gt;Why You Shouldn&amp;#39;t Buy the Worst House in the Best Neighborhood&lt;/h4&gt;

&lt;p&gt;The authors began with the bottom 10% of homes in each zipcode, and looked at their appreciation versus the other 90%.
On average, they found that the bottom 10% homes do neither better nor worse.
However, the more affluent the neighborhood, the worse the bottom 10% performs,
because high-end buyers in affluent neighborhoods aren&amp;#39;t interested in low-end houses.
Instead, buy a home in any neighborhood where you can afford a home that&amp;#39;s not in the bottom 10%.&lt;/p&gt;

&lt;h2 id=&quot;6-do-your-homework&quot;&gt;6. Do Your Homework&lt;/h2&gt;

&lt;h4 id=&quot;finding-a-great-school-district-in-your-price-range&quot;&gt;Finding a Great School District In Your Price Range&lt;/h4&gt;

&lt;p&gt;Usually home prices in a great school district are higher than home prices in a lousy school district.
Furthermore, to move from an average school district to a good school district might cost 20% more in home prices,
but a move from a good school district to a great school district could cost 40% or more in additional home cost.
However, some states are more egalitarian (NY, NM, SC, VA, MN),
meaning the schools in the low-price neighborhoods are just as good as the schools in the high-price neighborhoods.
The authors recommend using Zillow and their GreatSchool rankings to locate affordable housing near excellent public schools.&lt;/p&gt;

&lt;h2 id=&quot;7-arms-and-legs&quot;&gt;7. ARMs and Legs&lt;/h2&gt;

&lt;h4 id=&quot;fixed-rate-mortgages-aren-39-t-for-everyone&quot;&gt;Fixed-Rate Mortgages Aren&amp;#39;t for Everyone&lt;/h4&gt;

&lt;p&gt;30-year fixed rate mortgages (FRMs) are a very strong convention in America.
FRMs only exist because Fannie Mae and Freddie Mac provide banks with enough incentive to grant a 
long-term loan with an interest rate that can never go up (but which can go down when the customer refinances).
With an Adjustable Rate Mortgage (ARM), the rate is fixed for 1--7 years, and then the interest rate fluctuates with the market.
If you plan to stay in your house for less than 5 years, an ARM may be a better choice.
Ultimately it&amp;#39;s a matter of luck whether the interest rate after 1--7 years will make the ARM cheaper or more expensive than a FRM.&lt;/p&gt;

&lt;h2 id=&quot;8-apples-and-oranges&quot;&gt;8. Apples and Oranges&lt;/h2&gt;

&lt;h4 id=&quot;how-to-determine-whether-buying-a-foreclosure-is-a-good-deal&quot;&gt;How to Determine Whether Buying a Foreclosure Is a Good Deal&lt;/h4&gt;

&lt;p&gt;Foreclosures are usually smaller, cheaper homes than non-foreclosures.
Zillow authors calculate that the &amp;quot;foreclosure discount&amp;quot; in September 2012 was 7.7%, not the 25% frequently cited.
The foreclosure discount is less in markets with high demand.
Furthermore, the practice of buying foreclosures has become common,
additionally reducing the foreclosure discount by washing away the stigma associated with foreclosures.
Foreclosures are cheaper because banks want to sell them quickly,
because they&amp;#39;re probably in bad shape (someone in financial distress probably will defer 
maintainance in favor of groceries and other bills), because they&amp;#39;re risky due to having no inspections,
and often selling sight-unseen, and because there&amp;#39;s a stigma attached to foreclosures. &lt;/p&gt;

&lt;h2 id=&quot;9-what-to-expect-when-you-39-re-inspecting&quot;&gt;9. What to Expect When You&amp;#39;re Inspecting&lt;/h2&gt;

&lt;h4 id=&quot;how-to-pick-the-right-home-inspector&quot;&gt;How to Pick The Right Home Inspector&lt;/h4&gt;

&lt;p&gt;When picking a home inspector, ask how long they&amp;#39;ve been in business, whether they&amp;#39;re licenced/bonded/insured.
Ask for testimonials. Use Angie&amp;#39;s List.
Ask for sample reports for good houses and bad houses, and make sure they&amp;#39;re detailed and that they explain next course of action.
Make sure he has a good website, dresses well, and generally presents himself professionally.
Always be present for the home inspection itself, and follower the inspector everywhere possible (attic, crawl space).&lt;/p&gt;

&lt;h2 id=&quot;10-america-39-s-next-top-remodel&quot;&gt;10. America&amp;#39;s Next Top Remodel&lt;/h2&gt;

&lt;h4 id=&quot;not-all-home-improvement-projects-are-created-equal&quot;&gt;Not All Home-Improvement Projects Are Created Equal&lt;/h4&gt;

&lt;p&gt;When selling a home, some will invest in home-improvements to boost the selling price.
Some of these projects have negative ROI, and some have positive ROI.
Diminishing returns means that a mid-grade renovation to a bathroom or windows
(say, \$3,000 or so) might return \$1.87 for every dollar invested, but a high-end renovation (\$12,000 or more)
might return only \$1.00 or even less than a dollar.
Kitchen renovations have the lowest ROI.
Adding a story is probably break-even, and renovating a basement is about the worst ROI you can do (50%).
You&amp;#39;ll lose about \$2,600 of potential higher resale value each year after a remodel (spending \$5,000 in 2012 may yield \$5,000 greater resale value in 2012, but only \$2,400 in 2013),
so it&amp;#39;s best to do the remodel immediately before putting your house on the market.&lt;/p&gt;

&lt;h2 id=&quot;11-magic-words-and-dangerous-descriptors&quot;&gt;11. Magic Words and Dangerous Descriptors&lt;/h2&gt;

&lt;h4 id=&quot;how-to-write-an-effective-listing&quot;&gt;How to Write an Effective Listing&lt;/h4&gt;

&lt;p&gt;Calling a home &amp;quot;unique&amp;quot; is a signal to buyers that there&amp;#39;s something wrong with it, which is reflected in sale prices 30--50% less than expected.
Most age-related words (&amp;quot;modern&amp;quot;, &amp;quot;classic&amp;quot;, &amp;quot;contemporary&amp;quot;) mean the house is old.
Even &amp;quot;state-of-the-art&amp;quot; probably means it was built in the 1980s.
&amp;quot;Cute&amp;quot;, &amp;quot;charming&amp;quot;, or &amp;quot;cozy&amp;quot; mean it&amp;#39;s a very small home.
If the listing includes the words &amp;quot;potential&amp;quot; or &amp;quot;investment&amp;quot;, it&amp;#39;s in bad shape and needs work--those homes see final sale prices 7% below asking.
&amp;quot;It&amp;#39;s important to remember that...what&amp;#39;s driving the increase in sale price isn&amp;#39;t necessarily the
adjective itself, but an underlying truth about the home.&amp;quot;
If your home has a nice feature, it pays to mention it in the listing.
&amp;quot;The lesson for sellers here is clear: If you&amp;#39;ve got it, flaunt it&amp;quot; (by including it in the listing).
Longer listings, up to about 250 words, sell for more.&lt;/p&gt;

&lt;h2 id=&quot;12-march-madness&quot;&gt;12. March Madness&lt;/h2&gt;

&lt;h4 id=&quot;when-to-list-your-home&quot;&gt;When to List Your Home&lt;/h4&gt;

&lt;p&gt;Listing your home at the end of March will make it sell faster and for more money.
&amp;quot;Put your home on the market after you fill out your NCAA March Madness bracket,
but before someone slips on an ivy-green jacket at the Masters golf tournament in Augusta, SC.&amp;quot; &lt;/p&gt;

&lt;h2 id=&quot;13-there-is-no-chapter-13&quot;&gt;13. (There is no chapter 13)&lt;/h2&gt;

&lt;h2 id=&quot;14-real-est8-4-sale&quot;&gt;14. Real Est8 4 Sale&lt;/h2&gt;

&lt;h4 id=&quot;use-superstitions-to-your-advantage&quot;&gt;Use Superstitions to Your Advantage####&lt;/h4&gt;

&lt;p&gt;In Chinese, 8 is lucky and 4 is unlucky. &amp;quot;Areas with high Chinese populations have far fewer list prices that end in &amp;quot;4&amp;quot;s than the national average.&amp;quot;
But does having these numbers affect the final sale price?
Yes, in areas with &amp;gt;=10% Chinese population, homes with prices ending in 8 sell for 1.5 percent more,
and homes with prices ending in 4 sell for 1 percent less.&lt;/p&gt;

&lt;h2 id=&quot;15-the-price-is-right&quot;&gt;15. The Price Is Right&lt;/h2&gt;

&lt;h4 id=&quot;how-to-determine-your-asking-price&quot;&gt;How to Determine Your Asking Price&lt;/h4&gt;

&lt;p&gt;About half of homes cut their prices before selling, usually by about 6.9 percent.
The more a home is overpriced, the more it will sell for under its true market value.
A house overpriced by 10% will on average sell for 2 percent under market value.
It also costs in time, as homes will linger on the market.
Sellers don&amp;#39;t like homes which have been on the market for too long.
Correctly priced homes spend 107 days on the market.
&amp;quot;Listings needing a 10% price cut spend an average of 220 days on the market.&amp;quot;&lt;/p&gt;

&lt;h2 id=&quot;16-nine-is-the-magic-number&quot;&gt;16. Nine Is the Magic Number&lt;/h2&gt;

&lt;h4 id=&quot;how-to-sell-for-more-by-asking-for-less&quot;&gt;How to Sell for More by Asking for Less&lt;/h4&gt;

&lt;p&gt;On average, a home will sell faster and for more money if its original price ends in a nine instead of a zero (e.g. \$149,000 or \$149,900).
The effect is less noticeable for higher-cost homes.&lt;/p&gt;

&lt;h2 id=&quot;17-appraising-real-estate-agents&quot;&gt;17. Appraising Real Estate Agents&lt;/h2&gt;

&lt;h4 id=&quot;review-correlate-with-performance&quot;&gt;Review Correlate with Performance&lt;/h4&gt;

&lt;p&gt;Unlike travel agents, real estate agents aren&amp;#39;t going anywhere, because home purchases are infrequent, emotional,
and expensive (so transaction costs are relatively low and worthwhile).
Sellers agents, aka listing agents, are spread out like income inequality in the US: The top few percent sell most of the homes.
Top sellers do 22 homes per year, great ones (top 10%) do seven, and everyone else does about 2.
Experience usually correlates to homes sold per year.
But data shows that experienced agents won&amp;#39;t sell a given house for more money than a rookie agent.
Female agents sell for higher prices and faster.
The difference is minuscule though.
Agents with good reviews are statistically better than agents without.&lt;/p&gt;

&lt;h2 id=&quot;18-the-gayborhood-phenomenon&quot;&gt;18. The Gayborhood Phenomenon&lt;/h2&gt;

&lt;h4 id=&quot;property-values-as-a-bellweather-of-social-change&quot;&gt;Property Values as a Bellweather of Social Change&lt;/h4&gt;

&lt;p&gt;&amp;quot;Home prices in historically gay neighborhoods have steadily outperformed average prices for the metros in which they&amp;#39;re located.&amp;quot;&lt;/p&gt;

&lt;h2 id=&quot;19-what-39-s-in-a-street-name&quot;&gt;19. What&amp;#39;s in a Street Name?&lt;/h2&gt;

&lt;h4 id=&quot;what-street-names-tell-us-about-property-values&quot;&gt;What Street Names Tell Us about Property Values&lt;/h4&gt;

&lt;p&gt;Names are better than numbers.
A home on 10th street is probably worth less than a home on a Elm street.
Main Street is worth about 4% less on average.
Less common names like Lake and Sunset are worth more, but probably because they describe something about the neighborhood or the view.
Houses on &amp;quot;Ocean Ave&amp;quot; in Miami or Boston are worth more, but &amp;quot;Ocean &amp;quot;Ave&amp;quot; in Detroit is worth just average,
because there&amp;#39;s no ocean view to back it up in Detroit.
As for suffixes, the most common (street, road) tend to be the least valuable compared to less common suffixes (way, place, court). &lt;/p&gt;

&lt;h2 id=&quot;20-empire-real-estate-of-mind&quot;&gt;20. Empire Real Estate of Mind&lt;/h2&gt;

&lt;h4 id=&quot;analyzing-the-oddities-of-new-york-city&quot;&gt;Analyzing the Oddities of New York City&lt;/h4&gt;

&lt;p&gt;NYC is expensive, dense, and has low home ownership. Prices are linked to the performance of Wall Street. Buildings are tall.&lt;/p&gt;

&lt;h2 id=&quot;21-the-wild-wild-west&quot;&gt;21. The Wild, Wild West&lt;/h2&gt;

&lt;h4 id=&quot;america-39-s-most-volatile-housing-market&quot;&gt;America&amp;#39;s Most Volatile Housing Market&lt;/h4&gt;

&lt;p&gt;Phoenix, Riverside and Las Vegas are three of the largest and most volatile real estate markets.
Home prices there swing by 2--4% each quarter, with histocal min/max of -10/+15% per quarter.
Whether a house in these markets will lose value over five years is about 50/50 odds.
Volatility leads to greater volatility--underwater buyers can&amp;#39;t sell, drying up the supply of homes, spiking prices.
Why are these markets volatile? High employment flexibiltiy--jobs are there when times are good, and those jobs leave when times get bad.
They&amp;#39;re also markets for snowbirds, who buy second homes in warm climates when times are good, and sell them when times are bad.
These markets also attract a lot of foreign buyers, who bring more volatility for the same good times/bad times reason.&lt;/p&gt;

&lt;h2 id=&quot;22-statistics-are-people-too&quot;&gt;22. Statistics Are People, Too&lt;/h2&gt;

&lt;h4 id=&quot;looking-at-the-housing-bust-in-more-than-just-dollars-and-cents&quot;&gt;Looking at the Housing Bust in More than Just Dollars and Cents&lt;/h4&gt;

&lt;p&gt;There&amp;#39;s &amp;quot;a strong relationship between the perforamnce of the housing market and Gallup&amp;#39;s measure of 
Americans&amp;#39; level of optimism about the economy&amp;quot;, but the authors don&amp;#39;t know which one causes the other.
The same goes for cholesterol, blood pressure, cigarette smoking, surveys about smiling, and other factors of general well-being.
Homeowners are more conservative, more religious, and have sex less frequently than renters. &lt;/p&gt;

&lt;h2 id=&quot;23-what-39-s-walkability-worth&quot;&gt;23. What&amp;#39;s Walkability Worth?&lt;/h2&gt;

&lt;h4 id=&quot;how-walkable-neighborhoods-affect-property-values&quot;&gt;How Walkable Neighborhoods Affect Property Values&lt;/h4&gt;

&lt;p&gt;People like walkable neighborhoods, which can be quantified with the Walk Score, which Zillow now incorporates.
The authors make two points in this chapter:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&amp;quot;Home prices in more walkable areas offer higher returns and recover faster from market downturns.&amp;quot;&lt;/li&gt;
&lt;li&gt;&amp;quot;What walkability is worth really depends on you.&amp;quot;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2 id=&quot;24-owning-isn-39-t-for-everyone&quot;&gt;24. Owning Isn&amp;#39;t for Everyone&lt;/h2&gt;

&lt;h4 id=&quot;the-case-for-decoupling-homeownership-and-american-dream&quot;&gt;The Case for Decoupling Homeownership and American Dream&lt;/h4&gt;

&lt;p&gt;The authors begin with examples of Americans&amp;#39; reverence for homeownership. &lt;/p&gt;

&lt;p&gt;&amp;quot;Based on our analysis of home values during the past two decades, one thing is crystal clear:
Subsidies for low-income families to buy homes in low-income neighborhoods ultimately hurt the very people they purport to help.&amp;quot; 
Why?&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Buying a home is a gamble that you&amp;#39;ll stay there for a long time. People who live paycheck-to-paycheck can&amp;#39;t afford that gamble.&lt;/li&gt;
&lt;li&gt;If a home loses value, that negative equity hurts a low-income family more than it hurts a higher-income family&lt;/li&gt;
&lt;li&gt;Housing returns in low-income areas are lower and more volatile than in high-income areas, so the homes themselves can be bad investments.
Encouraging people to invest in these low-income communities hurts those people.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&amp;quot;Equating homeownership with the American Dream is simply, and indisputably, a policy nightmare.&amp;quot; 
Inequality hurts everyone, so we should tackle it, but not by encouraging homeownership.&lt;/p&gt;

&lt;h2 id=&quot;25-the-third-rail-of-real-estate&quot;&gt;25. The Third Rail of Real Estate&lt;/h2&gt;

&lt;h4 id=&quot;is-the-mortgage-interest-deduction-really-the-best-use-of-100-billion&quot;&gt;Is the Mortgage Interest Deduction Really the Best Use of $100 Billion?&lt;/h4&gt;

&lt;p&gt;The authors start with a history of the Mortgage Interest Deduction (MID), from the first 1913 income tax year.
&amp;quot;Many argue that the MID encourages home ownership and builds strong communities&amp;quot;,
but it&amp;#39;s easy to find places with home ownership and strong communities but no MID.
Enter Canada, which has the same rate of home ownership as the US.&lt;/p&gt;

&lt;p&gt;Economists think home values would be slightly decreased if we ended the MID, and most pronounced in high-end homes.
Only about half of Americans pay income tax, and only about a third of those actually itemize deductions, and about a fifth of those rent rather than own.
So only about 13% of Americans take the mortgage interest deduction each year.&lt;/p&gt;

&lt;p&gt;Suppose we capped the MID at \$25,000.
Of the top 100 zip codes likely to be hardest hit, the mean home value is \$865 thousand.
So today, the MID is helping those who are already the most well off.
Instead, we should have a first-time home buyer tax credit or even a cash grant.&lt;/p&gt;

&lt;h2 id=&quot;26-down-by-the-seaside&quot;&gt;26. Down by the Seaside&lt;/h2&gt;

&lt;h4 id=&quot;how-waterfront-property-plays-by-its-own-rules&quot;&gt;How Waterfront Property Plays by Its Own Rules&lt;/h4&gt;

&lt;p&gt;&amp;quot;Why do people keep building homes and lives in places that are so prone to becoming [flood or hurricane] zones?
And why does the government keep backstopping waterfront real estate?&amp;quot;&lt;/p&gt;

&lt;p&gt;People want to live by the water, even though climate change is causing more and worse storms.
There&amp;#39;s a huge price premium as a home gets closer to the coast, and it doesn&amp;#39;t dip &lt;em&gt;even after devastating storms&lt;/em&gt;.
Why is this market so distorted?
It&amp;#39;s because of the U.S. goverment&amp;#39;s policy to build and rebuild homes destroyed by storms (via various gov&amp;#39;t agencies).&lt;/p&gt;

&lt;p&gt;It&amp;#39;s too expensive to buy flood insurance near the coast, so we have the National Flood Insurance Program (NFIP).
But not enough people buy into it, so the premiums are subsidized.
Some consider the NFIP a reason to continue building homes in flood disaster areas, creating &amp;quot;severe repetitive loss properties&amp;quot;.&lt;/p&gt;
</description>
        <pubDate>Sun, 03 Apr 2016 00:00:00 +0000</pubDate>
        <link>http://andrewsturges.com/blog/jekyll/tutorial/2016/04/03/zillow-book-review.html</link>
        <guid isPermaLink="true">http://andrewsturges.com/blog/jekyll/tutorial/2016/04/03/zillow-book-review.html</guid>
        
        
        <category>jekyll</category>
        
        <category>tutorial</category>
        
      </item>
    
      <item>
        <title>Configuring a Godaddy domain name with github pages</title>
        <description>&lt;p&gt;I own a custom domain through GoDaddy.com that I want to use for my user page
at arsturges.github.io.&lt;/p&gt;

&lt;p&gt;Github.io offers a neat, free hosting option. I had no trouble setting up a
site at arsturges.github.io, but I found the custom URL documentation to be
unclear. Below, I&amp;#39;ll explain how I set up my github.io user page with my 
GoDaddy.com domain name andrewsturges.com.&lt;/p&gt;

&lt;p&gt;In brief, the steps are as follows:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Set up my user page arsturges.github.io&lt;/li&gt;
&lt;li&gt;Commit a file called CNAME with one line: &lt;code&gt;andrewsturges.com&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Go to GoDaddy site to manage my URL&lt;/li&gt;
&lt;li&gt;Add an &amp;quot;A (Host)&amp;quot; record with &amp;quot;host&amp;quot; = &lt;code&gt;@&lt;/code&gt; and &amp;quot;Points to&amp;quot; = &lt;code&gt;192.30.252.153&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Add a &amp;quot;CNAME (Alias)&amp;quot; record with &amp;quot;host&amp;quot; = &lt;code&gt;www&lt;/code&gt; and &amp;quot;Points to&amp;quot; = &lt;code&gt;arsturges.github.io&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Wait for changes to propogate.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Below i&amp;#39;ll go over these steps in detail. &lt;/p&gt;

&lt;h2 id=&quot;1-set-up-your-user-page-at-gitub-io&quot;&gt;1. Set up your user page at gitub.io&lt;/h2&gt;

&lt;p&gt;I&amp;#39;ll asume this is done. In my case, I set up a user page at arsturges.github.io.
When I navigated to that page, the URL stayed as asturges.github.io (i.e., it 
didn&amp;#39;t redirect to anywhere).&lt;/p&gt;

&lt;h2 id=&quot;2-commit-a-cname-file&quot;&gt;2. Commit a CNAME file&lt;/h2&gt;

&lt;p&gt;I added a file called CNAME (all caps, no extension), with a single line &lt;code&gt;andrewsturges.com&lt;/code&gt;.
&lt;img src=&quot;http://andrewsturges.com/blog/assets/cname.png&quot; alt=&quot;CNAME file as seen on Github&quot;&gt;&lt;/p&gt;

&lt;h2 id=&quot;3-go-to-godaddy-com-and-set-up-two-records&quot;&gt;3. Go to Godaddy.com and set up two records&lt;/h2&gt;

&lt;p&gt;On the github.io custom URL instructions, this part wasn&amp;#39;t clear to me.
For my page, I had to set an A record &lt;em&gt;and&lt;/em&gt; and Alias record.
First, navigate to the page where you can manage the domain that want to point
to your github.io page. From there, click on the &amp;quot;DNS Zone File&amp;quot; tab to add records.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://andrewsturges.com/blog/assets/godaddy_dns_page.png&quot; alt=&quot;GoDaddy domain management page&quot;&gt;&lt;/p&gt;

&lt;h3 id=&quot;4-create-an-a-record&quot;&gt;4. Create an A record&lt;/h3&gt;

&lt;p&gt;Add a single A record that points to 192.30.252.153. This is explained at 
&lt;a href=&quot;https://help.github.com/articles/tips-for-configuring-an-a-record-with-your-dns-provider/&quot;&gt;https://help.github.com/articles/tips-for-configuring-an-a-record-with-your-dns-provider/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://andrewsturges.com/blog/assets/a_record.png&quot; alt=&quot;GoDaddy A record&quot;&gt;&lt;/p&gt;

&lt;h3 id=&quot;5-create-a-cname-record&quot;&gt;5. Create a CNAME record&lt;/h3&gt;

&lt;p&gt;Add a single CNAME record as follows:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://andrewsturges.com/blog/assets/cname_record.png&quot; alt=&quot;GoDaddy CNAME record&quot;&gt;&lt;/p&gt;

&lt;p&gt;That&amp;#39;s all I did with GoDaddy. I didn&amp;#39;t change anything else, including the 
Nameserver (NS) records.&lt;/p&gt;

&lt;h2 id=&quot;6-wait-for-changes-to-propogate&quot;&gt;6. Wait for changes to propogate&lt;/h2&gt;

&lt;p&gt;When the DNS updates, you should be able to navigate to your custom domain and
see your pages.github.io page. You can check your work with the following command,
and compare to my results:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;&lt;span class=&quot;gp&quot;&gt;$ &lt;/span&gt;dig andrewsturges.com +nostats +nocomments +nocmd

; &amp;lt;&amp;lt;&amp;gt;&amp;gt; DiG 9.8.3-P1 &amp;lt;&amp;lt;&amp;gt;&amp;gt; andrewsturges.com +nostats +nocomments +nocmd
;; global options: +cmd
;andrewsturges.com.             IN      A
andrewsturges.com.      3600    IN      A       192.30.252.153
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
        <pubDate>Thu, 06 Nov 2014 00:00:00 +0000</pubDate>
        <link>http://andrewsturges.com/blog/jekyll/tutorial/2014/11/06/github-and-godaddy.html</link>
        <guid isPermaLink="true">http://andrewsturges.com/blog/jekyll/tutorial/2014/11/06/github-and-godaddy.html</guid>
        
        
        <category>jekyll</category>
        
        <category>tutorial</category>
        
      </item>
    
      <item>
        <title>Welcome to Jekyll!</title>
        <description>&lt;p&gt;You’ll find this post in your &lt;code&gt;_posts&lt;/code&gt; directory. Go ahead and edit it and re-build the site to see your changes. You can rebuild the site in many different ways, but the most common way is to run &lt;code&gt;jekyll serve --watch&lt;/code&gt;, which launches a web server and auto-regenerates your site when a file is updated.&lt;/p&gt;

&lt;p&gt;To add new posts, simply add a file in the &lt;code&gt;_posts&lt;/code&gt; directory that follows the convention &lt;code&gt;YYYY-MM-DD-name-of-post.ext&lt;/code&gt; and includes the necessary front matter. Take a look at the source for this post to get an idea about how it works.&lt;/p&gt;

&lt;p&gt;Jekyll also offers powerful support for code snippets:&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-ruby&quot; data-lang=&quot;ruby&quot;&gt;&lt;span class=&quot;k&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;print_hi&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;nb&quot;&gt;puts&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;Hi, &lt;/span&gt;&lt;span class=&quot;si&quot;&gt;#{&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;end&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;print_hi&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;'Tom'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;c1&quot;&gt;#=&amp;gt; prints 'Hi, Tom' to STDOUT.&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;Check out the &lt;a href=&quot;http://jekyllrb.com&quot;&gt;Jekyll docs&lt;/a&gt; for more info on how to get the most out of Jekyll. File all bugs/feature requests at &lt;a href=&quot;https://github.com/jekyll/jekyll&quot;&gt;Jekyll’s GitHub repo&lt;/a&gt;. If you have questions, you can ask them on &lt;a href=&quot;https://github.com/jekyll/jekyll-help&quot;&gt;Jekyll’s dedicated Help repository&lt;/a&gt;.&lt;/p&gt;
</description>
        <pubDate>Sun, 02 Nov 2014 19:53:18 +0000</pubDate>
        <link>http://andrewsturges.com/blog/jekyll/update/2014/11/02/welcome-to-jekyll.html</link>
        <guid isPermaLink="true">http://andrewsturges.com/blog/jekyll/update/2014/11/02/welcome-to-jekyll.html</guid>
        
        
        <category>jekyll</category>
        
        <category>update</category>
        
      </item>
    
      <item>
        <title>Starting a Jekyll-Powered Blog and Hosting it on Github</title>
        <description>&lt;p&gt;In this post I&amp;#39;ll go through how to set up a Jekyll blog and host it on Github.
I&amp;#39;m using Mac osx.&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;&lt;span class=&quot;gp&quot;&gt;$ &lt;/span&gt;gem install jekyll
&lt;span class=&quot;gp&quot;&gt;$ &lt;/span&gt;jekyll new andrewsturges
&lt;span class=&quot;gp&quot;&gt;$ &lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;cd &lt;/span&gt;andrewsturges
&lt;span class=&quot;gp&quot;&gt;$ &lt;/span&gt;jekyll serve&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;Now, in a browser, go to &lt;a href=&quot;http://localhost:4000&quot;&gt;http://localhost:4000&lt;/a&gt;&lt;/p&gt;

&lt;h2 id=&quot;what-does-jekyll-new-andrewsturges-get-you&quot;&gt;What does &lt;code&gt;jekyll new andrewsturges&lt;/code&gt; get you?&lt;/h2&gt;

&lt;p&gt;When you run the command &lt;code&gt;jekyll new my_blog&lt;/code&gt;, it creates a new folder called
&amp;#39;my_blog&amp;#39; and the folders and files listed below.&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;&lt;span class=&quot;gp&quot;&gt;$  &lt;/span&gt;andrewsturges  tree .
.
├── _config.yml
├── _layouts
│   ├── default.html
│   └── post.html
├── _posts
│   ├── 2013-09-15-welcome-to-jekyll.markdown
├── _site
│   ├── css
│   │   ├── main.css
│   │   └── syntax.css
│   ├── index.html
│   └── jekyll
│       └── update
│           └── 2013
│               └── 09
│                   └── 15
│                       └── welcome-to-jekyll.html
├── css
│   ├── main.css
│   └── syntax.css
└── index.html
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;A few things to note. First, you can ignore the entire &lt;code&gt;_site&lt;/code&gt; directory.
The jekyll internals deal with that. Second, it gives you a _config.yml file
that has some pre-filled configuration options. These are directives that you
could otherwise include at the jekyll command line when you start the server.
For example, if in the _config.yml file you have the line&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-ruby&quot; data-lang=&quot;ruby&quot;&gt;&lt;span class=&quot;ss&quot;&gt;favorite_color: &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;green&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;then you could equivalently at the command line type&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;&lt;span class=&quot;gp&quot;&gt;$ &lt;/span&gt;jekyll server --favorite_color &lt;span class=&quot;s1&quot;&gt;'green'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Third, it comes with some default CSS files. These are useable as-is, but probably
incomplete. For example, all headings h1 through h6 are identical. Fourth, it
has a _layouts folder, meaning you can modularize things like headers and
footers. Finally, notice that there&amp;#39;s no _drafts folder. You can either create
one, or just keep your drafts in the master branch, and move them to the gh-pages
branch when they&amp;#39;re ready to be published.&lt;/p&gt;

&lt;h2 id=&quot;make-this-folder-into-a-git-repository&quot;&gt;Make this folder into a Git repository&lt;/h2&gt;

&lt;p&gt;I want my blog to be its own git repository, called &amp;#39;andrewsturges&amp;#39;. So I&amp;#39;m
going to initialize a new repo from inside the project folder:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;&lt;span class=&quot;gp&quot;&gt;$ &lt;/span&gt;git init .
Initialized empty Git repository &lt;span class=&quot;k&quot;&gt;in&lt;/span&gt; /Users/andrewsturges/andrewsturges/.git/
git:&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;master&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;git add .
git:&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;master&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;git commit -m &lt;span class=&quot;s2&quot;&gt;&quot;first jekyll commit&quot;&lt;/span&gt;
&lt;span class=&quot;o&quot;&gt;[&lt;/span&gt;master &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;root-commit&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; a821078] first jekyll commit
 9 files changed, 378 insertions&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;+&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;
 create mode 100644 .gitignore
 create mode 100644 _config.yml
 create mode 100644 _layouts/default.html
 create mode 100644 _layouts/post.html
 create mode 100644 _posts/2013-09-15-hosting-a-jekyll-blog-on-github.md
 create mode 100644 _posts/2013-09-15-welcome-to-jekyll.markdown
 create mode 100755 css/main.css
 create mode 100644 css/syntax.css
 create mode 100644 index.html
git:&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;master&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;git remote add origin git@github.com:arsturges/andrewsturges.git
git:&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;master&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;git push -u origin master
Counting objects: 14, &lt;span class=&quot;k&quot;&gt;done&lt;/span&gt;.
Delta compression using up to 4 threads.
Compressing objects: 100% &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;13/13&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;, &lt;span class=&quot;k&quot;&gt;done&lt;/span&gt;.
Writing objects: 100% &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;14/14&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;, 4.47 KiB, &lt;span class=&quot;k&quot;&gt;done&lt;/span&gt;.
Total 14 &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;delta 0&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;, reused 0 &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;delta 0&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;
To git@github.com:arsturges/andrewsturges.git
 &lt;span class=&quot;k&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;[&lt;/span&gt;new branch]      master -&amp;gt; master
Branch master &lt;span class=&quot;nb&quot;&gt;set &lt;/span&gt;up to track remote branch master from origin.
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&quot;the-_site-folder&quot;&gt;The _site folder&lt;/h2&gt;

&lt;p&gt;The &lt;em&gt;site folder is managed by the &lt;code&gt;jekyll&lt;/code&gt; program. We don&amp;#39;t need to edit it
or worry about it all. It contains the HTML that actually gets served, but it&amp;#39;s
updated each time we change the files in the rest of the directory structure.
In other words, that folder is dynamically re-generated whenever we change our
project. It won&amp;#39;t get added to the GitHub repository, because it will be 
dynamically generated on the GitHub server when we activate GitHub pages. In
fact, `jekyll new &amp;lt;site&lt;/em&gt;name&amp;gt;` command creates a .gitignore file with one line
for _site, so it&amp;#39;s ignored by default.&lt;/p&gt;

&lt;h2 id=&quot;preparing-for-deployment-to-github-project-mate&quot;&gt;Preparing for deployment to GitHub project mate&lt;/h2&gt;

&lt;p&gt;If we look at the url for our locally served site, we see something like this:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;http://localhost:4000/jekyll/update/2013/09/15/welcome-to-jekyll.html&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;We have the host (localhost:4000), then the rest of the url (jekyll/update...).
This is slightly different from how GitHub pages will try to resolve the urls,
which is like this:  &lt;/p&gt;

&lt;p&gt;&lt;code&gt;http://arsturges.github.io/andrewsturges/jekyll/update/2013/09/15/welcome-to-jekyll.html&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Notice there&amp;#39;s the host (arsturges.github.io), then the name of the repository
(andrewsturges), THEN the rest of the url (/jekyll/update...).
To account for this, we need to take the following steps:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Edit the file &lt;code&gt;_config.yml&lt;/code&gt; to include the following line:&lt;br&gt;
&lt;code&gt;ruby
baseurl: /andrewsturges
&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Change internal links&lt;br&gt;
Any internal links, whether to static assets like CSS files or links between
html pages, need to have this new baseurl prepended. We can do this by adding
&lt;code&gt;{{ site.baseurl }}&lt;/code&gt;. Here&amp;#39;s a before-and-after from the file _layouts/default.html:&lt;br&gt;
Before:    &lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-html&quot; data-lang=&quot;html&quot;&gt;&lt;span class=&quot;nt&quot;&gt;&amp;lt;link&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;rel=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;stylesheet&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;href=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;/css/syntax.css&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;After:  &lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-html&quot; data-lang=&quot;html&quot;&gt;&lt;span class=&quot;nt&quot;&gt;&amp;lt;link&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;rel=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;stylesheet&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;href=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;{{ site.baseurl }}/css/syntax.css&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt; 
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;You may have to do this to files in _layouts, as well as index.html.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Run the local server with the &lt;code&gt;--baseurl &amp;#39;&amp;#39;&lt;/code&gt; flag&lt;br&gt;
Now when we run the local server, we don&amp;#39;t want it to append &amp;#39;/andrewsturges&amp;#39;
to everything, so we have to override the _config.yml setting. To start a 
jekyll local server, we now do this:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;jekyll server --baseurl &lt;span class=&quot;s1&quot;&gt;''&lt;/span&gt;  
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2 id=&quot;deploying-to-github&quot;&gt;Deploying to GitHub&lt;/h2&gt;

&lt;p&gt;We&amp;#39;re going to deploy as a GitHub &amp;quot;project page&amp;quot;, rather than a GitHub &amp;quot;user and
organization page&amp;quot;. You can read about the difference in Jekyll&amp;#39;s &lt;a href=&quot;http://jekyllrb.com/docs/github-pages/&quot;&gt;GitHub Pages 
documentation&lt;/a&gt;. Suffice it to say, this
blog will have its own dedicated repository called &amp;#39;andrewsturges&amp;#39;.&lt;/p&gt;

&lt;p&gt;We&amp;#39;ve already created the jekyll site, made it into a git repository, and pushed
it to GitHub under the master branch (the default branch). To actually get it
published on GitHub, we need to push our jekyll site to a branch named gh-pages:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-&quot; data-lang=&quot;&quot;&gt;git:(master) $ git branch gh-pages
git:(master) $ git checkout gh-pages 
M   _posts/2013-09-15-hosting-a-jekyll-blog-on-github.md
Switched to branch 'gh-pages'
git:(gh-pages) $ git push origin gh-pages
Total 0 (delta 0), reused 0 (delta 0)
To git@github.com:arsturges/andrewsturges.git
 * [new branch]      gh-pages -&amp;gt; gh-pages
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Now navigate to &lt;a href=&quot;http://arsturges.github.io/andrewsturges/&quot;&gt;http://arsturges.github.io/andrewsturges/&lt;/a&gt; and you should see the site.&lt;/p&gt;

&lt;h1 id=&quot;conclusion-and-summary&quot;&gt;Conclusion and Summary&lt;/h1&gt;

&lt;p&gt;The full list of steps looks something like this:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;code&gt;$ gem install jekyll&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;$ jekyll new andrewsturges&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;$ cd andrewsturges&lt;/code&gt;&lt;/li&gt;
&lt;li&gt; Create github repository called &amp;#39;andrewsturges&amp;#39; to hold this blog&lt;/li&gt;
&lt;li&gt;&lt;code&gt;$ git init .&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Add &lt;code&gt;baseurl: /andrewsturges&lt;/code&gt; to _config.yml, and prepend &lt;code&gt;\{\{ baseurl\}\}&lt;/code&gt; to
internal links&lt;/li&gt;
&lt;li&gt;&lt;code&gt;$ jekyll server --baseurl &amp;#39;&amp;#39;&lt;/code&gt; to run local server; view at localhost:4000&lt;/li&gt;
&lt;li&gt;&lt;code&gt;$ git add .&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;$ git commit -m &amp;quot;first jekyll commit&amp;quot;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;$ git remote add origin git@github.com:arsturges/andrewsturges.git&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;$ git push -u origin master&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;$ git branch gh-pages&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;$ git checkout gh-pages&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;$ git push origin gh-pages&lt;/code&gt; This will trigger GitHub to run a &lt;code&gt;jekyll build&lt;/code&gt;
on whatever is in your _posts folder, creating a new _site which gets
published at &lt;a href=&quot;http://arsturges.github.io/andrewsturges/&quot;&gt;http://arsturges.github.io/andrewsturges/&lt;/a&gt;.&lt;/li&gt;
&lt;/ol&gt;
</description>
        <pubDate>Sun, 15 Sep 2013 23:25:51 +0000</pubDate>
        <link>http://andrewsturges.com/blog/jekyll/tutorial/2013/09/15/hosting-a-jekyll-blog-on-github.html</link>
        <guid isPermaLink="true">http://andrewsturges.com/blog/jekyll/tutorial/2013/09/15/hosting-a-jekyll-blog-on-github.html</guid>
        
        
        <category>jekyll</category>
        
        <category>tutorial</category>
        
      </item>
    
      <item>
        <title>Welcome to Jekyll!</title>
        <description>&lt;p&gt;You&amp;#39;ll find this post in your &lt;code&gt;_posts&lt;/code&gt; directory - edit this post and re-build (or run with the &lt;code&gt;-w&lt;/code&gt; switch) to see your changes!
To add new posts, simply add a file in the &lt;code&gt;_posts&lt;/code&gt; directory that follows the convention: YYYY-MM-DD-name-of-post.ext.&lt;/p&gt;

&lt;p&gt;Jekyll also offers powerful support for code snippets:&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-ruby&quot; data-lang=&quot;ruby&quot;&gt;&lt;span class=&quot;k&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;print_hi&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;nb&quot;&gt;puts&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;Hi, &lt;/span&gt;&lt;span class=&quot;si&quot;&gt;#{&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;end&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;print_hi&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;'Tom'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;c1&quot;&gt;#=&amp;gt; prints 'Hi, Tom' to STDOUT.&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;Check out the &lt;a href=&quot;http://jekyllrb.com&quot;&gt;Jekyll docs&lt;/a&gt; for more info on how to get the most out of Jekyll. File all bugs/feature requests at &lt;a href=&quot;https://github.com/mojombo/jekyll&quot;&gt;Jekyll&amp;#39;s GitHub repo&lt;/a&gt;.&lt;/p&gt;
</description>
        <pubDate>Sun, 15 Sep 2013 22:25:51 +0000</pubDate>
        <link>http://andrewsturges.com/blog/jekyll/update/2013/09/15/welcome-to-jekyll.html</link>
        <guid isPermaLink="true">http://andrewsturges.com/blog/jekyll/update/2013/09/15/welcome-to-jekyll.html</guid>
        
        
        <category>jekyll</category>
        
        <category>update</category>
        
      </item>
    
      <item>
        <title>Exploring the Craigstlist Ruby gem</title>
        <description>&lt;p&gt;In &lt;a href=&quot;#&quot;&gt;my last post&lt;/a&gt; I looked at Greg Stallings&amp;#39;s Ruby gem craigslist.
In this post I&amp;#39;ll look at &lt;a href=&quot;https://github.com/danneu/&quot;&gt;Dan Neumann&lt;/a&gt;&amp;#39;s Ruby gem &lt;a href=&quot;https://github.com/danneu/craig&quot;&gt;craig&lt;/a&gt;, which builds upon Greg&amp;#39;s work.
Both of these gems allow a user to easily scrape search results from &lt;a href=&quot;http://craigslist.org/&quot;&gt;Craigslist.org&lt;/a&gt;.
Thanks are due to Greg and Dan for making their work public.
I&amp;#39;m running Ubuntu Linux 12.10 with Ruby 1.9.&lt;/p&gt;

&lt;h2 id=&quot;install-craigslist&quot;&gt;Install craigslist&lt;/h2&gt;

&lt;p&gt;Installation is like any other gem. In a terminal type:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-&quot; data-lang=&quot;&quot;&gt;$ gem install craig
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Now enter an Interactive Ruby session and see if it worked.&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-&quot; data-lang=&quot;&quot;&gt;$ irb --simple-prompt
&amp;gt;&amp;gt; require 'craig'
=&amp;gt; true
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;If it returned &amp;#39;true&amp;#39;, then installation was successful.&lt;/p&gt;

&lt;h2 id=&quot;use-it-to-find-some-motorcycles&quot;&gt;Use it to find some motorcycles&lt;/h2&gt;

&lt;p&gt;I want to see what motorcycles are for sale in the SF Bay Area.
To see how craig expects to see &amp;#39;SF Bay Area&amp;#39; and &amp;#39;motorcycles&amp;#39;, I look at the source code.
Check &lt;a href=&quot;https://github.com/danneu/craig/blob/master/lib/craig/cities.rb&quot;&gt;craig/lib/cities.rb&lt;/a&gt; to see how your 
city is spelled/puntuated, and &lt;a href=&quot;https://github.com/danneu/craig/blob/master/lib/craig/categories.rb&quot;&gt;craig/lib/categories.rb&lt;/a&gt; to 
see what categories are available.
In &lt;code&gt;categories.rb&lt;/code&gt; I searched for &amp;#39;motorcycle&amp;#39;, and found this line:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-&quot; data-lang=&quot;&quot;&gt;'motorcycles' =&amp;gt; 'mca'
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;This means that craig will expect just the word motorcycles, and will translate it to &amp;#39;mca&amp;#39; for Craigslist.org.
In cities.rb I searched &amp;#39;francisco&amp;#39; and found this line:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-&quot; data-lang=&quot;&quot;&gt;&quot;san_francisco_bay_area&quot; =&amp;gt; &quot;sfbay&quot;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;This means that craig will expect &lt;code&gt;:san_francisco_bay_area&lt;/code&gt; and will translate it to &amp;#39;sfbay&amp;#39;.
With this in mind, I can construct my search phrase:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-&quot; data-lang=&quot;&quot;&gt;motorcycles = Craig.query(:san_francisco_bay_area, :for_sale =&amp;gt; :motorcycles)
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;This returns a Ruby array, which I hold it in a variable called motorcycles.
Since it&amp;#39;s an array, I can select an individual array item with indexing.&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-&quot; data-lang=&quot;&quot;&gt;&amp;gt;&amp;gt; motorcycles[2]
=&amp;gt; {
  :url =&amp;gt; &quot;http://sfbay.craigslist.org/eby/mcy/3710305817.html&quot;
  :title =&amp;gt; &quot;HARLEY 2012 FXWG 8 miles&quot;
  :seller =&amp;gt; :owner
  :price =&amp;gt; 14000
  :posted_at =&amp;gt; #&amp;lt;Date: 2013-03-28 ((2456380j,0s,0n),+0s,2299161j)&amp;gt;
  :location =&amp;gt; &quot;&quot;
  :id =&amp;gt; 3710305817
  :has_map? =&amp;gt; false
  :has_image? =&amp;gt; true
}
&amp;gt;&amp;gt; motorcycles[2].title
=&amp;gt; &quot;HARLEY 2012 FXWG 8 miles&quot;
&amp;gt;&amp;gt; motorcycles[2].price
=&amp;gt; 14000
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;The first line returns a complete listing.
Each listing element can accessed by appending it with a dot to the listing object, as demonstrated above.
For this Harley example, note that this is not scraping or accessing the actual Craigslist ad page for this Harley.
Instead, it&amp;#39;s just scraping the search results page.
If we wanted to get more information about this Harley, we&amp;#39;d have to use the URL (motorcycles[2].url) and look at it (or scrape it!) ourselves.&lt;/p&gt;

&lt;h2 id=&quot;differences-compared-to-ruby-gem-craigslist&quot;&gt;Differences Compared to Ruby Gem craigslist&lt;/h2&gt;

&lt;p&gt;So what&amp;#39;s the difference between this gem, and the Ruby gem &lt;a href=&quot;https://github.com/gregstallings/craigslist&quot;&gt;craigslist&lt;/a&gt;?
Both gems have one main function which returns a list of craigslist search results.
In craigslist this function is &lt;code&gt;.last()&lt;/code&gt;, and in craig this function is &lt;code&gt;.query()&lt;/code&gt;.
Both gems return a Ruby array which can be looped over to search through specific attributes.
The syntax of craig (using Ruby symbols) may be a bit cleaner than that of craigslist (using Ruby hashes).
Lastly, the documentation of craig goes a bit further than craigslist in showing what can be done with the scraping results.
However, it should be noted that searching through returned results is not a capability of either gem; looping and filtering is done in pure Ruby.&lt;/p&gt;

&lt;h2 id=&quot;summary&quot;&gt;Summary&lt;/h2&gt;

&lt;p&gt;The main takeaway is that both gems allow a user to do a basic Craigslist.org search,
without parameters such as a price, and both gems return an array of results.
These gems only return search results, and neither is capable of drilling down to the level of individual Craigslist.org listings.&lt;/p&gt;
</description>
        <pubDate>Sat, 23 Mar 2013 00:00:00 +0000</pubDate>
        <link>http://andrewsturges.com/blog/ruby/craigslist/2013/03/23/exploring-the-craigslist-ruby-gem.html</link>
        <guid isPermaLink="true">http://andrewsturges.com/blog/ruby/craigslist/2013/03/23/exploring-the-craigslist-ruby-gem.html</guid>
        
        
        <category>ruby</category>
        
        <category>craigslist</category>
        
      </item>
    
      <item>
        <title>Exploring the Ruby gem Craig</title>
        <description>&lt;h1 id=&quot;using-ruby-to-search-craigslist&quot;&gt;Using Ruby to search Craigslist&lt;/h1&gt;

&lt;p&gt;I want to buy a motorcycle on &lt;a href=&quot;craigslist.org&quot;&gt;Craigslist.org&lt;/a&gt;, and I want to get an idea of how the used motorcycle market behaves.
To that end, I want to make a few specific searches on Craigslist, once a day for a few weeks, and record their results for later analysis.
I would normally do this sort of scraping exercise in Ruby with &lt;a href=&quot;http://nokogiri.org/&quot;&gt;Nokogiri&lt;/a&gt; or in Python with lxml,
but this is Craigslist, and there are two Ruby gems made just for scraping Craigslist.
The first is called &lt;a href=&quot;https://github.com/gregstallings/craigslist&quot;&gt;Craigslist&lt;/a&gt;, and the second, a derivative,
is called &lt;a href=&quot;https://github.com/danneu/craig&quot;&gt;Craig&lt;/a&gt;.
In this post I&amp;#39;ll discuss the first gem, craigslist. I&amp;#39;m running Linux Ubuntu 12.10, with Ruby 1.9.3.&lt;/p&gt;

&lt;h2 id=&quot;install-craigslist&quot;&gt;Install craigslist&lt;/h2&gt;

&lt;p&gt;The first step is to install the craigslist gem:
&lt;code&gt;
$ gem install craigslist
&lt;/code&gt;
Some people might get a &amp;#39;missing requirements&amp;#39; error mentioning &amp;#39;libxslt&amp;#39;. If so, install some missing dev packages, and then try again:
&lt;code&gt;
$ sudo apt-get install libxslt-dev libxml2-dev
$ gem install craigslist
&lt;/code&gt;
Now see if it works by firing up Interactive Ruby (Irb):&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-&quot; data-lang=&quot;&quot;&gt;$ irb
&amp;gt;&amp;gt; require 'craigslist'
=&amp;gt; true
&amp;gt;&amp;gt; Craigslist.cities
=&amp;gt; [&quot;atlanta&quot;, &quot;austin&quot;, &quot;boston&quot;, &quot;chicago&quot;, &quot;dallas&quot;, &quot;denver&quot;, &quot;detroit&quot;, &quot;houston&quot;, &quot;las_vegas&quot;, &quot;los_angeles&quot;, &quot;miami&quot;, &quot;minneapolis&quot;, &quot;new_york&quot;, &quot;orange_co&quot;, &quot;philadelphia&quot;, &quot;phoenix&quot;, &quot;portland&quot;, &quot;raleigh&quot;, &quot;sacramento&quot;, &quot;san_diego&quot;, &quot;seattle&quot;, &quot;sf_bayarea&quot;, &quot;wash_dc&quot;]
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;If it returned a list of cities, as above, then it&amp;#39;s working.&lt;/p&gt;

&lt;h2 id=&quot;use-craigslist&quot;&gt;Use craigslist&lt;/h2&gt;

&lt;p&gt;Let&amp;#39;s see what categories are available (I&amp;#39;m requiring &lt;a href=&quot;http://www.ruby-doc.org/stdlib-2.0/libdoc/pp/rdoc/PP.html#method-c-pp&quot;&gt;pretty print&lt;/a&gt;
to format the output):&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-&quot; data-lang=&quot;&quot;&gt;&amp;gt;&amp;gt; require 'pp'
&amp;gt;&amp;gt; Craigslist.categories
&amp;gt;&amp;gt; pp Craigslist.categories
[&quot;accounting_finance&quot;,
 &quot;activities&quot;,
 &quot;admin_office&quot;,
 &quot;antiques&quot;,
 &quot;appliances&quot;,
 &quot;apts_housing&quot;,
 &quot;arch_engineering&quot;,
 &quot;art_media_design&quot;,
 &quot;artists&quot;,
 &quot;arts_crafts&quot;,
 &quot;auto_parts&quot;,
 &quot;automotive&quot;,
 &quot;baby_kids&quot;,
 &quot;barter&quot;,
 &quot;beauty&quot;,
 &quot;beauty_hlth&quot;,
 &quot;bikes&quot;,
 &quot;biotech_science&quot;,
 &quot;boats&quot;,
 &quot;books&quot;,
 &quot;business&quot;,
 &quot;business_mgmt&quot;,
 &quot;cars_trucks&quot;,
 &quot;casual_encounters&quot;,
 &quot;cds_dvd_vhs&quot;,
 &quot;cell_phones&quot;,
 &quot;childcare&quot;,
 &quot;classes&quot;,
 &quot;clothes_acc&quot;,
 &quot;collectibles&quot;,
 &quot;community&quot;,
 &quot;computer&quot;,
 &quot;computer&quot;,
 &quot;computer&quot;,
 &quot;creative&quot;,
 &quot;creative&quot;,
 &quot;crew&quot;,
 &quot;customer_service&quot;,
 &quot;cycle&quot;,
 &quot;domestic&quot;,
 &quot;education&quot;,
 &quot;electronics&quot;,
 &quot;etc&quot;,
 &quot;event&quot;,
 &quot;event&quot;,
 &quot;events&quot;,
 &quot;farm_garden&quot;,
 &quot;farm_garden&quot;,
 &quot;financial&quot;,
 &quot;food_bev_hosp&quot;,
 &quot;for_sale&quot;,
 &quot;free&quot;,
 &quot;furniture&quot;,
 &quot;garage_sale&quot;,
 &quot;general&quot;,
 &quot;general&quot;,
 &quot;general_labor&quot;,
 &quot;gigs&quot;,
 &quot;government&quot;,
 &quot;groups&quot;,
 &quot;household&quot;,
 &quot;household&quot;,
 &quot;housing&quot;,
 &quot;housing_swap&quot;,
 &quot;housing_wanted&quot;,
 &quot;human_resources&quot;,
 &quot;internet_engineers&quot;,
 &quot;jewelry&quot;,
 &quot;jobs&quot;,
 &quot;labor&quot;,
 &quot;labor_move&quot;,
 &quot;legal&quot;,
 &quot;legal_paralegal&quot;,
 &quot;lessons&quot;,
 &quot;local news&quot;,
 &quot;lost_found&quot;,
 &quot;manufacturing&quot;,
 &quot;marine&quot;,
 &quot;marketing_pr_ad&quot;,
 &quot;materials&quot;,
 &quot;medical_health&quot;,
 &quot;men_seeking_men&quot;,
 &quot;men_seeking_women&quot;,
 &quot;misc_romance&quot;,
 &quot;missed_connections&quot;,
 &quot;motorcycles&quot;,
 &quot;music_instr&quot;,
 &quot;musicians&quot;,
 &quot;nonprofit_sector&quot;,
 &quot;office_commercial&quot;,
 &quot;parking_storage&quot;,
 &quot;personals&quot;,
 &quot;pet&quot;,
 &quot;pets&quot;,
 &quot;photo_video&quot;,
 &quot;politics&quot;,
 &quot;rants_and_raves&quot;,
 &quot;real_estate&quot;,
 &quot;real_estate&quot;,
 &quot;real_estate_for_sale&quot;,
 &quot;resumes&quot;,
 &quot;retail_wholesale&quot;,
 &quot;rideshare&quot;,
 &quot;rooms_shared&quot;,
 &quot;rvs&quot;,
 &quot;sales_biz_dev&quot;,
 &quot;salon_spa_fitness&quot;,
 &quot;security&quot;,
 &quot;services&quot;,
 &quot;skilld_trade&quot;,
 &quot;skilled_trade_craft&quot;,
 &quot;sm_biz_ads&quot;,
 &quot;software_qa_dba&quot;,
 &quot;sporting&quot;,
 &quot;strictly_platonic&quot;,
 &quot;sublets_temporary&quot;,
 &quot;systems_network&quot;,
 &quot;talent&quot;,
 &quot;technical_support&quot;,
 &quot;therapeutic&quot;,
 &quot;tickets&quot;,
 &quot;tools&quot;,
 &quot;toys_games&quot;,
 &quot;transport&quot;,
 &quot;travel_vac&quot;,
 &quot;tv_film_video&quot;,
 &quot;vacation_rentals&quot;,
 &quot;video_gaming&quot;,
 &quot;volunteers&quot;,
 &quot;wanted&quot;,
 &quot;web_info_design&quot;,
 &quot;women_seek_women&quot;,
 &quot;women_seeking_men&quot;,
 &quot;write_ed_tr8&quot;,
 &quot;writing&quot;,
 &quot;writing_editing&quot;]
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;This is a huge list, and it&amp;#39;s worth taking a moment to compare it to the Craigslist.org homepage to see what we&amp;#39;re looking at.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://andrewsturges.com/blog/assets/craigslist_motorcycle_listing.png&quot; alt=&quot;Craigslist page screenshot&quot;&gt;&lt;/p&gt;

&lt;p&gt;Take just the &amp;quot;A&amp;#39;s&amp;quot; from the categories list returned by the craigslist gem and see where everything comes from.&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-&quot; data-lang=&quot;&quot;&gt;&quot;accounting_finance&quot;,
 &quot;activities&quot;,
 &quot;admin_office&quot;,
 &quot;antiques&quot;,
 &quot;appliances&quot;,
 &quot;apts_housing&quot;,
 &quot;arch_engineering&quot;,
 &quot;art_media_design&quot;,
 &quot;artists&quot;,
 &quot;arts_crafts&quot;,
 &quot;auto_parts&quot;,
 &quot;automotive&quot;,
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Notice that just among the &amp;quot;A&amp;#39;s&amp;quot;, &lt;code&gt;accounting_finance&lt;/code&gt;, &lt;code&gt;admin_office&lt;/code&gt;, &lt;code&gt;arch_engineering&lt;/code&gt;, and &lt;code&gt;art_media_design&lt;/code&gt;
come from the &amp;quot;jobs&amp;quot; heading, &lt;code&gt;activities&lt;/code&gt; comes from the &amp;quot;community&amp;quot; heading, &lt;code&gt;antiques&lt;/code&gt;, &lt;code&gt;appliances&lt;/code&gt;, &lt;code&gt;arts_crafts&lt;/code&gt;,
and &lt;code&gt;auto_parts&lt;/code&gt; come from the &amp;quot;for sale&amp;quot; heading, and &lt;code&gt;automotive&lt;/code&gt; comes from the &amp;quot;services&amp;quot; heading. There are a few things to notice:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The headings themselves (from the Craigslist.org homepage) are available as categories in the craigslist ruby gem.&lt;/li&gt;
&lt;li&gt;The categories returned by the craigslist Ruby gem are not spelled, spaced, capitalized, or ordered exactly as they appear on the Craigslist.org homepage.&lt;/li&gt;
&lt;li&gt;Nothing under &amp;quot;discussion forums&amp;quot; is available through the Ruby gem. &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;search-with-craigslist&quot;&gt;Search with craigslist&lt;/h2&gt;

&lt;p&gt;Now let&amp;#39;s do some searching through the &amp;quot;motorcycles&amp;quot; category.&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-&quot; data-lang=&quot;&quot;&gt;&amp;gt;&amp;gt; pp Craigslist.sf_bayarea.motorcycles.last(3)
[{&quot;text&quot;=&amp;gt;&quot;Alpinestar Jacket US36 EU46&quot;,
  &quot;href&quot;=&amp;gt;&quot;http://sfbay.craigslist.org/sby/mcy/3692451503.html&quot;,
  &quot;price&quot;=&amp;gt;&quot;$300&quot;,
  &quot;has_img&quot;=&amp;gt;false,
  &quot;has_pic&quot;=&amp;gt;true},
 {&quot;text&quot;=&amp;gt;&quot;'03 anniversary heirtage softtail&quot;,
  &quot;href&quot;=&amp;gt;&quot;http://sfbay.craigslist.org/nby/mcy/3674061914.html&quot;,
  &quot;price&quot;=&amp;gt;&quot;$10000&quot;,
  &quot;has_img&quot;=&amp;gt;false,
  &quot;has_pic&quot;=&amp;gt;true},
 {&quot;text&quot;=&amp;gt;&quot;1983 CR 480 DIRT BIKE&quot;,
  &quot;href&quot;=&amp;gt;&quot;http://sfbay.craigslist.org/scz/mcy/3638375348.html&quot;,
  &quot;price&quot;=&amp;gt;&quot;$1000&quot;,
  &quot;has_img&quot;=&amp;gt;false,
  &quot;has_pic&quot;=&amp;gt;true}]
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;This search returned the most recent 3 items from the SF Bay Area motorcycles listing.
However, if we look at the corresponding Craigslist.org page, we see something slightly different.
The items returned by the craigslist gem are present, but they&amp;#39;re not the most recent items.
The below image shows a screenshot of the Craigslist.org page, with the items returned by the craigslist gem surrounded by a black rectangle.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://andrewsturges.com/blog/assets/craigslist_motorcycle_listing.png&quot; alt=&quot;screenshot of craigslist showing motorcycle results&quot;&gt;&lt;/p&gt;

&lt;p&gt;I don&amp;#39;t know why these don&amp;#39;t correspond exactly, but the fact that they don&amp;#39;t is something to be aware of.&lt;/p&gt;

&lt;h2 id=&quot;craigslist-source-code&quot;&gt;craigslist Source Code&lt;/h2&gt;

&lt;p&gt;The craigslist gem Github page has some documentation.
But to get a better understanding of what we can do with craigslist, we have to look at the source code.
The easiest and clearest way to do this to to &lt;a href=&quot;https://github.com/gregstallings/craigslist&quot;&gt;read the source code on Github&lt;/a&gt;.
Here are a few useful pages to look at.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;craigslist/spec/craigslist_spec.rb&quot;&gt;craigslist/spec/craigslist_spec.rb&lt;/a&gt; This page is where the author wrote out some tests.
This is the easiest code to follow because he writes out in English what each test should do.
These tests illustrate all of the methods available in the craigslist gem.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/gregstallings/craigslist/blob/master/lib/craigslist/categories.rb&quot;&gt;craigslist/lib/craigslist/categories.rb&lt;/a&gt;
This file contains a Ruby hash called CATEGORIES that gives the associations between the categories as they are written in the craigslist gem and the categories as they appear as Craigslist.org URLs.
For example, by looking in this file you can find the category for &amp;quot;motorcycles&amp;quot; (under the &amp;quot;for_sale&amp;quot; heading)
and see that the corresponding Craigslist.org URL is &amp;#39;mca&amp;#39;.
craigslist/lib/craigslist.rb This file holds the main logic of the craigslist gem.
A glance at the method names shows where the cities, city?, categories, and last() methods come from.
Under CATEGORIES on line 49, we can see the build_uri() and more_results() methods, which are called by last().
A glance through last() shows that it builds a Craigslist.org-style URL (e.g. sfbay.craigslist.org/mca)
and then uses &lt;a href=&quot;http://nokogiri.org/&quot;&gt;Nokogiri&lt;/a&gt; to parse and return the results.
(To see how Nokogiri works, check the documentation or read &lt;a href=&quot;http://andrewsturges.blogspot.com/2011/09/how-to-harvest-web-data-using-ruby-and.html&quot;&gt;my blog post about using Nokogiri to scrape a web site&lt;/a&gt;.)&lt;/p&gt;

&lt;p&gt;That&amp;#39;s it. By reading through the source code, we see that the main and only functionality of the craigslist gem is to take a
city and category and use the &lt;code&gt;last()&lt;/code&gt; method to return some number of recent results from the corresponding Craigslist.org page.
No further query methods or refinements are available.
For that we turn to another gem, this one called craig, which is the subject of the next blog post.&lt;/p&gt;

&lt;h2 id=&quot;summary&quot;&gt;Summary&lt;/h2&gt;

&lt;p&gt;The craigslist gem has the capability to take a city and Craigslist.org category as arguments, and return a well-structured
Ruby array of text scraped from the corresponding Craigslist.org page.
The main and virtually only functionality is as follows:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-&quot; data-lang=&quot;&quot;&gt;$ irb
&amp;gt;&amp;gt; require 'craigslist'
=&amp;gt; true
&amp;gt;&amp;gt; Craigslist.sf_bayarea.motorcycles.last(100)
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;It is a robust but limited gem.
Query refinements are not possible, and further processing or analysis of the returned values is done outside the craigslist gem.
Thanks are due to &lt;a href=&quot;https://github.com/gregstallings&quot;&gt;Greg Stallings&lt;/a&gt; for his work on the gem, and for releasing it as open source.&lt;/p&gt;
</description>
        <pubDate>Wed, 20 Mar 2013 00:00:00 +0000</pubDate>
        <link>http://andrewsturges.com/blog/ruby/craigslist/2013/03/20/exploring-the-ruby-gem-craig.html</link>
        <guid isPermaLink="true">http://andrewsturges.com/blog/ruby/craigslist/2013/03/20/exploring-the-ruby-gem-craig.html</guid>
        
        
        <category>ruby</category>
        
        <category>craigslist</category>
        
      </item>
    
      <item>
        <title>Solving a prisoner escape riddle</title>
        <description>&lt;!DOCTYPE html&gt;
&lt;html&gt;
&lt;head&gt;

&lt;meta charset=&quot;utf-8&quot; /&gt;
&lt;title&gt;Notebook&lt;/title&gt;

&lt;script src=&quot;https://cdnjs.cloudflare.com/ajax/libs/require.js/2.1.10/require.min.js&quot;&gt;&lt;/script&gt;
&lt;script src=&quot;https://cdnjs.cloudflare.com/ajax/libs/jquery/2.0.3/jquery.min.js&quot;&gt;&lt;/script&gt;

&lt;style type=&quot;text/css&quot;&gt;
    .clearfix{*zoom:1}.clearfix:before,.clearfix:after{display:table;content:&quot;&quot;;line-height:0}
.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:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}
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%;width:auto\9;height:auto;vertical-align:middle;border:0;-ms-interpolation-mode:bicubic}
#map_canvas img,.google-maps 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,html input[type=&quot;button&quot;],input[type=&quot;reset&quot;],input[type=&quot;submit&quot;]{-webkit-appearance:button;cursor:pointer}
label,select,button,input[type=&quot;button&quot;],input[type=&quot;reset&quot;],input[type=&quot;submit&quot;],input[type=&quot;radio&quot;],input[type=&quot;checkbox&quot;]{cursor:pointer}
input[type=&quot;search&quot;]{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield}
input[type=&quot;search&quot;]::-webkit-search-decoration,input[type=&quot;search&quot;]::-webkit-search-cancel-button{-webkit-appearance:none}
textarea{overflow:auto;vertical-align:top}
@media print{*{text-shadow:none !important;color:#000 !important;background:transparent !important;box-shadow:none !important} a,a:visited{text-decoration:underline} a[href]:after{content:&quot; (&quot; attr(href) &quot;)&quot;} abbr[title]:after{content:&quot; (&quot; attr(title) &quot;)&quot;} .ir a:after,a[href^=&quot;javascript:&quot;]:after,a[href^=&quot;#&quot;]:after{content:&quot;&quot;} pre,blockquote{border:1px solid #999;page-break-inside:avoid} thead{display:table-header-group} tr,img{page-break-inside:avoid} img{max-width:100% !important} @page {margin:.5cm}p,h2,h3{orphans:3;widows:3} h2,h3{page-break-after:avoid}}body{margin:0;font-family:&quot;Helvetica Neue&quot;,Helvetica,Arial,sans-serif;font-size:13px;line-height:20px;color:#000;background-color:#fff}
a{color:#08c;text-decoration:none}
a:hover,a:focus{color:#005580;text-decoration:underline}
.img-rounded{border-radius:6px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}
.img-polaroid{padding:4px;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);-webkit-box-shadow:0 1px 3px rgba(0,0,0,0.1);-moz-box-shadow:0 1px 3px rgba(0,0,0,0.1);box-shadow:0 1px 3px rgba(0,0,0,0.1)}
.img-circle{border-radius:500px;-webkit-border-radius:500px;-moz-border-radius:500px;border-radius:500px}
.row{margin-left:-20px;*zoom:1}.row:before,.row:after{display:table;content:&quot;&quot;;line-height:0}
.row:after{clear:both}
[class*=&quot;span&quot;]{float:left;min-height:1px;margin-left:20px}
.container,.navbar-static-top .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:&quot;&quot;;line-height:0}
.row-fluid:after{clear:both}
.row-fluid [class*=&quot;span&quot;]{display:block;width:100%;min-height:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;float:left;margin-left:2.127659574468085%;*margin-left:2.074468085106383%}
.row-fluid [class*=&quot;span&quot;]:first-child{margin-left:0}
.row-fluid .controls-row [class*=&quot;span&quot;]+[class*=&quot;span&quot;]{margin-left:2.127659574468085%}
.row-fluid .span12{width:100%;*width:99.94680851063829%}
.row-fluid .span11{width:91.48936170212765%;*width:91.43617021276594%}
.row-fluid .span10{width:82.97872340425532%;*width:82.92553191489361%}
.row-fluid .span9{width:74.46808510638297%;*width:74.41489361702126%}
.row-fluid .span8{width:65.95744680851064%;*width:65.90425531914893%}
.row-fluid .span7{width:57.44680851063829%;*width:57.39361702127659%}
.row-fluid .span6{width:48.93617021276595%;*width:48.88297872340425%}
.row-fluid .span5{width:40.42553191489362%;*width:40.37234042553192%}
.row-fluid .span4{width:31.914893617021278%;*width:31.861702127659576%}
.row-fluid .span3{width:23.404255319148934%;*width:23.351063829787233%}
.row-fluid .span2{width:14.893617021276595%;*width:14.840425531914894%}
.row-fluid .span1{width:6.382978723404255%;*width:6.329787234042553%}
.row-fluid .offset12{margin-left:104.25531914893617%;*margin-left:104.14893617021275%}
.row-fluid .offset12:first-child{margin-left:102.12765957446808%;*margin-left:102.02127659574467%}
.row-fluid .offset11{margin-left:95.74468085106382%;*margin-left:95.6382978723404%}
.row-fluid .offset11:first-child{margin-left:93.61702127659574%;*margin-left:93.51063829787232%}
.row-fluid .offset10{margin-left:87.23404255319149%;*margin-left:87.12765957446807%}
.row-fluid .offset10:first-child{margin-left:85.1063829787234%;*margin-left:84.99999999999999%}
.row-fluid .offset9{margin-left:78.72340425531914%;*margin-left:78.61702127659572%}
.row-fluid .offset9:first-child{margin-left:76.59574468085106%;*margin-left:76.48936170212764%}
.row-fluid .offset8{margin-left:70.2127659574468%;*margin-left:70.10638297872339%}
.row-fluid .offset8:first-child{margin-left:68.08510638297872%;*margin-left:67.9787234042553%}
.row-fluid .offset7{margin-left:61.70212765957446%;*margin-left:61.59574468085106%}
.row-fluid .offset7:first-child{margin-left:59.574468085106375%;*margin-left:59.46808510638297%}
.row-fluid .offset6{margin-left:53.191489361702125%;*margin-left:53.085106382978715%}
.row-fluid .offset6:first-child{margin-left:51.063829787234035%;*margin-left:50.95744680851063%}
.row-fluid .offset5{margin-left:44.68085106382979%;*margin-left:44.57446808510638%}
.row-fluid .offset5:first-child{margin-left:42.5531914893617%;*margin-left:42.4468085106383%}
.row-fluid .offset4{margin-left:36.170212765957444%;*margin-left:36.06382978723405%}
.row-fluid .offset4:first-child{margin-left:34.04255319148936%;*margin-left:33.93617021276596%}
.row-fluid .offset3{margin-left:27.659574468085104%;*margin-left:27.5531914893617%}
.row-fluid .offset3:first-child{margin-left:25.53191489361702%;*margin-left:25.425531914893618%}
.row-fluid .offset2{margin-left:19.148936170212764%;*margin-left:19.04255319148936%}
.row-fluid .offset2:first-child{margin-left:17.02127659574468%;*margin-left:16.914893617021278%}
.row-fluid .offset1{margin-left:10.638297872340425%;*margin-left:10.53191489361702%}
.row-fluid .offset1:first-child{margin-left:8.51063829787234%;*margin-left:8.404255319148938%}
[class*=&quot;span&quot;].hide,.row-fluid [class*=&quot;span&quot;].hide{display:none}
[class*=&quot;span&quot;].pull-right,.row-fluid [class*=&quot;span&quot;].pull-right{float:right}
.container{margin-right:auto;margin-left:auto;*zoom:1}.container:before,.container:after{display:table;content:&quot;&quot;;line-height:0}
.container:after{clear:both}
.container-fluid{padding-right:20px;padding-left:20px;*zoom:1}.container-fluid:before,.container-fluid:after{display:table;content:&quot;&quot;;line-height:0}
.container-fluid:after{clear:both}
p{margin:0 0 10px}
.lead{margin-bottom:20px;font-size:19.5px;font-weight:200;line-height:30px}
small{font-size:85%}
strong{font-weight:bold}
em{font-style:italic}
cite{font-style:normal}
.muted{color:#999}
a.muted:hover,a.muted:focus{color:#808080}
.text-warning{color:#c09853}
a.text-warning:hover,a.text-warning:focus{color:#a47e3c}
.text-error{color:#b94a48}
a.text-error:hover,a.text-error:focus{color:#953b39}
.text-info{color:#3a87ad}
a.text-info:hover,a.text-info:focus{color:#2d6987}
.text-success{color:#468847}
a.text-success:hover,a.text-success:focus{color:#356635}
.text-left{text-align:left}
.text-right{text-align:right}
.text-center{text-align:center}
h1,h2,h3,h4,h5,h6{margin:10px 0;font-family:inherit;font-weight:bold;line-height:20px;color:inherit;text-rendering:optimizelegibility}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small{font-weight:normal;line-height:1;color:#999}
h1,h2,h3{line-height:40px}
h1{font-size:35.75px}
h2{font-size:29.25px}
h3{font-size:22.75px}
h4{font-size:16.25px}
h5{font-size:13px}
h6{font-size:11.049999999999999px}
h1 small{font-size:22.75px}
h2 small{font-size:16.25px}
h3 small{font-size:13px}
h4 small{font-size:13px}
.page-header{padding-bottom:9px;margin:20px 0 30px;border-bottom:1px solid #eee}
ul,ol{padding:0;margin:0 0 10px 25px}
ul ul,ul ol,ol ol,ol ul{margin-bottom:0}
li{line-height:20px}
ul.unstyled,ol.unstyled{margin-left:0;list-style:none}
ul.inline,ol.inline{margin-left:0;list-style:none}ul.inline&gt;li,ol.inline&gt;li{display:inline-block;*display:inline;*zoom:1;padding-left:5px;padding-right:5px}
dl{margin-bottom:20px}
dt,dd{line-height:20px}
dt{font-weight:bold}
dd{margin-left:10px}
.dl-horizontal{*zoom:1}.dl-horizontal:before,.dl-horizontal:after{display:table;content:&quot;&quot;;line-height:0}
.dl-horizontal:after{clear:both}
.dl-horizontal dt{float:left;width:160px;clear:left;text-align:right;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.dl-horizontal dd{margin-left:180px}
hr{margin:20px 0;border:0;border-top:1px solid #eee;border-bottom:1px solid #fff}
abbr[title],abbr[data-original-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 20px;border-left:5px solid #eee}blockquote p{margin-bottom:0;font-size:16.25px;font-weight:300;line-height:1.25}
blockquote small{display:block;line-height:20px;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}
blockquote.pull-right small:before{content:''}
blockquote.pull-right small:after{content:'\00A0 \2014'}
q:before,q:after,blockquote:before,blockquote:after{content:&quot;&quot;}
address{display:block;margin-bottom:20px;font-style:normal;line-height:20px}
code,pre{padding:0 3px 2px;font-family:monospace;font-size:11px;color:#333;border-radius:3px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}
code{padding:2px 4px;color:#d14;background-color:#f7f7f9;border:1px solid #e1e1e8;white-space:nowrap}
pre{display:block;padding:9.5px;margin:0 0 10px;font-size:12px;line-height:20px;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);border-radius:4px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}pre.prettyprint{margin-bottom:20px}
pre code{padding:0;color:inherit;white-space:pre;white-space:pre-wrap;background-color:transparent;border:0}
.pre-scrollable{max-height:340px;overflow-y:scroll}
form{margin:0 0 20px}
fieldset{padding:0;margin:0;border:0}
legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:19.5px;line-height:40px;color:#333;border:0;border-bottom:1px solid #e5e5e5}legend small{font-size:15px;color:#999}
label,input,button,select,textarea{font-size:13px;font-weight:normal;line-height:20px}
input,button,select,textarea{font-family:&quot;Helvetica Neue&quot;,Helvetica,Arial,sans-serif}
label{display:block;margin-bottom:5px}
select,textarea,input[type=&quot;text&quot;],input[type=&quot;password&quot;],input[type=&quot;datetime&quot;],input[type=&quot;datetime-local&quot;],input[type=&quot;date&quot;],input[type=&quot;month&quot;],input[type=&quot;time&quot;],input[type=&quot;week&quot;],input[type=&quot;number&quot;],input[type=&quot;email&quot;],input[type=&quot;url&quot;],input[type=&quot;search&quot;],input[type=&quot;tel&quot;],input[type=&quot;color&quot;],.uneditable-input{display:inline-block;height:20px;padding:4px 6px;margin-bottom:10px;font-size:13px;line-height:20px;color:#555;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;vertical-align:middle}
input,textarea,.uneditable-input{width:206px}
textarea{height:auto}
textarea,input[type=&quot;text&quot;],input[type=&quot;password&quot;],input[type=&quot;datetime&quot;],input[type=&quot;datetime-local&quot;],input[type=&quot;date&quot;],input[type=&quot;month&quot;],input[type=&quot;time&quot;],input[type=&quot;week&quot;],input[type=&quot;number&quot;],input[type=&quot;email&quot;],input[type=&quot;url&quot;],input[type=&quot;search&quot;],input[type=&quot;tel&quot;],input[type=&quot;color&quot;],.uneditable-input{background-color:#fff;border:1px solid #ccc;-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;-o-transition:border linear .2s, box-shadow linear .2s;transition:border linear .2s, box-shadow linear .2s}textarea:focus,input[type=&quot;text&quot;]:focus,input[type=&quot;password&quot;]:focus,input[type=&quot;datetime&quot;]:focus,input[type=&quot;datetime-local&quot;]:focus,input[type=&quot;date&quot;]:focus,input[type=&quot;month&quot;]:focus,input[type=&quot;time&quot;]:focus,input[type=&quot;week&quot;]:focus,input[type=&quot;number&quot;]:focus,input[type=&quot;email&quot;]:focus,input[type=&quot;url&quot;]:focus,input[type=&quot;search&quot;]:focus,input[type=&quot;tel&quot;]:focus,input[type=&quot;color&quot;]: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,.075), 0 0 8px rgba(82,168,236,.6);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(82,168,236,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(82,168,236,.6)}
input[type=&quot;radio&quot;],input[type=&quot;checkbox&quot;]{margin:4px 0 0;*margin-top:0;margin-top:1px \9;line-height:normal}
input[type=&quot;file&quot;],input[type=&quot;image&quot;],input[type=&quot;submit&quot;],input[type=&quot;reset&quot;],input[type=&quot;button&quot;],input[type=&quot;radio&quot;],input[type=&quot;checkbox&quot;]{width:auto}
select,input[type=&quot;file&quot;]{height:30px;*margin-top:4px;line-height:30px}
select{width:220px;border:1px solid #ccc;background-color:#fff}
select[multiple],select[size]{height:auto}
select:focus,input[type=&quot;file&quot;]:focus,input[type=&quot;radio&quot;]:focus,input[type=&quot;checkbox&quot;]:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}
.uneditable-input,.uneditable-textarea{color:#999;background-color:#fcfcfc;border-color:#ccc;-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);cursor:not-allowed}
.uneditable-input{overflow:hidden;white-space:nowrap}
.uneditable-textarea{width:auto;height:auto}
input:-moz-placeholder,textarea:-moz-placeholder{color:#999}
input:-ms-input-placeholder,textarea:-ms-input-placeholder{color:#999}
input::-webkit-input-placeholder,textarea::-webkit-input-placeholder{color:#999}
.radio,.checkbox{min-height:20px;padding-left:20px}
.radio input[type=&quot;radio&quot;],.checkbox input[type=&quot;checkbox&quot;]{float:left;margin-left:-20px}
.controls&gt;.radio:first-child,.controls&gt;.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*=&quot;span&quot;],select[class*=&quot;span&quot;],textarea[class*=&quot;span&quot;],.uneditable-input[class*=&quot;span&quot;],.row-fluid input[class*=&quot;span&quot;],.row-fluid select[class*=&quot;span&quot;],.row-fluid textarea[class*=&quot;span&quot;],.row-fluid .uneditable-input[class*=&quot;span&quot;]{float:none;margin-left:0}
.input-append input[class*=&quot;span&quot;],.input-append .uneditable-input[class*=&quot;span&quot;],.input-prepend input[class*=&quot;span&quot;],.input-prepend .uneditable-input[class*=&quot;span&quot;],.row-fluid input[class*=&quot;span&quot;],.row-fluid select[class*=&quot;span&quot;],.row-fluid textarea[class*=&quot;span&quot;],.row-fluid .uneditable-input[class*=&quot;span&quot;],.row-fluid .input-prepend [class*=&quot;span&quot;],.row-fluid .input-append [class*=&quot;span&quot;]{display:inline-block}
input,textarea,.uneditable-input{margin-left:0}
.controls-row [class*=&quot;span&quot;]+[class*=&quot;span&quot;]{margin-left:20px}
input.span12,textarea.span12,.uneditable-input.span12{width:926px}
input.span11,textarea.span11,.uneditable-input.span11{width:846px}
input.span10,textarea.span10,.uneditable-input.span10{width:766px}
input.span9,textarea.span9,.uneditable-input.span9{width:686px}
input.span8,textarea.span8,.uneditable-input.span8{width:606px}
input.span7,textarea.span7,.uneditable-input.span7{width:526px}
input.span6,textarea.span6,.uneditable-input.span6{width:446px}
input.span5,textarea.span5,.uneditable-input.span5{width:366px}
input.span4,textarea.span4,.uneditable-input.span4{width:286px}
input.span3,textarea.span3,.uneditable-input.span3{width:206px}
input.span2,textarea.span2,.uneditable-input.span2{width:126px}
input.span1,textarea.span1,.uneditable-input.span1{width:46px}
.controls-row{*zoom:1}.controls-row:before,.controls-row:after{display:table;content:&quot;&quot;;line-height:0}
.controls-row:after{clear:both}
.controls-row [class*=&quot;span&quot;],.row-fluid .controls-row [class*=&quot;span&quot;]{float:left}
.controls-row .checkbox[class*=&quot;span&quot;],.controls-row .radio[class*=&quot;span&quot;]{padding-top:5px}
input[disabled],select[disabled],textarea[disabled],input[readonly],select[readonly],textarea[readonly]{cursor:not-allowed;background-color:#eee}
input[type=&quot;radio&quot;][disabled],input[type=&quot;checkbox&quot;][disabled],input[type=&quot;radio&quot;][readonly],input[type=&quot;checkbox&quot;][readonly]{background-color:transparent}
.control-group.warning .control-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}
.control-group.warning input,.control-group.warning select,.control-group.warning textarea{border-color:#c09853;-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)}.control-group.warning input:focus,.control-group.warning select:focus,.control-group.warning textarea:focus{border-color:#a47e3c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #dbc59e;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #dbc59e;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),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 .control-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}
.control-group.error input,.control-group.error select,.control-group.error textarea{border-color:#b94a48;-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)}.control-group.error input:focus,.control-group.error select:focus,.control-group.error textarea:focus{border-color:#953b39;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #d59392;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #d59392;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),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 .control-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}
.control-group.success input,.control-group.success select,.control-group.success textarea{border-color:#468847;-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)}.control-group.success input:focus,.control-group.success select:focus,.control-group.success textarea:focus{border-color:#356635;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7aba7b;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7aba7b;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),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}
.control-group.info .control-label,.control-group.info .help-block,.control-group.info .help-inline{color:#3a87ad}
.control-group.info .checkbox,.control-group.info .radio,.control-group.info input,.control-group.info select,.control-group.info textarea{color:#3a87ad}
.control-group.info input,.control-group.info select,.control-group.info textarea{border-color:#3a87ad;-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)}.control-group.info input:focus,.control-group.info select:focus,.control-group.info textarea:focus{border-color:#2d6987;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7ab5d3;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7ab5d3;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7ab5d3}
.control-group.info .input-prepend .add-on,.control-group.info .input-append .add-on{color:#3a87ad;background-color:#d9edf7;border-color:#3a87ad}
input:focus:invalid,textarea:focus:invalid,select:focus:invalid{color:#b94a48;border-color:#ee5f5b}input:focus:invalid:focus,textarea:focus:invalid:focus,select:focus: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:19px 20px 20px;margin-top:20px;margin-bottom:20px;background-color:#f5f5f5;border-top:1px solid #e5e5e5;*zoom:1}.form-actions:before,.form-actions:after{display:table;content:&quot;&quot;;line-height:0}
.form-actions:after{clear:both}
.help-block,.help-inline{color:#262626}
.help-block{display:block;margin-bottom:10px}
.help-inline{display:inline-block;*display:inline;*zoom:1;vertical-align:middle;padding-left:5px}
.input-append,.input-prepend{display:inline-block;margin-bottom:10px;vertical-align:middle;font-size:0;white-space:nowrap}.input-append input,.input-prepend input,.input-append select,.input-prepend select,.input-append .uneditable-input,.input-prepend .uneditable-input,.input-append .dropdown-menu,.input-prepend .dropdown-menu,.input-append .popover,.input-prepend .popover{font-size:13px}
.input-append input,.input-prepend input,.input-append select,.input-prepend select,.input-append .uneditable-input,.input-prepend .uneditable-input{position:relative;margin-bottom:0;*margin-left:0;vertical-align:top;border-radius:0 4px 4px 0;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.input-append input:focus,.input-prepend input:focus,.input-append select:focus,.input-prepend select:focus,.input-append .uneditable-input:focus,.input-prepend .uneditable-input:focus{z-index:2}
.input-append .add-on,.input-prepend .add-on{display:inline-block;width:auto;height:20px;min-width:16px;padding:4px 5px;font-size:13px;font-weight:normal;line-height:20px;text-align:center;text-shadow:0 1px 0 #fff;background-color:#eee;border:1px solid #ccc}
.input-append .add-on,.input-prepend .add-on,.input-append .btn,.input-prepend .btn,.input-append .btn-group&gt;.dropdown-toggle,.input-prepend .btn-group&gt;.dropdown-toggle{vertical-align:top;border-radius:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}
.input-append .active,.input-prepend .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{border-radius:4px 0 0 4px;-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}
.input-append input,.input-append select,.input-append .uneditable-input{border-radius:4px 0 0 4px;-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}.input-append input+.btn-group .btn:last-child,.input-append select+.btn-group .btn:last-child,.input-append .uneditable-input+.btn-group .btn:last-child{border-radius:0 4px 4px 0;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}
.input-append .add-on,.input-append .btn,.input-append .btn-group{margin-left:-1px}
.input-append .add-on:last-child,.input-append .btn:last-child,.input-append .btn-group:last-child&gt;.dropdown-toggle{border-radius:0 4px 4px 0;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}
.input-prepend.input-append input,.input-prepend.input-append select,.input-prepend.input-append .uneditable-input{border-radius:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.input-prepend.input-append input+.btn-group .btn,.input-prepend.input-append select+.btn-group .btn,.input-prepend.input-append .uneditable-input+.btn-group .btn{border-radius:0 4px 4px 0;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}
.input-prepend.input-append .add-on:first-child,.input-prepend.input-append .btn:first-child{margin-right:-1px;border-radius:4px 0 0 4px;-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}
.input-prepend.input-append .add-on:last-child,.input-prepend.input-append .btn:last-child{margin-left:-1px;border-radius:0 4px 4px 0;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}
.input-prepend.input-append .btn-group:first-child{margin-left:0}
input.search-query{padding-right:14px;padding-right:4px \9;padding-left:14px;padding-left:4px \9;margin-bottom:0;border-radius:15px;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px}
.form-search .input-append .search-query,.form-search .input-prepend .search-query{border-radius:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}
.form-search .input-append .search-query{border-radius:14px 0 0 14px;-webkit-border-radius:14px 0 0 14px;-moz-border-radius:14px 0 0 14px;border-radius:14px 0 0 14px}
.form-search .input-append .btn{border-radius:0 14px 14px 0;-webkit-border-radius:0 14px 14px 0;-moz-border-radius:0 14px 14px 0;border-radius:0 14px 14px 0}
.form-search .input-prepend .search-query{border-radius:0 14px 14px 0;-webkit-border-radius:0 14px 14px 0;-moz-border-radius:0 14px 14px 0;border-radius:0 14px 14px 0}
.form-search .input-prepend .btn{border-radius:14px 0 0 14px;-webkit-border-radius:14px 0 0 14px;-moz-border-radius:14px 0 0 14px;border-radius:14px 0 0 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;*zoom:1;margin-bottom:0;vertical-align:middle}
.form-search .hide,.form-inline .hide,.form-horizontal .hide{display:none}
.form-search label,.form-inline label,.form-search .btn-group,.form-inline .btn-group{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=&quot;radio&quot;],.form-search .checkbox input[type=&quot;checkbox&quot;],.form-inline .radio input[type=&quot;radio&quot;],.form-inline .checkbox input[type=&quot;checkbox&quot;]{float:left;margin-right:3px;margin-left:0}
.control-group{margin-bottom:10px}
legend+.control-group{margin-top:20px;-webkit-margin-top-collapse:separate}
.form-horizontal .control-group{margin-bottom:20px;*zoom:1}.form-horizontal .control-group:before,.form-horizontal .control-group:after{display:table;content:&quot;&quot;;line-height:0}
.form-horizontal .control-group:after{clear:both}
.form-horizontal .control-label{float:left;width:160px;padding-top:5px;text-align:right}
.form-horizontal .controls{*display:inline-block;*padding-left:20px;margin-left:180px;*margin-left:0}.form-horizontal .controls:first-child{*padding-left:180px}
.form-horizontal .help-block{margin-bottom:0}
.form-horizontal input+.help-block,.form-horizontal select+.help-block,.form-horizontal textarea+.help-block,.form-horizontal .uneditable-input+.help-block,.form-horizontal .input-prepend+.help-block,.form-horizontal .input-append+.help-block{margin-top:10px}
.form-horizontal .form-actions{padding-left:180px}
table{max-width:100%;background-color:transparent;border-collapse:collapse;border-spacing:0}
.table{width:100%;margin-bottom:20px}.table th,.table td{padding:8px;line-height:20px;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 .table{background-color:#fff}
.table-condensed th,.table-condensed td{padding:4px 5px}
.table-bordered{border:1px solid #ddd;border-collapse:separate;*border-collapse:collapse;border-left:0;border-radius:4px;-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&gt;th:first-child,.table-bordered tbody:first-child tr:first-child&gt;td:first-child,.table-bordered tbody:first-child tr:first-child&gt;th:first-child{-webkit-border-top-left-radius:4px;-moz-border-radius-topleft:4px;border-top-left-radius:4px}
.table-bordered thead:first-child tr:first-child&gt;th:last-child,.table-bordered tbody:first-child tr:first-child&gt;td:last-child,.table-bordered tbody:first-child tr:first-child&gt;th:last-child{-webkit-border-top-right-radius:4px;-moz-border-radius-topright:4px;border-top-right-radius:4px}
.table-bordered thead:last-child tr:last-child&gt;th:first-child,.table-bordered tbody:last-child tr:last-child&gt;td:first-child,.table-bordered tbody:last-child tr:last-child&gt;th:first-child,.table-bordered tfoot:last-child tr:last-child&gt;td:first-child,.table-bordered tfoot:last-child tr:last-child&gt;th:first-child{-webkit-border-bottom-left-radius:4px;-moz-border-radius-bottomleft:4px;border-bottom-left-radius:4px}
.table-bordered thead:last-child tr:last-child&gt;th:last-child,.table-bordered tbody:last-child tr:last-child&gt;td:last-child,.table-bordered tbody:last-child tr:last-child&gt;th:last-child,.table-bordered tfoot:last-child tr:last-child&gt;td:last-child,.table-bordered tfoot:last-child tr:last-child&gt;th:last-child{-webkit-border-bottom-right-radius:4px;-moz-border-radius-bottomright:4px;border-bottom-right-radius:4px}
.table-bordered tfoot+tbody:last-child tr:last-child td:first-child{-webkit-border-bottom-left-radius:0;-moz-border-radius-bottomleft:0;border-bottom-left-radius:0}
.table-bordered tfoot+tbody:last-child tr:last-child td:last-child{-webkit-border-bottom-right-radius:0;-moz-border-radius-bottomright:0;border-bottom-right-radius:0}
.table-bordered caption+thead tr:first-child th:first-child,.table-bordered caption+tbody tr:first-child td:first-child,.table-bordered colgroup+thead tr:first-child th:first-child,.table-bordered colgroup+tbody tr:first-child td:first-child{-webkit-border-top-left-radius:4px;-moz-border-radius-topleft:4px;border-top-left-radius:4px}
.table-bordered caption+thead tr:first-child th:last-child,.table-bordered caption+tbody tr:first-child td:last-child,.table-bordered colgroup+thead tr:first-child th:last-child,.table-bordered colgroup+tbody tr:first-child td:last-child{-webkit-border-top-right-radius:4px;-moz-border-radius-topright:4px;border-top-right-radius:4px}
.table-striped tbody&gt;tr:nth-child(odd)&gt;td,.table-striped tbody&gt;tr:nth-child(odd)&gt;th{background-color:#f9f9f9}
.table-hover tbody tr:hover&gt;td,.table-hover tbody tr:hover&gt;th{background-color:#f5f5f5}
table td[class*=&quot;span&quot;],table th[class*=&quot;span&quot;],.row-fluid table td[class*=&quot;span&quot;],.row-fluid table th[class*=&quot;span&quot;]{display:table-cell;float:none;margin-left:0}
.table td.span1,.table th.span1{float:none;width:44px;margin-left:0}
.table td.span2,.table th.span2{float:none;width:124px;margin-left:0}
.table td.span3,.table th.span3{float:none;width:204px;margin-left:0}
.table td.span4,.table th.span4{float:none;width:284px;margin-left:0}
.table td.span5,.table th.span5{float:none;width:364px;margin-left:0}
.table td.span6,.table th.span6{float:none;width:444px;margin-left:0}
.table td.span7,.table th.span7{float:none;width:524px;margin-left:0}
.table td.span8,.table th.span8{float:none;width:604px;margin-left:0}
.table td.span9,.table th.span9{float:none;width:684px;margin-left:0}
.table td.span10,.table th.span10{float:none;width:764px;margin-left:0}
.table td.span11,.table th.span11{float:none;width:844px;margin-left:0}
.table td.span12,.table th.span12{float:none;width:924px;margin-left:0}
.table tbody tr.success&gt;td{background-color:#dff0d8}
.table tbody tr.error&gt;td{background-color:#f2dede}
.table tbody tr.warning&gt;td{background-color:#fcf8e3}
.table tbody tr.info&gt;td{background-color:#d9edf7}
.table-hover tbody tr.success:hover&gt;td{background-color:#d0e9c6}
.table-hover tbody tr.error:hover&gt;td{background-color:#ebcccc}
.table-hover tbody tr.warning:hover&gt;td{background-color:#faf2cc}
.table-hover tbody tr.info:hover&gt;td{background-color:#c4e3f3}
[class^=&quot;icon-&quot;],[class*=&quot; icon-&quot;]{display:inline-block;width:14px;height:14px;*margin-right:.3em;line-height:14px;vertical-align:text-top;background-image:url(&quot;../img/glyphicons-halflings.png&quot;);background-position:14px 14px;background-repeat:no-repeat;margin-top:1px}
.icon-white,.nav-pills&gt;.active&gt;a&gt;[class^=&quot;icon-&quot;],.nav-pills&gt;.active&gt;a&gt;[class*=&quot; icon-&quot;],.nav-list&gt;.active&gt;a&gt;[class^=&quot;icon-&quot;],.nav-list&gt;.active&gt;a&gt;[class*=&quot; icon-&quot;],.navbar-inverse .nav&gt;.active&gt;a&gt;[class^=&quot;icon-&quot;],.navbar-inverse .nav&gt;.active&gt;a&gt;[class*=&quot; icon-&quot;],.dropdown-menu&gt;li&gt;a:hover&gt;[class^=&quot;icon-&quot;],.dropdown-menu&gt;li&gt;a:focus&gt;[class^=&quot;icon-&quot;],.dropdown-menu&gt;li&gt;a:hover&gt;[class*=&quot; icon-&quot;],.dropdown-menu&gt;li&gt;a:focus&gt;[class*=&quot; icon-&quot;],.dropdown-menu&gt;.active&gt;a&gt;[class^=&quot;icon-&quot;],.dropdown-menu&gt;.active&gt;a&gt;[class*=&quot; icon-&quot;],.dropdown-submenu:hover&gt;a&gt;[class^=&quot;icon-&quot;],.dropdown-submenu:focus&gt;a&gt;[class^=&quot;icon-&quot;],.dropdown-submenu:hover&gt;a&gt;[class*=&quot; icon-&quot;],.dropdown-submenu:focus&gt;a&gt;[class*=&quot; icon-&quot;]{background-image:url(&quot;../img/glyphicons-halflings-white.png&quot;)}
.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;width:16px}
.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;width:16px}
.icon-folder-open{background-position:-408px -120px;width:16px}
.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:&quot;&quot;}
.dropdown .caret{margin-top:8px;margin-left:2px}
.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 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:6px;-moz-border-radius:6px;border-radius:6px;-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:9px 1px;*margin:-5px 0 5px;overflow:hidden;background-color:#e5e5e5;border-bottom:1px solid #fff}
.dropdown-menu&gt;li&gt;a{display:block;padding:3px 20px;clear:both;font-weight:normal;line-height:20px;color:#333;white-space:nowrap}
.dropdown-menu&gt;li&gt;a:hover,.dropdown-menu&gt;li&gt;a:focus,.dropdown-submenu:hover&gt;a,.dropdown-submenu:focus&gt;a{text-decoration:none;color:#fff;background-color:#0081c2;background-image:-moz-linear-gradient(top, #08c, #0077b3);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#08c), to(#0077b3));background-image:-webkit-linear-gradient(top, #08c, #0077b3);background-image:-o-linear-gradient(top, #08c, #0077b3);background-image:linear-gradient(to bottom, #08c, #0077b3);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0077b3', GradientType=0)}
.dropdown-menu&gt;.active&gt;a,.dropdown-menu&gt;.active&gt;a:hover,.dropdown-menu&gt;.active&gt;a:focus{color:#fff;text-decoration:none;outline:0;background-color:#0081c2;background-image:-moz-linear-gradient(top, #08c, #0077b3);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#08c), to(#0077b3));background-image:-webkit-linear-gradient(top, #08c, #0077b3);background-image:-o-linear-gradient(top, #08c, #0077b3);background-image:linear-gradient(to bottom, #08c, #0077b3);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0077b3', GradientType=0)}
.dropdown-menu&gt;.disabled&gt;a,.dropdown-menu&gt;.disabled&gt;a:hover,.dropdown-menu&gt;.disabled&gt;a:focus{color:#999}
.dropdown-menu&gt;.disabled&gt;a:hover,.dropdown-menu&gt;.disabled&gt;a:focus{text-decoration:none;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);cursor:default}
.open{*z-index:1000}.open&gt;.dropdown-menu{display:block}
.dropdown-backdrop{position:fixed;left:0;right:0;bottom:0;top:0;z-index:990}
.pull-right&gt;.dropdown-menu{right:0;left:auto}
.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-top:0;border-bottom:4px solid #000;content:&quot;&quot;}
.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:1px}
.dropdown-submenu{position:relative}
.dropdown-submenu&gt;.dropdown-menu{top:0;left:100%;margin-top:-6px;margin-left:-1px;border-radius:0 6px 6px 6px;-webkit-border-radius:0 6px 6px 6px;-moz-border-radius:0 6px 6px 6px;border-radius:0 6px 6px 6px}
.dropdown-submenu:hover&gt;.dropdown-menu{display:block}
.dropup .dropdown-submenu&gt;.dropdown-menu{top:auto;bottom:0;margin-top:0;margin-bottom:-2px;border-radius:5px 5px 5px 0;-webkit-border-radius:5px 5px 5px 0;-moz-border-radius:5px 5px 5px 0;border-radius:5px 5px 5px 0}
.dropdown-submenu&gt;a:after{display:block;content:&quot; &quot;;float:right;width:0;height:0;border-color:transparent;border-style:solid;border-width:5px 0 5px 5px;border-left-color:#ccc;margin-top:5px;margin-right:-10px}
.dropdown-submenu:hover&gt;a:after{border-left-color:#fff}
.dropdown-submenu.pull-left{float:none}.dropdown-submenu.pull-left&gt;.dropdown-menu{left:-100%;margin-left:10px;border-radius:6px 0 6px 6px;-webkit-border-radius:6px 0 6px 6px;-moz-border-radius:6px 0 6px 6px;border-radius:6px 0 6px 6px}
.dropdown .dropdown-menu .nav-header{padding-left:20px;padding-right:20px}
.typeahead{z-index:1051;margin-top:2px;border-radius:4px;-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 #e3e3e3;-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;border-radius:6px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}
.well-small{padding:9px;border-radius:3px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}
.fade{opacity:0;-webkit-transition:opacity .15s linear;-moz-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;-o-transition:height .35s ease;transition:height .35s ease}.collapse.in{height:auto}
.close{float:right;font-size:20px;font-weight:bold;line-height:20px;color:#000;text-shadow:0 1px 0 #fff;opacity:.2;filter:alpha(opacity=20)}.close:hover,.close:focus{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;*zoom:1;padding:4px 12px;margin-bottom:0;font-size:13px;line-height:20px;text-align:center;vertical-align:middle;cursor:pointer;color:#333;text-shadow:0 1px 1px rgba(255,255,255,0.75);background-color:#f5f5f5;background-image:-moz-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(to bottom, #fff, #e6e6e6);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe6e6e6', GradientType=0);border-color:#e6e6e6 #e6e6e6 #bfbfbf;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);*background-color:#e6e6e6;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);border:1px solid #ccc;*border:0;border-bottom-color:#b3b3b3;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;*margin-left:.3em;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05)}.btn:hover,.btn:focus,.btn:active,.btn.active,.btn.disabled,.btn[disabled]{color:#333;background-color:#e6e6e6;*background-color:#d9d9d9}
.btn:active,.btn.active{background-color:#ccc \9}
.btn:first-child{*margin-left:0}
.btn:hover,.btn:focus{color:#333;text-decoration:none;background-position:0 -15px;-webkit-transition:background-position .1s linear;-moz-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-image:none;outline:0;-webkit-box-shadow:inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05);-moz-box-shadow:inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05)}
.btn.disabled,.btn[disabled]{cursor:default;background-image:none;opacity:.65;filter:alpha(opacity=65);-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}
.btn-large{padding:11px 19px;font-size:16.25px;border-radius:6px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}
.btn-large [class^=&quot;icon-&quot;],.btn-large [class*=&quot; icon-&quot;]{margin-top:4px}
.btn-small{padding:2px 10px;font-size:11.049999999999999px;border-radius:3px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}
.btn-small [class^=&quot;icon-&quot;],.btn-small [class*=&quot; icon-&quot;]{margin-top:0}
.btn-mini [class^=&quot;icon-&quot;],.btn-mini [class*=&quot; icon-&quot;]{margin-top:-1px}
.btn-mini{padding:0 6px;font-size:9.75px;border-radius:3px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}
.btn-block{display:block;width:100%;padding-left:0;padding-right:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}
.btn-block+.btn-block{margin-top:5px}
input[type=&quot;submit&quot;].btn-block,input[type=&quot;reset&quot;].btn-block,input[type=&quot;button&quot;].btn-block{width:100%}
.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-primary{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#006dcc;background-image:-moz-linear-gradient(top, #08c, #04c);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#08c), to(#04c));background-image:-webkit-linear-gradient(top, #08c, #04c);background-image:-o-linear-gradient(top, #08c, #04c);background-image:linear-gradient(to bottom, #08c, #04c);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0044cc', GradientType=0);border-color:#04c #04c #002a80;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);*background-color:#04c;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false)}.btn-primary:hover,.btn-primary:focus,.btn-primary:active,.btn-primary.active,.btn-primary.disabled,.btn-primary[disabled]{color:#fff;background-color:#04c;*background-color:#003bb3}
.btn-primary:active,.btn-primary.active{background-color:#039 \9}
.btn-warning{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#faa732;background-image:-moz-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(to bottom, #fbb450, #f89406);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffbb450', endColorstr='#fff89406', GradientType=0);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);*background-color:#f89406;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false)}.btn-warning:hover,.btn-warning:focus,.btn-warning:active,.btn-warning.active,.btn-warning.disabled,.btn-warning[disabled]{color:#fff;background-color:#f89406;*background-color:#df8505}
.btn-warning:active,.btn-warning.active{background-color:#c67605 \9}
.btn-danger{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#da4f49;background-image:-moz-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:linear-gradient(to bottom, #ee5f5b, #bd362f);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffee5f5b', endColorstr='#ffbd362f', GradientType=0);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);*background-color:#bd362f;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false)}.btn-danger:hover,.btn-danger:focus,.btn-danger:active,.btn-danger.active,.btn-danger.disabled,.btn-danger[disabled]{color:#fff;background-color:#bd362f;*background-color:#a9302a}
.btn-danger:active,.btn-danger.active{background-color:#942a25 \9}
.btn-success{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#5bb75b;background-image:-moz-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:linear-gradient(to bottom, #62c462, #51a351);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff62c462', endColorstr='#ff51a351', GradientType=0);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);*background-color:#51a351;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false)}.btn-success:hover,.btn-success:focus,.btn-success:active,.btn-success.active,.btn-success.disabled,.btn-success[disabled]{color:#fff;background-color:#51a351;*background-color:#499249}
.btn-success:active,.btn-success.active{background-color:#408140 \9}
.btn-info{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#49afcd;background-image:-moz-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:linear-gradient(to bottom, #5bc0de, #2f96b4);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2f96b4', GradientType=0);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);*background-color:#2f96b4;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false)}.btn-info:hover,.btn-info:focus,.btn-info:active,.btn-info.active,.btn-info.disabled,.btn-info[disabled]{color:#fff;background-color:#2f96b4;*background-color:#2a85a0}
.btn-info:active,.btn-info.active{background-color:#24748c \9}
.btn-inverse{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#363636;background-image:-moz-linear-gradient(top, #444, #222);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#444), to(#222));background-image:-webkit-linear-gradient(top, #444, #222);background-image:-o-linear-gradient(top, #444, #222);background-image:linear-gradient(to bottom, #444, #222);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff444444', endColorstr='#ff222222', GradientType=0);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);*background-color:#222;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false)}.btn-inverse:hover,.btn-inverse:focus,.btn-inverse:active,.btn-inverse.active,.btn-inverse.disabled,.btn-inverse[disabled]{color:#fff;background-color:#222;*background-color:#151515}
.btn-inverse:active,.btn-inverse.active{background-color:#080808 \9}
button.btn,input[type=&quot;submit&quot;].btn{*padding-top:3px;*padding-bottom:3px}button.btn::-moz-focus-inner,input[type=&quot;submit&quot;].btn::-moz-focus-inner{padding:0;border:0}
button.btn.btn-large,input[type=&quot;submit&quot;].btn.btn-large{*padding-top:7px;*padding-bottom:7px}
button.btn.btn-small,input[type=&quot;submit&quot;].btn.btn-small{*padding-top:3px;*padding-bottom:3px}
button.btn.btn-mini,input[type=&quot;submit&quot;].btn.btn-mini{*padding-top:1px;*padding-bottom:1px}
.btn-link,.btn-link:active,.btn-link[disabled]{background-color:transparent;background-image:none;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}
.btn-link{border-color:transparent;cursor:pointer;color:#08c;border-radius:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}
.btn-link:hover,.btn-link:focus{color:#005580;text-decoration:underline;background-color:transparent}
.btn-link[disabled]:hover,.btn-link[disabled]:focus{color:#333;text-decoration:none}
.btn-group{position:relative;display:inline-block;*display:inline;*zoom:1;font-size:0;vertical-align:middle;white-space:nowrap;*margin-left:.3em}.btn-group:first-child{*margin-left:0}
.btn-group+.btn-group{margin-left:5px}
.btn-toolbar{font-size:0;margin-top:10px;margin-bottom:10px}.btn-toolbar&gt;.btn+.btn,.btn-toolbar&gt;.btn-group+.btn,.btn-toolbar&gt;.btn+.btn-group{margin-left:5px}
.btn-group&gt;.btn{position:relative;border-radius:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}
.btn-group&gt;.btn+.btn{margin-left:-1px}
.btn-group&gt;.btn,.btn-group&gt;.dropdown-menu,.btn-group&gt;.popover{font-size:13px}
.btn-group&gt;.btn-mini{font-size:9.75px}
.btn-group&gt;.btn-small{font-size:11.049999999999999px}
.btn-group&gt;.btn-large{font-size:16.25px}
.btn-group&gt;.btn:first-child{margin-left:0;-webkit-border-top-left-radius:4px;-moz-border-radius-topleft:4px;border-top-left-radius:4px;-webkit-border-bottom-left-radius:4px;-moz-border-radius-bottomleft:4px;border-bottom-left-radius:4px}
.btn-group&gt;.btn:last-child,.btn-group&gt;.dropdown-toggle{-webkit-border-top-right-radius:4px;-moz-border-radius-topright:4px;border-top-right-radius:4px;-webkit-border-bottom-right-radius:4px;-moz-border-radius-bottomright:4px;border-bottom-right-radius:4px}
.btn-group&gt;.btn.large:first-child{margin-left:0;-webkit-border-top-left-radius:6px;-moz-border-radius-topleft:6px;border-top-left-radius:6px;-webkit-border-bottom-left-radius:6px;-moz-border-radius-bottomleft:6px;border-bottom-left-radius:6px}
.btn-group&gt;.btn.large:last-child,.btn-group&gt;.large.dropdown-toggle{-webkit-border-top-right-radius:6px;-moz-border-radius-topright:6px;border-top-right-radius:6px;-webkit-border-bottom-right-radius:6px;-moz-border-radius-bottomright:6px;border-bottom-right-radius:6px}
.btn-group&gt;.btn:hover,.btn-group&gt;.btn:focus,.btn-group&gt;.btn:active,.btn-group&gt;.btn.active{z-index:2}
.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}
.btn-group&gt;.btn+.dropdown-toggle{padding-left:8px;padding-right:8px;-webkit-box-shadow:inset 1px 0 0 rgba(255,255,255,.125), inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05);-moz-box-shadow:inset 1px 0 0 rgba(255,255,255,.125), inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05);box-shadow:inset 1px 0 0 rgba(255,255,255,.125), inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05);*padding-top:5px;*padding-bottom:5px}
.btn-group&gt;.btn-mini+.dropdown-toggle{padding-left:5px;padding-right:5px;*padding-top:2px;*padding-bottom:2px}
.btn-group&gt;.btn-small+.dropdown-toggle{*padding-top:5px;*padding-bottom:4px}
.btn-group&gt;.btn-large+.dropdown-toggle{padding-left:12px;padding-right:12px;*padding-top:7px;*padding-bottom:7px}
.btn-group.open .dropdown-toggle{background-image:none;-webkit-box-shadow:inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05);-moz-box-shadow:inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05)}
.btn-group.open .btn.dropdown-toggle{background-color:#e6e6e6}
.btn-group.open .btn-primary.dropdown-toggle{background-color:#04c}
.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:8px;margin-left:0}
.btn-large .caret{margin-top:6px}
.btn-large .caret{border-left-width:5px;border-right-width:5px;border-top-width:5px}
.btn-mini .caret,.btn-small .caret{margin-top:8px}
.dropup .btn-large .caret{border-bottom-width:5px}
.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}
.btn-group-vertical{display:inline-block;*display:inline;*zoom:1}
.btn-group-vertical&gt;.btn{display:block;float:none;max-width:100%;border-radius:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}
.btn-group-vertical&gt;.btn+.btn{margin-left:0;margin-top:-1px}
.btn-group-vertical&gt;.btn:first-child{border-radius:4px 4px 0 0;-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0}
.btn-group-vertical&gt;.btn:last-child{border-radius:0 0 4px 4px;-webkit-border-radius:0 0 4px 4px;-moz-border-radius:0 0 4px 4px;border-radius:0 0 4px 4px}
.btn-group-vertical&gt;.btn-large:first-child{border-radius:6px 6px 0 0;-webkit-border-radius:6px 6px 0 0;-moz-border-radius:6px 6px 0 0;border-radius:6px 6px 0 0}
.btn-group-vertical&gt;.btn-large:last-child{border-radius:0 0 6px 6px;-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px}
.alert{padding:8px 35px 8px 14px;margin-bottom:20px;text-shadow:0 1px 0 rgba(255,255,255,0.5);background-color:#fcf8e3;border:1px solid #fbeed5;border-radius:4px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}
.alert,.alert h4{color:#c09853}
.alert h4{margin:0}
.alert .close{position:relative;top:-2px;right:-21px;line-height:20px}
.alert-success{background-color:#dff0d8;border-color:#d6e9c6;color:#468847}
.alert-success h4{color:#468847}
.alert-danger,.alert-error{background-color:#f2dede;border-color:#eed3d7;color:#b94a48}
.alert-danger h4,.alert-error h4{color:#b94a48}
.alert-info{background-color:#d9edf7;border-color:#bce8f1;color:#3a87ad}
.alert-info h4{color:#3a87ad}
.alert-block{padding-top:14px;padding-bottom:14px}
.alert-block&gt;p,.alert-block&gt;ul{margin-bottom:0}
.alert-block p+p{margin-top:5px}
.nav{margin-left:0;margin-bottom:20px;list-style:none}
.nav&gt;li&gt;a{display:block}
.nav&gt;li&gt;a:hover,.nav&gt;li&gt;a:focus{text-decoration:none;background-color:#eee}
.nav&gt;li&gt;a&gt;img{max-width:none}
.nav&gt;.pull-right{float:right}
.nav-header{display:block;padding:3px 15px;font-size:11px;font-weight:bold;line-height:20px;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-left:15px;padding-right:15px;margin-bottom:0}
.nav-list&gt;li&gt;a,.nav-list .nav-header{margin-left:-15px;margin-right:-15px;text-shadow:0 1px 0 rgba(255,255,255,0.5)}
.nav-list&gt;li&gt;a{padding:3px 15px}
.nav-list&gt;.active&gt;a,.nav-list&gt;.active&gt;a:hover,.nav-list&gt;.active&gt;a:focus{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.2);background-color:#08c}
.nav-list [class^=&quot;icon-&quot;],.nav-list [class*=&quot; icon-&quot;]{margin-right:2px}
.nav-list .divider{*width:100%;height:1px;margin:9px 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:&quot;&quot;;line-height:0}
.nav-tabs:after,.nav-pills:after{clear:both}
.nav-tabs&gt;li,.nav-pills&gt;li{float:left}
.nav-tabs&gt;li&gt;a,.nav-pills&gt;li&gt;a{padding-right:12px;padding-left:12px;margin-right:2px;line-height:14px}
.nav-tabs{border-bottom:1px solid #ddd}
.nav-tabs&gt;li{margin-bottom:-1px}
.nav-tabs&gt;li&gt;a{padding-top:8px;padding-bottom:8px;line-height:20px;border:1px solid transparent;border-radius:4px 4px 0 0;-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0}.nav-tabs&gt;li&gt;a:hover,.nav-tabs&gt;li&gt;a:focus{border-color:#eee #eee #ddd}
.nav-tabs&gt;.active&gt;a,.nav-tabs&gt;.active&gt;a:hover,.nav-tabs&gt;.active&gt;a:focus{color:#555;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent;cursor:default}
.nav-pills&gt;li&gt;a{padding-top:8px;padding-bottom:8px;margin-top:2px;margin-bottom:2px;border-radius:5px;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}
.nav-pills&gt;.active&gt;a,.nav-pills&gt;.active&gt;a:hover,.nav-pills&gt;.active&gt;a:focus{color:#fff;background-color:#08c}
.nav-stacked&gt;li{float:none}
.nav-stacked&gt;li&gt;a{margin-right:0}
.nav-tabs.nav-stacked{border-bottom:0}
.nav-tabs.nav-stacked&gt;li&gt;a{border:1px solid #ddd;border-radius:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}
.nav-tabs.nav-stacked&gt;li:first-child&gt;a{-webkit-border-top-right-radius:4px;-moz-border-radius-topright:4px;border-top-right-radius:4px;-webkit-border-top-left-radius:4px;-moz-border-radius-topleft:4px;border-top-left-radius:4px}
.nav-tabs.nav-stacked&gt;li:last-child&gt;a{-webkit-border-bottom-right-radius:4px;-moz-border-radius-bottomright:4px;border-bottom-right-radius:4px;-webkit-border-bottom-left-radius:4px;-moz-border-radius-bottomleft:4px;border-bottom-left-radius:4px}
.nav-tabs.nav-stacked&gt;li&gt;a:hover,.nav-tabs.nav-stacked&gt;li&gt;a:focus{border-color:#ddd;z-index:2}
.nav-pills.nav-stacked&gt;li&gt;a{margin-bottom:3px}
.nav-pills.nav-stacked&gt;li:last-child&gt;a{margin-bottom:1px}
.nav-tabs .dropdown-menu{border-radius:0 0 6px 6px;-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px}
.nav-pills .dropdown-menu{border-radius:6px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}
.nav .dropdown-toggle .caret{border-top-color:#08c;border-bottom-color:#08c;margin-top:6px}
.nav .dropdown-toggle:hover .caret,.nav .dropdown-toggle:focus .caret{border-top-color:#005580;border-bottom-color:#005580}
.nav-tabs .dropdown-toggle .caret{margin-top:8px}
.nav .active .dropdown-toggle .caret{border-top-color:#fff;border-bottom-color:#fff}
.nav-tabs .active .dropdown-toggle .caret{border-top-color:#555;border-bottom-color:#555}
.nav&gt;.dropdown.active&gt;a:hover,.nav&gt;.dropdown.active&gt;a:focus{cursor:pointer}
.nav-tabs .open .dropdown-toggle,.nav-pills .open .dropdown-toggle,.nav&gt;li.dropdown.open.active&gt;a:hover,.nav&gt;li.dropdown.open.active&gt;a:focus{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,.nav li.dropdown.open a:focus .caret{border-top-color:#fff;border-bottom-color:#fff;opacity:1;filter:alpha(opacity=100)}
.tabs-stacked .open&gt;a:hover,.tabs-stacked .open&gt;a:focus{border-color:#999}
.tabbable{*zoom:1}.tabbable:before,.tabbable:after{display:table;content:&quot;&quot;;line-height:0}
.tabbable:after{clear:both}
.tab-content{overflow:auto}
.tabs-below&gt;.nav-tabs,.tabs-right&gt;.nav-tabs,.tabs-left&gt;.nav-tabs{border-bottom:0}
.tab-content&gt;.tab-pane,.pill-content&gt;.pill-pane{display:none}
.tab-content&gt;.active,.pill-content&gt;.active{display:block}
.tabs-below&gt;.nav-tabs{border-top:1px solid #ddd}
.tabs-below&gt;.nav-tabs&gt;li{margin-top:-1px;margin-bottom:0}
.tabs-below&gt;.nav-tabs&gt;li&gt;a{border-radius:0 0 4px 4px;-webkit-border-radius:0 0 4px 4px;-moz-border-radius:0 0 4px 4px;border-radius:0 0 4px 4px}.tabs-below&gt;.nav-tabs&gt;li&gt;a:hover,.tabs-below&gt;.nav-tabs&gt;li&gt;a:focus{border-bottom-color:transparent;border-top-color:#ddd}
.tabs-below&gt;.nav-tabs&gt;.active&gt;a,.tabs-below&gt;.nav-tabs&gt;.active&gt;a:hover,.tabs-below&gt;.nav-tabs&gt;.active&gt;a:focus{border-color:transparent #ddd #ddd #ddd}
.tabs-left&gt;.nav-tabs&gt;li,.tabs-right&gt;.nav-tabs&gt;li{float:none}
.tabs-left&gt;.nav-tabs&gt;li&gt;a,.tabs-right&gt;.nav-tabs&gt;li&gt;a{min-width:74px;margin-right:0;margin-bottom:3px}
.tabs-left&gt;.nav-tabs{float:left;margin-right:19px;border-right:1px solid #ddd}
.tabs-left&gt;.nav-tabs&gt;li&gt;a{margin-right:-1px;border-radius:4px 0 0 4px;-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}
.tabs-left&gt;.nav-tabs&gt;li&gt;a:hover,.tabs-left&gt;.nav-tabs&gt;li&gt;a:focus{border-color:#eee #ddd #eee #eee}
.tabs-left&gt;.nav-tabs .active&gt;a,.tabs-left&gt;.nav-tabs .active&gt;a:hover,.tabs-left&gt;.nav-tabs .active&gt;a:focus{border-color:#ddd transparent #ddd #ddd;*border-right-color:#fff}
.tabs-right&gt;.nav-tabs{float:right;margin-left:19px;border-left:1px solid #ddd}
.tabs-right&gt;.nav-tabs&gt;li&gt;a{margin-left:-1px;border-radius:0 4px 4px 0;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}
.tabs-right&gt;.nav-tabs&gt;li&gt;a:hover,.tabs-right&gt;.nav-tabs&gt;li&gt;a:focus{border-color:#eee #eee #eee #ddd}
.tabs-right&gt;.nav-tabs .active&gt;a,.tabs-right&gt;.nav-tabs .active&gt;a:hover,.tabs-right&gt;.nav-tabs .active&gt;a:focus{border-color:#ddd #ddd #ddd transparent;*border-left-color:#fff}
.nav&gt;.disabled&gt;a{color:#999}
.nav&gt;.disabled&gt;a:hover,.nav&gt;.disabled&gt;a:focus{text-decoration:none;background-color:transparent;cursor:default}
.navbar{overflow:visible;margin-bottom:20px;*position:relative;*z-index:2}
.navbar-inner{min-height:36px;padding-left:20px;padding-right:20px;background-color:#fafafa;background-image:-moz-linear-gradient(top, #fff, #f2f2f2);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#fff), to(#f2f2f2));background-image:-webkit-linear-gradient(top, #fff, #f2f2f2);background-image:-o-linear-gradient(top, #fff, #f2f2f2);background-image:linear-gradient(to bottom, #fff, #f2f2f2);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff2f2f2', GradientType=0);border:1px solid #d4d4d4;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:0 1px 4px rgba(0,0,0,0.065);-moz-box-shadow:0 1px 4px rgba(0,0,0,0.065);box-shadow:0 1px 4px rgba(0,0,0,0.065);*zoom:1}.navbar-inner:before,.navbar-inner:after{display:table;content:&quot;&quot;;line-height:0}
.navbar-inner:after{clear:both}
.navbar .container{width:auto}
.nav-collapse.collapse{height:auto;overflow:visible}
.navbar .brand{float:left;display:block;padding:8px 20px 8px;margin-left:-20px;font-size:20px;font-weight:200;color:#777;text-shadow:0 1px 0 #fff}.navbar .brand:hover,.navbar .brand:focus{text-decoration:none}
.navbar-text{margin-bottom:0;line-height:36px;color:#777}
.navbar-link{color:#777}.navbar-link:hover,.navbar-link:focus{color:#333}
.navbar .divider-vertical{height:36px;margin:0 9px;border-left:1px solid #f2f2f2;border-right:1px solid #fff}
.navbar .btn,.navbar .btn-group{margin-top:3px}
.navbar .btn-group .btn,.navbar .input-prepend .btn,.navbar .input-append .btn,.navbar .input-prepend .btn-group,.navbar .input-append .btn-group{margin-top:0}
.navbar-form{margin-bottom:0;*zoom:1}.navbar-form:before,.navbar-form:after{display:table;content:&quot;&quot;;line-height:0}
.navbar-form:after{clear:both}
.navbar-form input,.navbar-form select,.navbar-form .radio,.navbar-form .checkbox{margin-top:3px}
.navbar-form input,.navbar-form select,.navbar-form .btn{display:inline-block;margin-bottom:0}
.navbar-form input[type=&quot;image&quot;],.navbar-form input[type=&quot;checkbox&quot;],.navbar-form input[type=&quot;radio&quot;]{margin-top:3px}
.navbar-form .input-append,.navbar-form .input-prepend{margin-top:5px;white-space:nowrap}.navbar-form .input-append input,.navbar-form .input-prepend input{margin-top:0}
.navbar-search{position:relative;float:left;margin-top:3px;margin-bottom:0}.navbar-search .search-query{margin-bottom:0;padding:4px 14px;font-family:&quot;Helvetica Neue&quot;,Helvetica,Arial,sans-serif;font-size:13px;font-weight:normal;line-height:1;border-radius:15px;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px}
.navbar-static-top{position:static;margin-bottom:0}.navbar-static-top .navbar-inner{border-radius:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}
.navbar-fixed-top,.navbar-fixed-bottom{position:fixed;right:0;left:0;z-index:1030;margin-bottom:0}
.navbar-fixed-top .navbar-inner,.navbar-static-top .navbar-inner{border-width:0 0 1px}
.navbar-fixed-bottom .navbar-inner{border-width:1px 0 0}
.navbar-fixed-top .navbar-inner,.navbar-fixed-bottom .navbar-inner{padding-left:0;padding-right:0;border-radius:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}
.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:940px}
.navbar-fixed-top{top:0}
.navbar-fixed-top .navbar-inner,.navbar-static-top .navbar-inner{-webkit-box-shadow:0 1px 10px rgba(0,0,0,.1);-moz-box-shadow:0 1px 10px rgba(0,0,0,.1);box-shadow:0 1px 10px rgba(0,0,0,.1)}
.navbar-fixed-bottom{bottom:0}.navbar-fixed-bottom .navbar-inner{-webkit-box-shadow:0 -1px 10px rgba(0,0,0,.1);-moz-box-shadow:0 -1px 10px rgba(0,0,0,.1);box-shadow:0 -1px 10px rgba(0,0,0,.1)}
.navbar .nav{position:relative;left:0;display:block;float:left;margin:0 10px 0 0}
.navbar .nav.pull-right{float:right;margin-right:0}
.navbar .nav&gt;li{float:left}
.navbar .nav&gt;li&gt;a{float:none;padding:8px 15px 8px;color:#777;text-decoration:none;text-shadow:0 1px 0 #fff}
.navbar .nav .dropdown-toggle .caret{margin-top:8px}
.navbar .nav&gt;li&gt;a:focus,.navbar .nav&gt;li&gt;a:hover{background-color:transparent;color:#333;text-decoration:none}
.navbar .nav&gt;.active&gt;a,.navbar .nav&gt;.active&gt;a:hover,.navbar .nav&gt;.active&gt;a:focus{color:#555;text-decoration:none;background-color:#e5e5e5;-webkit-box-shadow:inset 0 3px 8px rgba(0,0,0,0.125);-moz-box-shadow:inset 0 3px 8px rgba(0,0,0,0.125);box-shadow:inset 0 3px 8px rgba(0,0,0,0.125)}
.navbar .btn-navbar{display:none;float:right;padding:7px 10px;margin-left:5px;margin-right:5px;color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#ededed;background-image:-moz-linear-gradient(top, #f2f2f2, #e5e5e5);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#f2f2f2), to(#e5e5e5));background-image:-webkit-linear-gradient(top, #f2f2f2, #e5e5e5);background-image:-o-linear-gradient(top, #f2f2f2, #e5e5e5);background-image:linear-gradient(to bottom, #f2f2f2, #e5e5e5);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2f2f2', endColorstr='#ffe5e5e5', GradientType=0);border-color:#e5e5e5 #e5e5e5 #bfbfbf;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);*background-color:#e5e5e5;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.075);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.075);box-shadow:inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.075)}.navbar .btn-navbar:hover,.navbar .btn-navbar:focus,.navbar .btn-navbar:active,.navbar .btn-navbar.active,.navbar .btn-navbar.disabled,.navbar .btn-navbar[disabled]{color:#fff;background-color:#e5e5e5;*background-color:#d9d9d9}
.navbar .btn-navbar:active,.navbar .btn-navbar.active{background-color:#ccc \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 .nav&gt;li&gt;.dropdown-menu:before{content:'';display:inline-block;border-left:7px solid transparent;border-right:7px solid transparent;border-bottom:7px solid #ccc;border-bottom-color:rgba(0,0,0,0.2);position:absolute;top:-7px;left:9px}
.navbar .nav&gt;li&gt;.dropdown-menu:after{content:'';display:inline-block;border-left:6px solid transparent;border-right:6px solid transparent;border-bottom:6px solid #fff;position:absolute;top:-6px;left:10px}
.navbar-fixed-bottom .nav&gt;li&gt;.dropdown-menu:before{border-top:7px solid #ccc;border-top-color:rgba(0,0,0,0.2);border-bottom:0;bottom:-7px;top:auto}
.navbar-fixed-bottom .nav&gt;li&gt;.dropdown-menu:after{border-top:6px solid #fff;border-bottom:0;bottom:-6px;top:auto}
.navbar .nav li.dropdown&gt;a:hover .caret,.navbar .nav li.dropdown&gt;a:focus .caret{border-top-color:#333;border-bottom-color:#333}
.navbar .nav li.dropdown.open&gt;.dropdown-toggle,.navbar .nav li.dropdown.active&gt;.dropdown-toggle,.navbar .nav li.dropdown.open.active&gt;.dropdown-toggle{background-color:#e5e5e5;color:#555}
.navbar .nav li.dropdown&gt;.dropdown-toggle .caret{border-top-color:#777;border-bottom-color:#777}
.navbar .nav li.dropdown.open&gt;.dropdown-toggle .caret,.navbar .nav li.dropdown.active&gt;.dropdown-toggle .caret,.navbar .nav li.dropdown.open.active&gt;.dropdown-toggle .caret{border-top-color:#555;border-bottom-color:#555}
.navbar .pull-right&gt;li&gt;.dropdown-menu,.navbar .nav&gt;li&gt;.dropdown-menu.pull-right{left:auto;right:0}.navbar .pull-right&gt;li&gt;.dropdown-menu:before,.navbar .nav&gt;li&gt;.dropdown-menu.pull-right:before{left:auto;right:12px}
.navbar .pull-right&gt;li&gt;.dropdown-menu:after,.navbar .nav&gt;li&gt;.dropdown-menu.pull-right:after{left:auto;right:13px}
.navbar .pull-right&gt;li&gt;.dropdown-menu .dropdown-menu,.navbar .nav&gt;li&gt;.dropdown-menu.pull-right .dropdown-menu{left:auto;right:100%;margin-left:0;margin-right:-1px;border-radius:6px 0 6px 6px;-webkit-border-radius:6px 0 6px 6px;-moz-border-radius:6px 0 6px 6px;border-radius:6px 0 6px 6px}
.navbar-inverse .navbar-inner{background-color:#1b1b1b;background-image:-moz-linear-gradient(top, #222, #111);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#222), to(#111));background-image:-webkit-linear-gradient(top, #222, #111);background-image:-o-linear-gradient(top, #222, #111);background-image:linear-gradient(to bottom, #222, #111);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff222222', endColorstr='#ff111111', GradientType=0);border-color:#252525}
.navbar-inverse .brand,.navbar-inverse .nav&gt;li&gt;a{color:#999;text-shadow:0 -1px 0 rgba(0,0,0,0.25)}.navbar-inverse .brand:hover,.navbar-inverse .nav&gt;li&gt;a:hover,.navbar-inverse .brand:focus,.navbar-inverse .nav&gt;li&gt;a:focus{color:#fff}
.navbar-inverse .brand{color:#999}
.navbar-inverse .navbar-text{color:#999}
.navbar-inverse .nav&gt;li&gt;a:focus,.navbar-inverse .nav&gt;li&gt;a:hover{background-color:transparent;color:#fff}
.navbar-inverse .nav .active&gt;a,.navbar-inverse .nav .active&gt;a:hover,.navbar-inverse .nav .active&gt;a:focus{color:#fff;background-color:#111}
.navbar-inverse .navbar-link{color:#999}.navbar-inverse .navbar-link:hover,.navbar-inverse .navbar-link:focus{color:#fff}
.navbar-inverse .divider-vertical{border-left-color:#111;border-right-color:#222}
.navbar-inverse .nav li.dropdown.open&gt;.dropdown-toggle,.navbar-inverse .nav li.dropdown.active&gt;.dropdown-toggle,.navbar-inverse .nav li.dropdown.open.active&gt;.dropdown-toggle{background-color:#111;color:#fff}
.navbar-inverse .nav li.dropdown&gt;a:hover .caret,.navbar-inverse .nav li.dropdown&gt;a:focus .caret{border-top-color:#fff;border-bottom-color:#fff}
.navbar-inverse .nav li.dropdown&gt;.dropdown-toggle .caret{border-top-color:#999;border-bottom-color:#999}
.navbar-inverse .nav li.dropdown.open&gt;.dropdown-toggle .caret,.navbar-inverse .nav li.dropdown.active&gt;.dropdown-toggle .caret,.navbar-inverse .nav li.dropdown.open.active&gt;.dropdown-toggle .caret{border-top-color:#fff;border-bottom-color:#fff}
.navbar-inverse .navbar-search .search-query{color:#fff;background-color:#515151;border-color:#111;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1), 0 1px 0 rgba(255,255,255,.15);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,.1), 0 1px 0 rgba(255,255,255,.15);box-shadow:inset 0 1px 2px rgba(0,0,0,.1), 0 1px 0 rgba(255,255,255,.15);-webkit-transition:none;-moz-transition:none;-o-transition:none;transition:none}.navbar-inverse .navbar-search .search-query:-moz-placeholder{color:#ccc}
.navbar-inverse .navbar-search .search-query:-ms-input-placeholder{color:#ccc}
.navbar-inverse .navbar-search .search-query::-webkit-input-placeholder{color:#ccc}
.navbar-inverse .navbar-search .search-query:focus,.navbar-inverse .navbar-search .search-query.focused{padding:5px 15px;color:#333;text-shadow:0 1px 0 #fff;background-color:#fff;border: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);outline:0}
.navbar-inverse .btn-navbar{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#0e0e0e;background-image:-moz-linear-gradient(top, #151515, #040404);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#151515), to(#040404));background-image:-webkit-linear-gradient(top, #151515, #040404);background-image:-o-linear-gradient(top, #151515, #040404);background-image:linear-gradient(to bottom, #151515, #040404);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff151515', endColorstr='#ff040404', GradientType=0);border-color:#040404 #040404 #000;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);*background-color:#040404;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false)}.navbar-inverse .btn-navbar:hover,.navbar-inverse .btn-navbar:focus,.navbar-inverse .btn-navbar:active,.navbar-inverse .btn-navbar.active,.navbar-inverse .btn-navbar.disabled,.navbar-inverse .btn-navbar[disabled]{color:#fff;background-color:#040404;*background-color:#000}
.navbar-inverse .btn-navbar:active,.navbar-inverse .btn-navbar.active{background-color:#000 \9}
.breadcrumb{padding:8px 15px;margin:0 0 20px;list-style:none;background-color:#f5f5f5;border-radius:4px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.breadcrumb&gt;li{display:inline-block;*display:inline;*zoom:1;text-shadow:0 1px 0 #fff}.breadcrumb&gt;li&gt;.divider{padding:0 5px;color:#ccc}
.breadcrumb&gt;.active{color:#999}
.pagination{margin:20px 0}
.pagination ul{display:inline-block;*display:inline;*zoom:1;margin-left:0;margin-bottom:0;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-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 ul&gt;li{display:inline}
.pagination ul&gt;li&gt;a,.pagination ul&gt;li&gt;span{float:left;padding:4px 12px;line-height:20px;text-decoration:none;background-color:#fff;border:1px solid #ddd;border-left-width:0}
.pagination ul&gt;li&gt;a:hover,.pagination ul&gt;li&gt;a:focus,.pagination ul&gt;.active&gt;a,.pagination ul&gt;.active&gt;span{background-color:#f5f5f5}
.pagination ul&gt;.active&gt;a,.pagination ul&gt;.active&gt;span{color:#999;cursor:default}
.pagination ul&gt;.disabled&gt;span,.pagination ul&gt;.disabled&gt;a,.pagination ul&gt;.disabled&gt;a:hover,.pagination ul&gt;.disabled&gt;a:focus{color:#999;background-color:transparent;cursor:default}
.pagination ul&gt;li:first-child&gt;a,.pagination ul&gt;li:first-child&gt;span{border-left-width:1px;-webkit-border-top-left-radius:4px;-moz-border-radius-topleft:4px;border-top-left-radius:4px;-webkit-border-bottom-left-radius:4px;-moz-border-radius-bottomleft:4px;border-bottom-left-radius:4px}
.pagination ul&gt;li:last-child&gt;a,.pagination ul&gt;li:last-child&gt;span{-webkit-border-top-right-radius:4px;-moz-border-radius-topright:4px;border-top-right-radius:4px;-webkit-border-bottom-right-radius:4px;-moz-border-radius-bottomright:4px;border-bottom-right-radius:4px}
.pagination-centered{text-align:center}
.pagination-right{text-align:right}
.pagination-large ul&gt;li&gt;a,.pagination-large ul&gt;li&gt;span{padding:11px 19px;font-size:16.25px}
.pagination-large ul&gt;li:first-child&gt;a,.pagination-large ul&gt;li:first-child&gt;span{-webkit-border-top-left-radius:6px;-moz-border-radius-topleft:6px;border-top-left-radius:6px;-webkit-border-bottom-left-radius:6px;-moz-border-radius-bottomleft:6px;border-bottom-left-radius:6px}
.pagination-large ul&gt;li:last-child&gt;a,.pagination-large ul&gt;li:last-child&gt;span{-webkit-border-top-right-radius:6px;-moz-border-radius-topright:6px;border-top-right-radius:6px;-webkit-border-bottom-right-radius:6px;-moz-border-radius-bottomright:6px;border-bottom-right-radius:6px}
.pagination-mini ul&gt;li:first-child&gt;a,.pagination-small ul&gt;li:first-child&gt;a,.pagination-mini ul&gt;li:first-child&gt;span,.pagination-small ul&gt;li:first-child&gt;span{-webkit-border-top-left-radius:3px;-moz-border-radius-topleft:3px;border-top-left-radius:3px;-webkit-border-bottom-left-radius:3px;-moz-border-radius-bottomleft:3px;border-bottom-left-radius:3px}
.pagination-mini ul&gt;li:last-child&gt;a,.pagination-small ul&gt;li:last-child&gt;a,.pagination-mini ul&gt;li:last-child&gt;span,.pagination-small ul&gt;li:last-child&gt;span{-webkit-border-top-right-radius:3px;-moz-border-radius-topright:3px;border-top-right-radius:3px;-webkit-border-bottom-right-radius:3px;-moz-border-radius-bottomright:3px;border-bottom-right-radius:3px}
.pagination-small ul&gt;li&gt;a,.pagination-small ul&gt;li&gt;span{padding:2px 10px;font-size:11.049999999999999px}
.pagination-mini ul&gt;li&gt;a,.pagination-mini ul&gt;li&gt;span{padding:0 6px;font-size:9.75px}
.pager{margin:20px 0;list-style:none;text-align:center;*zoom:1}.pager:before,.pager:after{display:table;content:&quot;&quot;;line-height:0}
.pager:after{clear:both}
.pager li{display:inline}
.pager li&gt;a,.pager li&gt;span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px}
.pager li&gt;a:hover,.pager li&gt;a:focus{text-decoration:none;background-color:#f5f5f5}
.pager .next&gt;a,.pager .next&gt;span{float:right}
.pager .previous&gt;a,.pager .previous&gt;span{float:left}
.pager .disabled&gt;a,.pager .disabled&gt;a:hover,.pager .disabled&gt;a:focus,.pager .disabled&gt;span{color:#999;background-color:#fff;cursor:default}
.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:10%;left:50%;z-index:1050;width:560px;margin-left:-280px;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;outline:none}.modal.fade{-webkit-transition:opacity .3s linear, top .3s ease-out;-moz-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;top:-25%}
.modal.fade.in{top:10%}
.modal-header{padding:9px 15px;border-bottom:1px solid #eee}.modal-header .close{margin-top:2px}
.modal-header h3{margin:0;line-height:30px}
.modal-body{position:relative;overflow-y:auto;max-height:400px;padding:15px}
.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;-webkit-box-shadow:inset 0 1px 0 #fff;-moz-box-shadow:inset 0 1px 0 #fff;box-shadow:inset 0 1px 0 #fff;*zoom:1}.modal-footer:before,.modal-footer:after{display:table;content:&quot;&quot;;line-height:0}
.modal-footer:after{clear:both}
.modal-footer .btn+.btn{margin-left:5px;margin-bottom:0}
.modal-footer .btn-group .btn+.btn{margin-left:-1px}
.modal-footer .btn-block+.btn-block{margin-left:0}
.tooltip{position:absolute;z-index:1030;display:block;visibility:visible;font-size:11px;line-height:1.4;opacity:0;filter:alpha(opacity=0)}.tooltip.in{opacity:.8;filter:alpha(opacity=80)}
.tooltip.top{margin-top:-3px;padding:5px 0}
.tooltip.right{margin-left:3px;padding:0 5px}
.tooltip.bottom{margin-top:3px;padding:5px 0}
.tooltip.left{margin-left:-3px;padding:0 5px}
.tooltip-inner{max-width:200px;padding:8px;color:#fff;text-align:center;text-decoration:none;background-color:#000;border-radius:4px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}
.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}
.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#000}
.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#000}
.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#000}
.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#000}
.popover{position:absolute;top:0;left:0;z-index:1010;display:none;max-width:276px;padding:1px;text-align:left;background-color:#fff;-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-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);white-space:normal}.popover.top{margin-top:-10px}
.popover.right{margin-left:10px}
.popover.bottom{margin-top:10px}
.popover.left{margin-left:-10px}
.popover-title{margin:0;padding:8px 14px;font-size:14px;font-weight:normal;line-height:18px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0;-webkit-border-radius:5px 5px 0 0;-moz-border-radius:5px 5px 0 0;border-radius:5px 5px 0 0}.popover-title:empty{display:none}
.popover-content{padding:9px 14px}
.popover .arrow,.popover .arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}
.popover .arrow{border-width:11px}
.popover .arrow:after{border-width:10px;content:&quot;&quot;}
.popover.top .arrow{left:50%;margin-left:-11px;border-bottom-width:0;border-top-color:#999;border-top-color:rgba(0,0,0,0.25);bottom:-11px}.popover.top .arrow:after{bottom:1px;margin-left:-10px;border-bottom-width:0;border-top-color:#fff}
.popover.right .arrow{top:50%;left:-11px;margin-top:-11px;border-left-width:0;border-right-color:#999;border-right-color:rgba(0,0,0,0.25)}.popover.right .arrow:after{left:1px;bottom:-10px;border-left-width:0;border-right-color:#fff}
.popover.bottom .arrow{left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,0.25);top:-11px}.popover.bottom .arrow:after{top:1px;margin-left:-10px;border-top-width:0;border-bottom-color:#fff}
.popover.left .arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,0.25)}.popover.left .arrow:after{right:1px;border-right-width:0;border-left-color:#fff;bottom:-10px}
.thumbnails{margin-left:-20px;list-style:none;*zoom:1}.thumbnails:before,.thumbnails:after{display:table;content:&quot;&quot;;line-height:0}
.thumbnails:after{clear:both}
.row-fluid .thumbnails{margin-left:0}
.thumbnails&gt;li{float:left;margin-bottom:20px;margin-left:20px}
.thumbnail{display:block;padding:4px;line-height:20px;border:1px solid #ddd;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:0 1px 3px rgba(0,0,0,0.055);-moz-box-shadow:0 1px 3px rgba(0,0,0,0.055);box-shadow:0 1px 3px rgba(0,0,0,0.055);-webkit-transition:all .2s ease-in-out;-moz-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}
a.thumbnail:hover,a.thumbnail:focus{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&gt;img{display:block;max-width:100%;margin-left:auto;margin-right:auto}
.thumbnail .caption{padding:9px;color:#555}
.media,.media-body{overflow:hidden;*overflow:visible;zoom:1}
.media,.media .media{margin-top:15px}
.media:first-child{margin-top:0}
.media-object{display:block}
.media-heading{margin:0 0 5px}
.media&gt;.pull-left{margin-right:10px}
.media&gt;.pull-right{margin-left:10px}
.media-list{margin-left:0;list-style:none}
.label,.badge{display:inline-block;padding:2px 4px;font-size:10.998px;font-weight:bold;line-height:14px;color:#fff;vertical-align:baseline;white-space:nowrap;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#999}
.label{border-radius:3px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}
.badge{padding-left:9px;padding-right:9px;border-radius:9px;-webkit-border-radius:9px;-moz-border-radius:9px;border-radius:9px}
.label:empty,.badge:empty{display:none}
a.label:hover,a.label:focus,a.badge:hover,a.badge:focus{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}
.btn .label,.btn .badge{position:relative;top:-1px}
.btn-mini .label,.btn-mini .badge{top:0}
@-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{overflow:hidden;height:20px;margin-bottom:20px;background-color:#f7f7f7;background-image:-moz-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(to bottom, #f5f5f5, #f9f9f9);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#fff9f9f9', 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);border-radius:4px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}
.progress .bar{width:0;height:100%;color:#fff;float:left;font-size:12px;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(to bottom, #149bdf, #0480be);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff149bdf', endColorstr='#ff0480be', 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;box-sizing:border-box;-webkit-transition:width .6s ease;-moz-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}
.progress .bar+.bar{-webkit-box-shadow:inset 1px 0 0 rgba(0,0,0,.15), inset 0 -1px 0 rgba(0,0,0,.15);-moz-box-shadow:inset 1px 0 0 rgba(0,0,0,.15), inset 0 -1px 0 rgba(0,0,0,.15);box-shadow:inset 1px 0 0 rgba(0,0,0,.15), inset 0 -1px 0 rgba(0,0,0,.15)}
.progress-striped .bar{background-color:#149bdf;background-image:-webkit-gradient(linear, 0 100%, 100% 0, color-stop(.25, rgba(255,255,255,0.15)), color-stop(.25, transparent), color-stop(.5, transparent), color-stop(.5, rgba(255,255,255,0.15)), color-stop(.75, rgba(255,255,255,0.15)), color-stop(.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:-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);-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,.progress .bar-danger{background-color:#dd514c;background-image:-moz-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(to bottom, #ee5f5b, #c43c35);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffee5f5b', endColorstr='#ffc43c35', GradientType=0)}
.progress-danger.progress-striped .bar,.progress-striped .bar-danger{background-color:#ee5f5b;background-image:-webkit-gradient(linear, 0 100%, 100% 0, color-stop(.25, rgba(255,255,255,0.15)), color-stop(.25, transparent), color-stop(.5, transparent), color-stop(.5, rgba(255,255,255,0.15)), color-stop(.75, rgba(255,255,255,0.15)), color-stop(.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:-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,.progress .bar-success{background-color:#5eb95e;background-image:-moz-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(to bottom, #62c462, #57a957);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff62c462', endColorstr='#ff57a957', GradientType=0)}
.progress-success.progress-striped .bar,.progress-striped .bar-success{background-color:#62c462;background-image:-webkit-gradient(linear, 0 100%, 100% 0, color-stop(.25, rgba(255,255,255,0.15)), color-stop(.25, transparent), color-stop(.5, transparent), color-stop(.5, rgba(255,255,255,0.15)), color-stop(.75, rgba(255,255,255,0.15)), color-stop(.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:-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,.progress .bar-info{background-color:#4bb1cf;background-image:-moz-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(to bottom, #5bc0de, #339bb9);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff339bb9', GradientType=0)}
.progress-info.progress-striped .bar,.progress-striped .bar-info{background-color:#5bc0de;background-image:-webkit-gradient(linear, 0 100%, 100% 0, color-stop(.25, rgba(255,255,255,0.15)), color-stop(.25, transparent), color-stop(.5, transparent), color-stop(.5, rgba(255,255,255,0.15)), color-stop(.75, rgba(255,255,255,0.15)), color-stop(.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:-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,.progress .bar-warning{background-color:#faa732;background-image:-moz-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(to bottom, #fbb450, #f89406);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffbb450', endColorstr='#fff89406', GradientType=0)}
.progress-warning.progress-striped .bar,.progress-striped .bar-warning{background-color:#fbb450;background-image:-webkit-gradient(linear, 0 100%, 100% 0, color-stop(.25, rgba(255,255,255,0.15)), color-stop(.25, transparent), color-stop(.5, transparent), color-stop(.5, rgba(255,255,255,0.15)), color-stop(.75, rgba(255,255,255,0.15)), color-stop(.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:-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:20px}
.accordion-group{margin-bottom:2px;border:1px solid #e5e5e5;border-radius:4px;-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:20px;line-height:1}
.carousel-inner{overflow:hidden;width:100%;position:relative}
.carousel-inner&gt;.item{display:none;position:relative;-webkit-transition:.6s ease-in-out left;-moz-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner&gt;.item&gt;img,.carousel-inner&gt;.item&gt;a&gt;img{display:block;line-height:1}
.carousel-inner&gt;.active,.carousel-inner&gt;.next,.carousel-inner&gt;.prev{display:block}
.carousel-inner&gt;.active{left:0}
.carousel-inner&gt;.next,.carousel-inner&gt;.prev{position:absolute;top:0;width:100%}
.carousel-inner&gt;.next{left:100%}
.carousel-inner&gt;.prev{left:-100%}
.carousel-inner&gt;.next.left,.carousel-inner&gt;.prev.right{left:0}
.carousel-inner&gt;.active.left{left:-100%}
.carousel-inner&gt;.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{left:auto;right:15px}
.carousel-control:hover,.carousel-control:focus{color:#fff;text-decoration:none;opacity:.9;filter:alpha(opacity=90)}
.carousel-indicators{position:absolute;top:15px;right:15px;z-index:5;margin:0;list-style:none}.carousel-indicators li{display:block;float:left;width:10px;height:10px;margin-left:5px;text-indent:-999px;background-color:#ccc;background-color:rgba(255,255,255,0.25);border-radius:5px}
.carousel-indicators .active{background-color:#fff}
.carousel-caption{position:absolute;left:0;right:0;bottom:0;padding:15px;background:#333;background:rgba(0,0,0,0.75)}
.carousel-caption h4,.carousel-caption p{color:#fff;line-height:20px}
.carousel-caption h4{margin:0 0 5px}
.carousel-caption p{margin-bottom:0}
.hero-unit{padding:60px;margin-bottom:30px;font-size:18px;font-weight:200;line-height:30px;color:inherit;background-color:#eee;border-radius:6px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.hero-unit h1{margin-bottom:0;font-size:60px;line-height:1;color:inherit;letter-spacing:-1px}
.hero-unit li{line-height:30px}
.pull-right{float:right}
.pull-left{float:left}
.hide{display:none}
.show{display:block}
.invisible{visibility:hidden}
.affix{position:fixed}
@-ms-viewport{width:device-width}.hidden{display:none;visibility:hidden}
.visible-phone{display:none !important}
.visible-tablet{display:none !important}
.hidden-desktop{display:none !important}
.visible-desktop{display:inherit !important}
@media (min-width:768px) and (max-width:979px){.hidden-desktop{display:inherit !important} .visible-desktop{display:none !important} .visible-tablet{display:inherit !important} .hidden-tablet{display:none !important}}@media (max-width:767px){.hidden-desktop{display:inherit !important} .visible-desktop{display:none !important} .visible-phone{display:inherit !important} .hidden-phone{display:none !important}}.visible-print{display:none !important}
@media print{.visible-print{display:inherit !important} .hidden-print{display:none !important}}@media (min-width:1200px){.row{margin-left:-30px;*zoom:1}.row:before,.row:after{display:table;content:&quot;&quot;;line-height:0} .row:after{clear:both} [class*=&quot;span&quot;]{float:left;min-height:1px;margin-left:30px} .container,.navbar-static-top .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:&quot;&quot;;line-height:0} .row-fluid:after{clear:both} .row-fluid [class*=&quot;span&quot;]{display:block;width:100%;min-height:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;float:left;margin-left:2.564102564102564%;*margin-left:2.5109110747408616%} .row-fluid [class*=&quot;span&quot;]:first-child{margin-left:0} .row-fluid .controls-row [class*=&quot;span&quot;]+[class*=&quot;span&quot;]{margin-left:2.564102564102564%} .row-fluid .span12{width:100%;*width:99.94680851063829%} .row-fluid .span11{width:91.45299145299145%;*width:91.39979996362975%} .row-fluid .span10{width:82.90598290598291%;*width:82.8527914166212%} .row-fluid .span9{width:74.35897435897436%;*width:74.30578286961266%} .row-fluid .span8{width:65.81196581196582%;*width:65.75877432260411%} .row-fluid .span7{width:57.26495726495726%;*width:57.21176577559556%} .row-fluid .span6{width:48.717948717948715%;*width:48.664757228587014%} .row-fluid .span5{width:40.17094017094017%;*width:40.11774868157847%} .row-fluid .span4{width:31.623931623931625%;*width:31.570740134569924%} .row-fluid .span3{width:23.076923076923077%;*width:23.023731587561375%} .row-fluid .span2{width:14.52991452991453%;*width:14.476723040552828%} .row-fluid .span1{width:5.982905982905983%;*width:5.929714493544281%} .row-fluid .offset12{margin-left:105.12820512820512%;*margin-left:105.02182214948171%} .row-fluid .offset12:first-child{margin-left:102.56410256410257%;*margin-left:102.45771958537915%} .row-fluid .offset11{margin-left:96.58119658119658%;*margin-left:96.47481360247316%} .row-fluid .offset11:first-child{margin-left:94.01709401709402%;*margin-left:93.91071103837061%} .row-fluid .offset10{margin-left:88.03418803418803%;*margin-left:87.92780505546462%} .row-fluid .offset10:first-child{margin-left:85.47008547008548%;*margin-left:85.36370249136206%} .row-fluid .offset9{margin-left:79.48717948717949%;*margin-left:79.38079650845607%} .row-fluid .offset9:first-child{margin-left:76.92307692307693%;*margin-left:76.81669394435352%} .row-fluid .offset8{margin-left:70.94017094017094%;*margin-left:70.83378796144753%} .row-fluid .offset8:first-child{margin-left:68.37606837606839%;*margin-left:68.26968539734497%} .row-fluid .offset7{margin-left:62.393162393162385%;*margin-left:62.28677941443899%} .row-fluid .offset7:first-child{margin-left:59.82905982905982%;*margin-left:59.72267685033642%} .row-fluid .offset6{margin-left:53.84615384615384%;*margin-left:53.739770867430444%} .row-fluid .offset6:first-child{margin-left:51.28205128205128%;*margin-left:51.175668303327875%} .row-fluid .offset5{margin-left:45.299145299145295%;*margin-left:45.1927623204219%} .row-fluid .offset5:first-child{margin-left:42.73504273504273%;*margin-left:42.62865975631933%} .row-fluid .offset4{margin-left:36.75213675213675%;*margin-left:36.645753773413354%} .row-fluid .offset4:first-child{margin-left:34.18803418803419%;*margin-left:34.081651209310785%} .row-fluid .offset3{margin-left:28.205128205128204%;*margin-left:28.0987452264048%} .row-fluid .offset3:first-child{margin-left:25.641025641025642%;*margin-left:25.53464266230224%} .row-fluid .offset2{margin-left:19.65811965811966%;*margin-left:19.551736679396257%} .row-fluid .offset2:first-child{margin-left:17.094017094017094%;*margin-left:16.98763411529369%} .row-fluid .offset1{margin-left:11.11111111111111%;*margin-left:11.004728132387708%} .row-fluid .offset1:first-child{margin-left:8.547008547008547%;*margin-left:8.440625568285142%} input,textarea,.uneditable-input{margin-left:0} .controls-row [class*=&quot;span&quot;]+[class*=&quot;span&quot;]{margin-left:30px} input.span12,textarea.span12,.uneditable-input.span12{width:1156px} input.span11,textarea.span11,.uneditable-input.span11{width:1056px} input.span10,textarea.span10,.uneditable-input.span10{width:956px} input.span9,textarea.span9,.uneditable-input.span9{width:856px} input.span8,textarea.span8,.uneditable-input.span8{width:756px} input.span7,textarea.span7,.uneditable-input.span7{width:656px} input.span6,textarea.span6,.uneditable-input.span6{width:556px} input.span5,textarea.span5,.uneditable-input.span5{width:456px} input.span4,textarea.span4,.uneditable-input.span4{width:356px} input.span3,textarea.span3,.uneditable-input.span3{width:256px} input.span2,textarea.span2,.uneditable-input.span2{width:156px} input.span1,textarea.span1,.uneditable-input.span1{width:56px} .thumbnails{margin-left:-30px} .thumbnails&gt;li{margin-left:30px} .row-fluid .thumbnails{margin-left:0}}@media (min-width:768px) and (max-width:979px){.row{margin-left:-20px;*zoom:1}.row:before,.row:after{display:table;content:&quot;&quot;;line-height:0} .row:after{clear:both} [class*=&quot;span&quot;]{float:left;min-height:1px;margin-left:20px} .container,.navbar-static-top .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:&quot;&quot;;line-height:0} .row-fluid:after{clear:both} .row-fluid [class*=&quot;span&quot;]{display:block;width:100%;min-height:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;float:left;margin-left:2.7624309392265194%;*margin-left:2.709239449864817%} .row-fluid [class*=&quot;span&quot;]:first-child{margin-left:0} .row-fluid .controls-row [class*=&quot;span&quot;]+[class*=&quot;span&quot;]{margin-left:2.7624309392265194%} .row-fluid .span12{width:100%;*width:99.94680851063829%} .row-fluid .span11{width:91.43646408839778%;*width:91.38327259903608%} .row-fluid .span10{width:82.87292817679558%;*width:82.81973668743387%} .row-fluid .span9{width:74.30939226519337%;*width:74.25620077583166%} .row-fluid .span8{width:65.74585635359117%;*width:65.69266486422946%} .row-fluid .span7{width:57.18232044198895%;*width:57.12912895262725%} .row-fluid .span6{width:48.61878453038674%;*width:48.56559304102504%} .row-fluid .span5{width:40.05524861878453%;*width:40.00205712942283%} .row-fluid .span4{width:31.491712707182323%;*width:31.43852121782062%} .row-fluid .span3{width:22.92817679558011%;*width:22.87498530621841%} .row-fluid .span2{width:14.3646408839779%;*width:14.311449394616199%} .row-fluid .span1{width:5.801104972375691%;*width:5.747913483013988%} .row-fluid .offset12{margin-left:105.52486187845304%;*margin-left:105.41847889972962%} .row-fluid .offset12:first-child{margin-left:102.76243093922652%;*margin-left:102.6560479605031%} .row-fluid .offset11{margin-left:96.96132596685082%;*margin-left:96.8549429881274%} .row-fluid .offset11:first-child{margin-left:94.1988950276243%;*margin-left:94.09251204890089%} .row-fluid .offset10{margin-left:88.39779005524862%;*margin-left:88.2914070765252%} .row-fluid .offset10:first-child{margin-left:85.6353591160221%;*margin-left:85.52897613729868%} .row-fluid .offset9{margin-left:79.8342541436464%;*margin-left:79.72787116492299%} .row-fluid .offset9:first-child{margin-left:77.07182320441989%;*margin-left:76.96544022569647%} .row-fluid .offset8{margin-left:71.2707182320442%;*margin-left:71.16433525332079%} .row-fluid .offset8:first-child{margin-left:68.50828729281768%;*margin-left:68.40190431409427%} .row-fluid .offset7{margin-left:62.70718232044199%;*margin-left:62.600799341718584%} .row-fluid .offset7:first-child{margin-left:59.94475138121547%;*margin-left:59.838368402492065%} .row-fluid .offset6{margin-left:54.14364640883978%;*margin-left:54.037263430116376%} .row-fluid .offset6:first-child{margin-left:51.38121546961326%;*margin-left:51.27483249088986%} .row-fluid .offset5{margin-left:45.58011049723757%;*margin-left:45.47372751851417%} .row-fluid .offset5:first-child{margin-left:42.81767955801105%;*margin-left:42.71129657928765%} .row-fluid .offset4{margin-left:37.01657458563536%;*margin-left:36.91019160691196%} .row-fluid .offset4:first-child{margin-left:34.25414364640884%;*margin-left:34.14776066768544%} .row-fluid .offset3{margin-left:28.45303867403315%;*margin-left:28.346655695309746%} .row-fluid .offset3:first-child{margin-left:25.69060773480663%;*margin-left:25.584224756083227%} .row-fluid .offset2{margin-left:19.88950276243094%;*margin-left:19.783119783707537%} .row-fluid .offset2:first-child{margin-left:17.12707182320442%;*margin-left:17.02068884448102%} .row-fluid .offset1{margin-left:11.32596685082873%;*margin-left:11.219583872105325%} .row-fluid .offset1:first-child{margin-left:8.56353591160221%;*margin-left:8.457152932878806%} input,textarea,.uneditable-input{margin-left:0} .controls-row [class*=&quot;span&quot;]+[class*=&quot;span&quot;]{margin-left:20px} input.span12,textarea.span12,.uneditable-input.span12{width:710px} input.span11,textarea.span11,.uneditable-input.span11{width:648px} input.span10,textarea.span10,.uneditable-input.span10{width:586px} input.span9,textarea.span9,.uneditable-input.span9{width:524px} input.span8,textarea.span8,.uneditable-input.span8{width:462px} input.span7,textarea.span7,.uneditable-input.span7{width:400px} input.span6,textarea.span6,.uneditable-input.span6{width:338px} input.span5,textarea.span5,.uneditable-input.span5{width:276px} input.span4,textarea.span4,.uneditable-input.span4{width:214px} input.span3,textarea.span3,.uneditable-input.span3{width:152px} input.span2,textarea.span2,.uneditable-input.span2{width:90px} input.span1,textarea.span1,.uneditable-input.span1{width:28px}}@media (max-width:767px){body{padding-left:20px;padding-right:20px} .navbar-fixed-top,.navbar-fixed-bottom,.navbar-static-top{margin-left:-20px;margin-right:-20px} .container-fluid{padding:0} .dl-horizontal dt{float:none;clear:none;width:auto;text-align:left} .dl-horizontal dd{margin-left:0} .container{width:auto} .row-fluid{width:100%} .row,.thumbnails{margin-left:0} .thumbnails&gt;li{float:none;margin-left:0} [class*=&quot;span&quot;],.uneditable-input[class*=&quot;span&quot;],.row-fluid [class*=&quot;span&quot;]{float:none;display:block;width:100%;margin-left:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box} .span12,.row-fluid .span12{width:100%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box} .row-fluid [class*=&quot;offset&quot;]:first-child{margin-left:0} .input-large,.input-xlarge,.input-xxlarge,input[class*=&quot;span&quot;],select[class*=&quot;span&quot;],textarea[class*=&quot;span&quot;],.uneditable-input{display:block;width:100%;min-height:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box} .input-prepend input,.input-append input,.input-prepend input[class*=&quot;span&quot;],.input-append input[class*=&quot;span&quot;]{display:inline-block;width:auto} .controls-row [class*=&quot;span&quot;]+[class*=&quot;span&quot;]{margin-left:0} .modal{position:fixed;top:20px;left:20px;right:20px;width:auto;margin:0}.modal.fade{top:-100px} .modal.fade.in{top:20px}}@media (max-width:480px){.nav-collapse{-webkit-transform:translate3d(0, 0, 0)} .page-header h1 small{display:block;line-height:20px} input[type=&quot;checkbox&quot;],input[type=&quot;radio&quot;]{border:1px solid #ccc} .form-horizontal .control-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-left:10px;padding-right:10px} .media .pull-left,.media .pull-right{float:none;display:block;margin-bottom:10px} .media-object{margin-right:0;margin-left:0} .modal{top:10px;left:10px;right:10px} .modal-header .close{padding:10px;margin:-10px} .carousel-caption{position:static}}@media (max-width:979px){body{padding-top:0} .navbar-fixed-top,.navbar-fixed-bottom{position:static} .navbar-fixed-top{margin-bottom:20px} .navbar-fixed-bottom{margin-top:20px} .navbar-fixed-top .navbar-inner,.navbar-fixed-bottom .navbar-inner{padding:5px} .navbar .container{width:auto;padding:0} .navbar .brand{padding-left:10px;padding-right:10px;margin:0 0 0 -5px} .nav-collapse{clear:both} .nav-collapse .nav{float:none;margin:0 0 10px} .nav-collapse .nav&gt;li{float:none} .nav-collapse .nav&gt;li&gt;a{margin-bottom:2px} .nav-collapse .nav&gt;.divider-vertical{display:none} .nav-collapse .nav .nav-header{color:#777;text-shadow:none} .nav-collapse .nav&gt;li&gt;a,.nav-collapse .dropdown-menu a{padding:9px 15px;font-weight:bold;color:#777;border-radius:3px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px} .nav-collapse .btn{padding:4px 10px 4px;font-weight:normal;border-radius:4px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px} .nav-collapse .dropdown-menu li+li a{margin-bottom:2px} .nav-collapse .nav&gt;li&gt;a:hover,.nav-collapse .nav&gt;li&gt;a:focus,.nav-collapse .dropdown-menu a:hover,.nav-collapse .dropdown-menu a:focus{background-color:#f2f2f2} .navbar-inverse .nav-collapse .nav&gt;li&gt;a,.navbar-inverse .nav-collapse .dropdown-menu a{color:#999} .navbar-inverse .nav-collapse .nav&gt;li&gt;a:hover,.navbar-inverse .nav-collapse .nav&gt;li&gt;a:focus,.navbar-inverse .nav-collapse .dropdown-menu a:hover,.navbar-inverse .nav-collapse .dropdown-menu a:focus{background-color:#111} .nav-collapse.in .btn-group{margin-top:5px;padding:0} .nav-collapse .dropdown-menu{position:static;top:auto;left:auto;float:none;display:none;max-width:none;margin:0 15px;padding:0;background-color:transparent;border:none;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none} .nav-collapse .open&gt;.dropdown-menu{display:block} .nav-collapse .dropdown-menu:before,.nav-collapse .dropdown-menu:after{display:none} .nav-collapse .dropdown-menu .divider{display:none} .nav-collapse .nav&gt;li&gt;.dropdown-menu:before,.nav-collapse .nav&gt;li&gt;.dropdown-menu:after{display:none} .nav-collapse .navbar-form,.nav-collapse .navbar-search{float:none;padding:10px 15px;margin:10px 0;border-top:1px solid #f2f2f2;border-bottom:1px solid #f2f2f2;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.1);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.1)} .navbar-inverse .nav-collapse .navbar-form,.navbar-inverse .nav-collapse .navbar-search{border-top-color:#111;border-bottom-color:#111} .navbar .nav-collapse .nav.pull-right{float:none;margin-left:0} .nav-collapse,.nav-collapse.collapse{overflow:hidden;height:0} .navbar .btn-navbar{display:block} .navbar-static .navbar-inner{padding-left:10px;padding-right:10px}}@media (min-width:979px + 1){.nav-collapse.collapse{height:auto !important;overflow:visible !important}}@font-face{font-family:'FontAwesome';src:url('../components/font-awesome/font/fontawesome-webfont.eot?v=3.2.1');src:url('../components/font-awesome/font/fontawesome-webfont.eot?#iefix&amp;v=3.2.1') format('embedded-opentype'),url('../components/font-awesome/font/fontawesome-webfont.woff?v=3.2.1') format('woff'),url('../components/font-awesome/font/fontawesome-webfont.ttf?v=3.2.1') format('truetype'),url('../components/font-awesome/font/fontawesome-webfont.svg#fontawesomeregular?v=3.2.1') format('svg');font-weight:normal;font-style:normal}[class^=&quot;icon-&quot;],[class*=&quot; icon-&quot;]{font-family:FontAwesome;font-weight:normal;font-style:normal;text-decoration:inherit;-webkit-font-smoothing:antialiased;*margin-right:.3em}
[class^=&quot;icon-&quot;]:before,[class*=&quot; icon-&quot;]:before{text-decoration:inherit;display:inline-block;speak:none}
.icon-large:before{vertical-align:-10%;font-size:1.3333333333333333em}
a [class^=&quot;icon-&quot;],a [class*=&quot; icon-&quot;]{display:inline}
[class^=&quot;icon-&quot;].icon-fixed-width,[class*=&quot; icon-&quot;].icon-fixed-width{display:inline-block;width:1.1428571428571428em;text-align:right;padding-right:.2857142857142857em}[class^=&quot;icon-&quot;].icon-fixed-width.icon-large,[class*=&quot; icon-&quot;].icon-fixed-width.icon-large{width:1.4285714285714286em}
.icons-ul{margin-left:2.142857142857143em;list-style-type:none}.icons-ul&gt;li{position:relative}
.icons-ul .icon-li{position:absolute;left:-2.142857142857143em;width:2.142857142857143em;text-align:center;line-height:inherit}
[class^=&quot;icon-&quot;].hide,[class*=&quot; icon-&quot;].hide{display:none}
.icon-muted{color:#eee}
.icon-light{color:#fff}
.icon-dark{color:#333}
.icon-border{border:solid 1px #eee;padding:.2em .25em .15em;border-radius:3px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}
.icon-2x{font-size:2em}.icon-2x.icon-border{border-width:2px;border-radius:4px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}
.icon-3x{font-size:3em}.icon-3x.icon-border{border-width:3px;border-radius:5px;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}
.icon-4x{font-size:4em}.icon-4x.icon-border{border-width:4px;border-radius:6px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}
.icon-5x{font-size:5em}.icon-5x.icon-border{border-width:5px;border-radius:7px;-webkit-border-radius:7px;-moz-border-radius:7px;border-radius:7px}
.pull-right{float:right}
.pull-left{float:left}
[class^=&quot;icon-&quot;].pull-left,[class*=&quot; icon-&quot;].pull-left{margin-right:.3em}
[class^=&quot;icon-&quot;].pull-right,[class*=&quot; icon-&quot;].pull-right{margin-left:.3em}
[class^=&quot;icon-&quot;],[class*=&quot; icon-&quot;]{display:inline;width:auto;height:auto;line-height:normal;vertical-align:baseline;background-image:none;background-position:0 0;background-repeat:repeat;margin-top:0}
.icon-white,.nav-pills&gt;.active&gt;a&gt;[class^=&quot;icon-&quot;],.nav-pills&gt;.active&gt;a&gt;[class*=&quot; icon-&quot;],.nav-list&gt;.active&gt;a&gt;[class^=&quot;icon-&quot;],.nav-list&gt;.active&gt;a&gt;[class*=&quot; icon-&quot;],.navbar-inverse .nav&gt;.active&gt;a&gt;[class^=&quot;icon-&quot;],.navbar-inverse .nav&gt;.active&gt;a&gt;[class*=&quot; icon-&quot;],.dropdown-menu&gt;li&gt;a:hover&gt;[class^=&quot;icon-&quot;],.dropdown-menu&gt;li&gt;a:hover&gt;[class*=&quot; icon-&quot;],.dropdown-menu&gt;.active&gt;a&gt;[class^=&quot;icon-&quot;],.dropdown-menu&gt;.active&gt;a&gt;[class*=&quot; icon-&quot;],.dropdown-submenu:hover&gt;a&gt;[class^=&quot;icon-&quot;],.dropdown-submenu:hover&gt;a&gt;[class*=&quot; icon-&quot;]{background-image:none}
.btn [class^=&quot;icon-&quot;].icon-large,.nav [class^=&quot;icon-&quot;].icon-large,.btn [class*=&quot; icon-&quot;].icon-large,.nav [class*=&quot; icon-&quot;].icon-large{line-height:.9em}
.btn [class^=&quot;icon-&quot;].icon-spin,.nav [class^=&quot;icon-&quot;].icon-spin,.btn [class*=&quot; icon-&quot;].icon-spin,.nav [class*=&quot; icon-&quot;].icon-spin{display:inline-block}
.nav-tabs [class^=&quot;icon-&quot;],.nav-pills [class^=&quot;icon-&quot;],.nav-tabs [class*=&quot; icon-&quot;],.nav-pills [class*=&quot; icon-&quot;],.nav-tabs [class^=&quot;icon-&quot;].icon-large,.nav-pills [class^=&quot;icon-&quot;].icon-large,.nav-tabs [class*=&quot; icon-&quot;].icon-large,.nav-pills [class*=&quot; icon-&quot;].icon-large{line-height:.9em}
.btn [class^=&quot;icon-&quot;].pull-left.icon-2x,.btn [class*=&quot; icon-&quot;].pull-left.icon-2x,.btn [class^=&quot;icon-&quot;].pull-right.icon-2x,.btn [class*=&quot; icon-&quot;].pull-right.icon-2x{margin-top:.18em}
.btn [class^=&quot;icon-&quot;].icon-spin.icon-large,.btn [class*=&quot; icon-&quot;].icon-spin.icon-large{line-height:.8em}
.btn.btn-small [class^=&quot;icon-&quot;].pull-left.icon-2x,.btn.btn-small [class*=&quot; icon-&quot;].pull-left.icon-2x,.btn.btn-small [class^=&quot;icon-&quot;].pull-right.icon-2x,.btn.btn-small [class*=&quot; icon-&quot;].pull-right.icon-2x{margin-top:.25em}
.btn.btn-large [class^=&quot;icon-&quot;],.btn.btn-large [class*=&quot; icon-&quot;]{margin-top:0}.btn.btn-large [class^=&quot;icon-&quot;].pull-left.icon-2x,.btn.btn-large [class*=&quot; icon-&quot;].pull-left.icon-2x,.btn.btn-large [class^=&quot;icon-&quot;].pull-right.icon-2x,.btn.btn-large [class*=&quot; icon-&quot;].pull-right.icon-2x{margin-top:.05em}
.btn.btn-large [class^=&quot;icon-&quot;].pull-left.icon-2x,.btn.btn-large [class*=&quot; icon-&quot;].pull-left.icon-2x{margin-right:.2em}
.btn.btn-large [class^=&quot;icon-&quot;].pull-right.icon-2x,.btn.btn-large [class*=&quot; icon-&quot;].pull-right.icon-2x{margin-left:.2em}
.nav-list [class^=&quot;icon-&quot;],.nav-list [class*=&quot; icon-&quot;]{line-height:inherit}
.icon-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:-35%}.icon-stack [class^=&quot;icon-&quot;],.icon-stack [class*=&quot; icon-&quot;]{display:block;text-align:center;position:absolute;width:100%;height:100%;font-size:1em;line-height:inherit;*line-height:2em}
.icon-stack .icon-stack-base{font-size:2em;*line-height:1em}
.icon-spin{display:inline-block;-moz-animation:spin 2s infinite linear;-o-animation:spin 2s infinite linear;-webkit-animation:spin 2s infinite linear;animation:spin 2s infinite linear}
a .icon-stack,a .icon-spin{display:inline-block;text-decoration:none}
@-moz-keyframes spin{0%{-moz-transform:rotate(0deg)} 100%{-moz-transform:rotate(359deg)}}@-webkit-keyframes spin{0%{-webkit-transform:rotate(0deg)} 100%{-webkit-transform:rotate(359deg)}}@-o-keyframes spin{0%{-o-transform:rotate(0deg)} 100%{-o-transform:rotate(359deg)}}@-ms-keyframes spin{0%{-ms-transform:rotate(0deg)} 100%{-ms-transform:rotate(359deg)}}@keyframes spin{0%{transform:rotate(0deg)} 100%{transform:rotate(359deg)}}.icon-rotate-90:before{-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg);filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1)}
.icon-rotate-180:before{-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);-ms-transform:rotate(180deg);-o-transform:rotate(180deg);transform:rotate(180deg);filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2)}
.icon-rotate-270:before{-webkit-transform:rotate(270deg);-moz-transform:rotate(270deg);-ms-transform:rotate(270deg);-o-transform:rotate(270deg);transform:rotate(270deg);filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3)}
.icon-flip-horizontal:before{-webkit-transform:scale(-1, 1);-moz-transform:scale(-1, 1);-ms-transform:scale(-1, 1);-o-transform:scale(-1, 1);transform:scale(-1, 1)}
.icon-flip-vertical:before{-webkit-transform:scale(1, -1);-moz-transform:scale(1, -1);-ms-transform:scale(1, -1);-o-transform:scale(1, -1);transform:scale(1, -1)}
a .icon-rotate-90:before,a .icon-rotate-180:before,a .icon-rotate-270:before,a .icon-flip-horizontal:before,a .icon-flip-vertical:before{display:inline-block}
.icon-glass:before{content:&quot;\f000&quot;}
.icon-music:before{content:&quot;\f001&quot;}
.icon-search:before{content:&quot;\f002&quot;}
.icon-envelope-alt:before{content:&quot;\f003&quot;}
.icon-heart:before{content:&quot;\f004&quot;}
.icon-star:before{content:&quot;\f005&quot;}
.icon-star-empty:before{content:&quot;\f006&quot;}
.icon-user:before{content:&quot;\f007&quot;}
.icon-film:before{content:&quot;\f008&quot;}
.icon-th-large:before{content:&quot;\f009&quot;}
.icon-th:before{content:&quot;\f00a&quot;}
.icon-th-list:before{content:&quot;\f00b&quot;}
.icon-ok:before{content:&quot;\f00c&quot;}
.icon-remove:before{content:&quot;\f00d&quot;}
.icon-zoom-in:before{content:&quot;\f00e&quot;}
.icon-zoom-out:before{content:&quot;\f010&quot;}
.icon-power-off:before,.icon-off:before{content:&quot;\f011&quot;}
.icon-signal:before{content:&quot;\f012&quot;}
.icon-gear:before,.icon-cog:before{content:&quot;\f013&quot;}
.icon-trash:before{content:&quot;\f014&quot;}
.icon-home:before{content:&quot;\f015&quot;}
.icon-file-alt:before{content:&quot;\f016&quot;}
.icon-time:before{content:&quot;\f017&quot;}
.icon-road:before{content:&quot;\f018&quot;}
.icon-download-alt:before{content:&quot;\f019&quot;}
.icon-download:before{content:&quot;\f01a&quot;}
.icon-upload:before{content:&quot;\f01b&quot;}
.icon-inbox:before{content:&quot;\f01c&quot;}
.icon-play-circle:before{content:&quot;\f01d&quot;}
.icon-rotate-right:before,.icon-repeat:before{content:&quot;\f01e&quot;}
.icon-refresh:before{content:&quot;\f021&quot;}
.icon-list-alt:before{content:&quot;\f022&quot;}
.icon-lock:before{content:&quot;\f023&quot;}
.icon-flag:before{content:&quot;\f024&quot;}
.icon-headphones:before{content:&quot;\f025&quot;}
.icon-volume-off:before{content:&quot;\f026&quot;}
.icon-volume-down:before{content:&quot;\f027&quot;}
.icon-volume-up:before{content:&quot;\f028&quot;}
.icon-qrcode:before{content:&quot;\f029&quot;}
.icon-barcode:before{content:&quot;\f02a&quot;}
.icon-tag:before{content:&quot;\f02b&quot;}
.icon-tags:before{content:&quot;\f02c&quot;}
.icon-book:before{content:&quot;\f02d&quot;}
.icon-bookmark:before{content:&quot;\f02e&quot;}
.icon-print:before{content:&quot;\f02f&quot;}
.icon-camera:before{content:&quot;\f030&quot;}
.icon-font:before{content:&quot;\f031&quot;}
.icon-bold:before{content:&quot;\f032&quot;}
.icon-italic:before{content:&quot;\f033&quot;}
.icon-text-height:before{content:&quot;\f034&quot;}
.icon-text-width:before{content:&quot;\f035&quot;}
.icon-align-left:before{content:&quot;\f036&quot;}
.icon-align-center:before{content:&quot;\f037&quot;}
.icon-align-right:before{content:&quot;\f038&quot;}
.icon-align-justify:before{content:&quot;\f039&quot;}
.icon-list:before{content:&quot;\f03a&quot;}
.icon-indent-left:before{content:&quot;\f03b&quot;}
.icon-indent-right:before{content:&quot;\f03c&quot;}
.icon-facetime-video:before{content:&quot;\f03d&quot;}
.icon-picture:before{content:&quot;\f03e&quot;}
.icon-pencil:before{content:&quot;\f040&quot;}
.icon-map-marker:before{content:&quot;\f041&quot;}
.icon-adjust:before{content:&quot;\f042&quot;}
.icon-tint:before{content:&quot;\f043&quot;}
.icon-edit:before{content:&quot;\f044&quot;}
.icon-share:before{content:&quot;\f045&quot;}
.icon-check:before{content:&quot;\f046&quot;}
.icon-move:before{content:&quot;\f047&quot;}
.icon-step-backward:before{content:&quot;\f048&quot;}
.icon-fast-backward:before{content:&quot;\f049&quot;}
.icon-backward:before{content:&quot;\f04a&quot;}
.icon-play:before{content:&quot;\f04b&quot;}
.icon-pause:before{content:&quot;\f04c&quot;}
.icon-stop:before{content:&quot;\f04d&quot;}
.icon-forward:before{content:&quot;\f04e&quot;}
.icon-fast-forward:before{content:&quot;\f050&quot;}
.icon-step-forward:before{content:&quot;\f051&quot;}
.icon-eject:before{content:&quot;\f052&quot;}
.icon-chevron-left:before{content:&quot;\f053&quot;}
.icon-chevron-right:before{content:&quot;\f054&quot;}
.icon-plus-sign:before{content:&quot;\f055&quot;}
.icon-minus-sign:before{content:&quot;\f056&quot;}
.icon-remove-sign:before{content:&quot;\f057&quot;}
.icon-ok-sign:before{content:&quot;\f058&quot;}
.icon-question-sign:before{content:&quot;\f059&quot;}
.icon-info-sign:before{content:&quot;\f05a&quot;}
.icon-screenshot:before{content:&quot;\f05b&quot;}
.icon-remove-circle:before{content:&quot;\f05c&quot;}
.icon-ok-circle:before{content:&quot;\f05d&quot;}
.icon-ban-circle:before{content:&quot;\f05e&quot;}
.icon-arrow-left:before{content:&quot;\f060&quot;}
.icon-arrow-right:before{content:&quot;\f061&quot;}
.icon-arrow-up:before{content:&quot;\f062&quot;}
.icon-arrow-down:before{content:&quot;\f063&quot;}
.icon-mail-forward:before,.icon-share-alt:before{content:&quot;\f064&quot;}
.icon-resize-full:before{content:&quot;\f065&quot;}
.icon-resize-small:before{content:&quot;\f066&quot;}
.icon-plus:before{content:&quot;\f067&quot;}
.icon-minus:before{content:&quot;\f068&quot;}
.icon-asterisk:before{content:&quot;\f069&quot;}
.icon-exclamation-sign:before{content:&quot;\f06a&quot;}
.icon-gift:before{content:&quot;\f06b&quot;}
.icon-leaf:before{content:&quot;\f06c&quot;}
.icon-fire:before{content:&quot;\f06d&quot;}
.icon-eye-open:before{content:&quot;\f06e&quot;}
.icon-eye-close:before{content:&quot;\f070&quot;}
.icon-warning-sign:before{content:&quot;\f071&quot;}
.icon-plane:before{content:&quot;\f072&quot;}
.icon-calendar:before{content:&quot;\f073&quot;}
.icon-random:before{content:&quot;\f074&quot;}
.icon-comment:before{content:&quot;\f075&quot;}
.icon-magnet:before{content:&quot;\f076&quot;}
.icon-chevron-up:before{content:&quot;\f077&quot;}
.icon-chevron-down:before{content:&quot;\f078&quot;}
.icon-retweet:before{content:&quot;\f079&quot;}
.icon-shopping-cart:before{content:&quot;\f07a&quot;}
.icon-folder-close:before{content:&quot;\f07b&quot;}
.icon-folder-open:before{content:&quot;\f07c&quot;}
.icon-resize-vertical:before{content:&quot;\f07d&quot;}
.icon-resize-horizontal:before{content:&quot;\f07e&quot;}
.icon-bar-chart:before{content:&quot;\f080&quot;}
.icon-twitter-sign:before{content:&quot;\f081&quot;}
.icon-facebook-sign:before{content:&quot;\f082&quot;}
.icon-camera-retro:before{content:&quot;\f083&quot;}
.icon-key:before{content:&quot;\f084&quot;}
.icon-gears:before,.icon-cogs:before{content:&quot;\f085&quot;}
.icon-comments:before{content:&quot;\f086&quot;}
.icon-thumbs-up-alt:before{content:&quot;\f087&quot;}
.icon-thumbs-down-alt:before{content:&quot;\f088&quot;}
.icon-star-half:before{content:&quot;\f089&quot;}
.icon-heart-empty:before{content:&quot;\f08a&quot;}
.icon-signout:before{content:&quot;\f08b&quot;}
.icon-linkedin-sign:before{content:&quot;\f08c&quot;}
.icon-pushpin:before{content:&quot;\f08d&quot;}
.icon-external-link:before{content:&quot;\f08e&quot;}
.icon-signin:before{content:&quot;\f090&quot;}
.icon-trophy:before{content:&quot;\f091&quot;}
.icon-github-sign:before{content:&quot;\f092&quot;}
.icon-upload-alt:before{content:&quot;\f093&quot;}
.icon-lemon:before{content:&quot;\f094&quot;}
.icon-phone:before{content:&quot;\f095&quot;}
.icon-unchecked:before,.icon-check-empty:before{content:&quot;\f096&quot;}
.icon-bookmark-empty:before{content:&quot;\f097&quot;}
.icon-phone-sign:before{content:&quot;\f098&quot;}
.icon-twitter:before{content:&quot;\f099&quot;}
.icon-facebook:before{content:&quot;\f09a&quot;}
.icon-github:before{content:&quot;\f09b&quot;}
.icon-unlock:before{content:&quot;\f09c&quot;}
.icon-credit-card:before{content:&quot;\f09d&quot;}
.icon-rss:before{content:&quot;\f09e&quot;}
.icon-hdd:before{content:&quot;\f0a0&quot;}
.icon-bullhorn:before{content:&quot;\f0a1&quot;}
.icon-bell:before{content:&quot;\f0a2&quot;}
.icon-certificate:before{content:&quot;\f0a3&quot;}
.icon-hand-right:before{content:&quot;\f0a4&quot;}
.icon-hand-left:before{content:&quot;\f0a5&quot;}
.icon-hand-up:before{content:&quot;\f0a6&quot;}
.icon-hand-down:before{content:&quot;\f0a7&quot;}
.icon-circle-arrow-left:before{content:&quot;\f0a8&quot;}
.icon-circle-arrow-right:before{content:&quot;\f0a9&quot;}
.icon-circle-arrow-up:before{content:&quot;\f0aa&quot;}
.icon-circle-arrow-down:before{content:&quot;\f0ab&quot;}
.icon-globe:before{content:&quot;\f0ac&quot;}
.icon-wrench:before{content:&quot;\f0ad&quot;}
.icon-tasks:before{content:&quot;\f0ae&quot;}
.icon-filter:before{content:&quot;\f0b0&quot;}
.icon-briefcase:before{content:&quot;\f0b1&quot;}
.icon-fullscreen:before{content:&quot;\f0b2&quot;}
.icon-group:before{content:&quot;\f0c0&quot;}
.icon-link:before{content:&quot;\f0c1&quot;}
.icon-cloud:before{content:&quot;\f0c2&quot;}
.icon-beaker:before{content:&quot;\f0c3&quot;}
.icon-cut:before{content:&quot;\f0c4&quot;}
.icon-copy:before{content:&quot;\f0c5&quot;}
.icon-paperclip:before,.icon-paper-clip:before{content:&quot;\f0c6&quot;}
.icon-save:before{content:&quot;\f0c7&quot;}
.icon-sign-blank:before{content:&quot;\f0c8&quot;}
.icon-reorder:before{content:&quot;\f0c9&quot;}
.icon-list-ul:before{content:&quot;\f0ca&quot;}
.icon-list-ol:before{content:&quot;\f0cb&quot;}
.icon-strikethrough:before{content:&quot;\f0cc&quot;}
.icon-underline:before{content:&quot;\f0cd&quot;}
.icon-table:before{content:&quot;\f0ce&quot;}
.icon-magic:before{content:&quot;\f0d0&quot;}
.icon-truck:before{content:&quot;\f0d1&quot;}
.icon-pinterest:before{content:&quot;\f0d2&quot;}
.icon-pinterest-sign:before{content:&quot;\f0d3&quot;}
.icon-google-plus-sign:before{content:&quot;\f0d4&quot;}
.icon-google-plus:before{content:&quot;\f0d5&quot;}
.icon-money:before{content:&quot;\f0d6&quot;}
.icon-caret-down:before{content:&quot;\f0d7&quot;}
.icon-caret-up:before{content:&quot;\f0d8&quot;}
.icon-caret-left:before{content:&quot;\f0d9&quot;}
.icon-caret-right:before{content:&quot;\f0da&quot;}
.icon-columns:before{content:&quot;\f0db&quot;}
.icon-sort:before{content:&quot;\f0dc&quot;}
.icon-sort-down:before{content:&quot;\f0dd&quot;}
.icon-sort-up:before{content:&quot;\f0de&quot;}
.icon-envelope:before{content:&quot;\f0e0&quot;}
.icon-linkedin:before{content:&quot;\f0e1&quot;}
.icon-rotate-left:before,.icon-undo:before{content:&quot;\f0e2&quot;}
.icon-legal:before{content:&quot;\f0e3&quot;}
.icon-dashboard:before{content:&quot;\f0e4&quot;}
.icon-comment-alt:before{content:&quot;\f0e5&quot;}
.icon-comments-alt:before{content:&quot;\f0e6&quot;}
.icon-bolt:before{content:&quot;\f0e7&quot;}
.icon-sitemap:before{content:&quot;\f0e8&quot;}
.icon-umbrella:before{content:&quot;\f0e9&quot;}
.icon-paste:before{content:&quot;\f0ea&quot;}
.icon-lightbulb:before{content:&quot;\f0eb&quot;}
.icon-exchange:before{content:&quot;\f0ec&quot;}
.icon-cloud-download:before{content:&quot;\f0ed&quot;}
.icon-cloud-upload:before{content:&quot;\f0ee&quot;}
.icon-user-md:before{content:&quot;\f0f0&quot;}
.icon-stethoscope:before{content:&quot;\f0f1&quot;}
.icon-suitcase:before{content:&quot;\f0f2&quot;}
.icon-bell-alt:before{content:&quot;\f0f3&quot;}
.icon-coffee:before{content:&quot;\f0f4&quot;}
.icon-food:before{content:&quot;\f0f5&quot;}
.icon-file-text-alt:before{content:&quot;\f0f6&quot;}
.icon-building:before{content:&quot;\f0f7&quot;}
.icon-hospital:before{content:&quot;\f0f8&quot;}
.icon-ambulance:before{content:&quot;\f0f9&quot;}
.icon-medkit:before{content:&quot;\f0fa&quot;}
.icon-fighter-jet:before{content:&quot;\f0fb&quot;}
.icon-beer:before{content:&quot;\f0fc&quot;}
.icon-h-sign:before{content:&quot;\f0fd&quot;}
.icon-plus-sign-alt:before{content:&quot;\f0fe&quot;}
.icon-double-angle-left:before{content:&quot;\f100&quot;}
.icon-double-angle-right:before{content:&quot;\f101&quot;}
.icon-double-angle-up:before{content:&quot;\f102&quot;}
.icon-double-angle-down:before{content:&quot;\f103&quot;}
.icon-angle-left:before{content:&quot;\f104&quot;}
.icon-angle-right:before{content:&quot;\f105&quot;}
.icon-angle-up:before{content:&quot;\f106&quot;}
.icon-angle-down:before{content:&quot;\f107&quot;}
.icon-desktop:before{content:&quot;\f108&quot;}
.icon-laptop:before{content:&quot;\f109&quot;}
.icon-tablet:before{content:&quot;\f10a&quot;}
.icon-mobile-phone:before{content:&quot;\f10b&quot;}
.icon-circle-blank:before{content:&quot;\f10c&quot;}
.icon-quote-left:before{content:&quot;\f10d&quot;}
.icon-quote-right:before{content:&quot;\f10e&quot;}
.icon-spinner:before{content:&quot;\f110&quot;}
.icon-circle:before{content:&quot;\f111&quot;}
.icon-mail-reply:before,.icon-reply:before{content:&quot;\f112&quot;}
.icon-github-alt:before{content:&quot;\f113&quot;}
.icon-folder-close-alt:before{content:&quot;\f114&quot;}
.icon-folder-open-alt:before{content:&quot;\f115&quot;}
.icon-expand-alt:before{content:&quot;\f116&quot;}
.icon-collapse-alt:before{content:&quot;\f117&quot;}
.icon-smile:before{content:&quot;\f118&quot;}
.icon-frown:before{content:&quot;\f119&quot;}
.icon-meh:before{content:&quot;\f11a&quot;}
.icon-gamepad:before{content:&quot;\f11b&quot;}
.icon-keyboard:before{content:&quot;\f11c&quot;}
.icon-flag-alt:before{content:&quot;\f11d&quot;}
.icon-flag-checkered:before{content:&quot;\f11e&quot;}
.icon-terminal:before{content:&quot;\f120&quot;}
.icon-code:before{content:&quot;\f121&quot;}
.icon-reply-all:before{content:&quot;\f122&quot;}
.icon-mail-reply-all:before{content:&quot;\f122&quot;}
.icon-star-half-full:before,.icon-star-half-empty:before{content:&quot;\f123&quot;}
.icon-location-arrow:before{content:&quot;\f124&quot;}
.icon-crop:before{content:&quot;\f125&quot;}
.icon-code-fork:before{content:&quot;\f126&quot;}
.icon-unlink:before{content:&quot;\f127&quot;}
.icon-question:before{content:&quot;\f128&quot;}
.icon-info:before{content:&quot;\f129&quot;}
.icon-exclamation:before{content:&quot;\f12a&quot;}
.icon-superscript:before{content:&quot;\f12b&quot;}
.icon-subscript:before{content:&quot;\f12c&quot;}
.icon-eraser:before{content:&quot;\f12d&quot;}
.icon-puzzle-piece:before{content:&quot;\f12e&quot;}
.icon-microphone:before{content:&quot;\f130&quot;}
.icon-microphone-off:before{content:&quot;\f131&quot;}
.icon-shield:before{content:&quot;\f132&quot;}
.icon-calendar-empty:before{content:&quot;\f133&quot;}
.icon-fire-extinguisher:before{content:&quot;\f134&quot;}
.icon-rocket:before{content:&quot;\f135&quot;}
.icon-maxcdn:before{content:&quot;\f136&quot;}
.icon-chevron-sign-left:before{content:&quot;\f137&quot;}
.icon-chevron-sign-right:before{content:&quot;\f138&quot;}
.icon-chevron-sign-up:before{content:&quot;\f139&quot;}
.icon-chevron-sign-down:before{content:&quot;\f13a&quot;}
.icon-html5:before{content:&quot;\f13b&quot;}
.icon-css3:before{content:&quot;\f13c&quot;}
.icon-anchor:before{content:&quot;\f13d&quot;}
.icon-unlock-alt:before{content:&quot;\f13e&quot;}
.icon-bullseye:before{content:&quot;\f140&quot;}
.icon-ellipsis-horizontal:before{content:&quot;\f141&quot;}
.icon-ellipsis-vertical:before{content:&quot;\f142&quot;}
.icon-rss-sign:before{content:&quot;\f143&quot;}
.icon-play-sign:before{content:&quot;\f144&quot;}
.icon-ticket:before{content:&quot;\f145&quot;}
.icon-minus-sign-alt:before{content:&quot;\f146&quot;}
.icon-check-minus:before{content:&quot;\f147&quot;}
.icon-level-up:before{content:&quot;\f148&quot;}
.icon-level-down:before{content:&quot;\f149&quot;}
.icon-check-sign:before{content:&quot;\f14a&quot;}
.icon-edit-sign:before{content:&quot;\f14b&quot;}
.icon-external-link-sign:before{content:&quot;\f14c&quot;}
.icon-share-sign:before{content:&quot;\f14d&quot;}
.icon-compass:before{content:&quot;\f14e&quot;}
.icon-collapse:before{content:&quot;\f150&quot;}
.icon-collapse-top:before{content:&quot;\f151&quot;}
.icon-expand:before{content:&quot;\f152&quot;}
.icon-euro:before,.icon-eur:before{content:&quot;\f153&quot;}
.icon-gbp:before{content:&quot;\f154&quot;}
.icon-dollar:before,.icon-usd:before{content:&quot;\f155&quot;}
.icon-rupee:before,.icon-inr:before{content:&quot;\f156&quot;}
.icon-yen:before,.icon-jpy:before{content:&quot;\f157&quot;}
.icon-renminbi:before,.icon-cny:before{content:&quot;\f158&quot;}
.icon-won:before,.icon-krw:before{content:&quot;\f159&quot;}
.icon-bitcoin:before,.icon-btc:before{content:&quot;\f15a&quot;}
.icon-file:before{content:&quot;\f15b&quot;}
.icon-file-text:before{content:&quot;\f15c&quot;}
.icon-sort-by-alphabet:before{content:&quot;\f15d&quot;}
.icon-sort-by-alphabet-alt:before{content:&quot;\f15e&quot;}
.icon-sort-by-attributes:before{content:&quot;\f160&quot;}
.icon-sort-by-attributes-alt:before{content:&quot;\f161&quot;}
.icon-sort-by-order:before{content:&quot;\f162&quot;}
.icon-sort-by-order-alt:before{content:&quot;\f163&quot;}
.icon-thumbs-up:before{content:&quot;\f164&quot;}
.icon-thumbs-down:before{content:&quot;\f165&quot;}
.icon-youtube-sign:before{content:&quot;\f166&quot;}
.icon-youtube:before{content:&quot;\f167&quot;}
.icon-xing:before{content:&quot;\f168&quot;}
.icon-xing-sign:before{content:&quot;\f169&quot;}
.icon-youtube-play:before{content:&quot;\f16a&quot;}
.icon-dropbox:before{content:&quot;\f16b&quot;}
.icon-stackexchange:before{content:&quot;\f16c&quot;}
.icon-instagram:before{content:&quot;\f16d&quot;}
.icon-flickr:before{content:&quot;\f16e&quot;}
.icon-adn:before{content:&quot;\f170&quot;}
.icon-bitbucket:before{content:&quot;\f171&quot;}
.icon-bitbucket-sign:before{content:&quot;\f172&quot;}
.icon-tumblr:before{content:&quot;\f173&quot;}
.icon-tumblr-sign:before{content:&quot;\f174&quot;}
.icon-long-arrow-down:before{content:&quot;\f175&quot;}
.icon-long-arrow-up:before{content:&quot;\f176&quot;}
.icon-long-arrow-left:before{content:&quot;\f177&quot;}
.icon-long-arrow-right:before{content:&quot;\f178&quot;}
.icon-apple:before{content:&quot;\f179&quot;}
.icon-windows:before{content:&quot;\f17a&quot;}
.icon-android:before{content:&quot;\f17b&quot;}
.icon-linux:before{content:&quot;\f17c&quot;}
.icon-dribbble:before{content:&quot;\f17d&quot;}
.icon-skype:before{content:&quot;\f17e&quot;}
.icon-foursquare:before{content:&quot;\f180&quot;}
.icon-trello:before{content:&quot;\f181&quot;}
.icon-female:before{content:&quot;\f182&quot;}
.icon-male:before{content:&quot;\f183&quot;}
.icon-gittip:before{content:&quot;\f184&quot;}
.icon-sun:before{content:&quot;\f185&quot;}
.icon-moon:before{content:&quot;\f186&quot;}
.icon-archive:before{content:&quot;\f187&quot;}
.icon-bug:before{content:&quot;\f188&quot;}
.icon-vk:before{content:&quot;\f189&quot;}
.icon-weibo:before{content:&quot;\f18a&quot;}
.icon-renren:before{content:&quot;\f18b&quot;}
code{color:#000}
pre{font-size:inherit;line-height:inherit}
.border-box-sizing{box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box}
.corner-all{border-radius:4px}
.hbox{display:-webkit-box;-webkit-box-orient:horizontal;-webkit-box-align:stretch;display:-moz-box;-moz-box-orient:horizontal;-moz-box-align:stretch;display:box;box-orient:horizontal;box-align:stretch;display:flex;flex-direction:row;align-items:stretch}
.hbox&gt;*{-webkit-box-flex:0;-moz-box-flex:0;box-flex:0;flex:none}
.vbox{display:-webkit-box;-webkit-box-orient:vertical;-webkit-box-align:stretch;display:-moz-box;-moz-box-orient:vertical;-moz-box-align:stretch;display:box;box-orient:vertical;box-align:stretch;display:flex;flex-direction:column;align-items:stretch}
.vbox&gt;*{-webkit-box-flex:0;-moz-box-flex:0;box-flex:0;flex:none}
.hbox.reverse,.vbox.reverse,.reverse{-webkit-box-direction:reverse;-moz-box-direction:reverse;box-direction:reverse;flex-direction:row-reverse}
.hbox.box-flex0,.vbox.box-flex0,.box-flex0{-webkit-box-flex:0;-moz-box-flex:0;box-flex:0;flex:none;width:auto}
.hbox.box-flex1,.vbox.box-flex1,.box-flex1{-webkit-box-flex:1;-moz-box-flex:1;box-flex:1;flex:1}
.hbox.box-flex,.vbox.box-flex,.box-flex{-webkit-box-flex:1;-moz-box-flex:1;box-flex:1;flex:1}
.hbox.box-flex2,.vbox.box-flex2,.box-flex2{-webkit-box-flex:2;-moz-box-flex:2;box-flex:2;flex:2}
.box-group1{-webkit-box-flex-group:1;-moz-box-flex-group:1;box-flex-group:1}
.box-group2{-webkit-box-flex-group:2;-moz-box-flex-group:2;box-flex-group:2}
.hbox.start,.vbox.start,.start{-webkit-box-pack:start;-moz-box-pack:start;box-pack:start;justify-content:flex-start}
.hbox.end,.vbox.end,.end{-webkit-box-pack:end;-moz-box-pack:end;box-pack:end;justify-content:flex-end}
.hbox.center,.vbox.center,.center{-webkit-box-pack:center;-moz-box-pack:center;box-pack:center;justify-content:center}
.hbox.align-start,.vbox.align-start,.align-start{-webkit-box-align:start;-moz-box-align:start;box-align:start;align-items:flex-start}
.hbox.align-end,.vbox.align-end,.align-end{-webkit-box-align:end;-moz-box-align:end;box-align:end;align-items:flex-end}
.hbox.align-center,.vbox.align-center,.align-center{-webkit-box-align:center;-moz-box-align:center;box-align:center;align-items:center}
div.error{margin:2em;text-align:center}
div.error&gt;h1{font-size:500%;line-height:normal}
div.error&gt;p{font-size:200%;line-height:normal}
div.traceback-wrapper{text-align:left;max-width:800px;margin:auto}
body{background-color:#fff;position:absolute;left:0;right:0;top:0;bottom:0;overflow:visible}
div#header{display:none}
#ipython_notebook{padding-left:16px}
#noscript{width:auto;padding-top:16px;padding-bottom:16px;text-align:center;font-size:22px;color:#f00;font-weight:bold}
#ipython_notebook img{font-family:Verdana,&quot;Helvetica Neue&quot;,Arial,Helvetica,Geneva,sans-serif;height:24px;text-decoration:none;color:#000}
#site{width:100%;display:none}
.ui-button .ui-button-text{padding:.2em .8em;font-size:77%}
input.ui-button{padding:.3em .9em}
.navbar span{margin-top:3px}
span#login_widget{float:right}
.nav-header{text-transform:none}
.navbar-nobg{background-color:transparent;background-image:none}
#header&gt;span{margin-top:10px}
.modal_stretch{display:-webkit-box;-webkit-box-orient:vertical;-webkit-box-align:stretch;display:-moz-box;-moz-box-orient:vertical;-moz-box-align:stretch;display:box;box-orient:vertical;box-align:stretch;display:flex;flex-direction:column;align-items:stretch;height:80%}.modal_stretch .modal-body{max-height:none;flex:1}
@media (min-width:768px){.modal{width:700px;margin-left:-350px}}.center-nav{display:inline-block;margin-bottom:-4px}
.alternate_upload{background-color:none;display:inline}
.alternate_upload.form{padding:0;margin:0}
.alternate_upload input.fileinput{background-color:#f00;position:relative;opacity:0;z-index:2;width:295px;margin-left:163px;cursor:pointer;height:26px}
ul#tabs{margin-bottom:4px}
ul#tabs a{padding-top:4px;padding-bottom:4px}
ul.breadcrumb a:focus,ul.breadcrumb a:hover{text-decoration:none}
ul.breadcrumb i.icon-home{font-size:16px;margin-right:4px}
ul.breadcrumb span{color:#5e5e5e}
.list_toolbar{padding:4px 0 4px 0}
.list_toolbar [class*=&quot;span&quot;]{min-height:26px}
.list_header{font-weight:bold}
.list_container{margin-top:4px;margin-bottom:20px;border:1px solid #ababab;border-radius:4px}
.list_container&gt;div{border-bottom:1px solid #ababab}.list_container&gt;div:hover .list-item{background-color:#f00}
.list_container&gt;div:last-child{border:none}
.list_item:hover .list_item{background-color:#ddd}
.list_item a{text-decoration:none}
.list_header&gt;div,.list_item&gt;div{padding-top:4px;padding-bottom:4px;padding-left:7px;padding-right:7px;height:22px;line-height:22px}
.item_name{line-height:22px;height:26px}
.item_icon{font-size:14px;color:#5e5e5e;margin-right:7px}
.item_buttons{line-height:1em}
.toolbar_info{height:26px;line-height:26px}
input.nbname_input,input.engine_num_input{padding-top:3px;padding-bottom:3px;height:14px;line-height:14px;margin:0}
input.engine_num_input{width:60px}
.highlight_text{color:#00f}
#project_name&gt;.breadcrumb{padding:0;margin-bottom:0;background-color:transparent;font-weight:bold}
.folder_icon:before{font-family:FontAwesome;font-weight:normal;font-style:normal;text-decoration:inherit;-webkit-font-smoothing:antialiased;*margin-right:.3em;content:&quot;\f114&quot;}
.notebook_icon:before{font-family:FontAwesome;font-weight:normal;font-style:normal;text-decoration:inherit;-webkit-font-smoothing:antialiased;*margin-right:.3em;content:&quot;\f02d&quot;}
.ansibold{font-weight:bold}
.ansiblack{color:#000}
.ansired{color:#8b0000}
.ansigreen{color:#006400}
.ansiyellow{color:#a52a2a}
.ansiblue{color:#00008b}
.ansipurple{color:#9400d3}
.ansicyan{color:#4682b4}
.ansigray{color:#808080}
.ansibgblack{background-color:#000}
.ansibgred{background-color:#f00}
.ansibggreen{background-color:#008000}
.ansibgyellow{background-color:#ff0}
.ansibgblue{background-color:#00f}
.ansibgpurple{background-color:#f0f}
.ansibgcyan{background-color:#0ff}
.ansibggray{background-color:#808080}
div.cell{border:1px solid transparent;display:-webkit-box;-webkit-box-orient:vertical;-webkit-box-align:stretch;display:-moz-box;-moz-box-orient:vertical;-moz-box-align:stretch;display:box;box-orient:vertical;box-align:stretch;display:flex;flex-direction:column;align-items:stretch}div.cell.selected{border-radius:4px;border:thin #ababab solid}
div.cell.edit_mode{border-radius:4px;border:thin #008000 solid}
div.cell{width:100%;padding:5px 5px 5px 0;margin:0;outline:none}
div.prompt{min-width:11ex;padding:.4em;margin:0;font-family:monospace;text-align:right;line-height:1.21429em}
@media (max-width:480px){div.prompt{text-align:left}}div.inner_cell{display:-webkit-box;-webkit-box-orient:vertical;-webkit-box-align:stretch;display:-moz-box;-moz-box-orient:vertical;-moz-box-align:stretch;display:box;box-orient:vertical;box-align:stretch;display:flex;flex-direction:column;align-items:stretch;-webkit-box-flex:1;-moz-box-flex:1;box-flex:1;flex:1}
div.input_area{border:1px solid #cfcfcf;border-radius:4px;background:#f7f7f7;line-height:1.21429em}
div.prompt:empty{padding-top:0;padding-bottom:0}
div.input{page-break-inside:avoid;display:-webkit-box;-webkit-box-orient:horizontal;-webkit-box-align:stretch;display:-moz-box;-moz-box-orient:horizontal;-moz-box-align:stretch;display:box;box-orient:horizontal;box-align:stretch;display:flex;flex-direction:row;align-items:stretch}
@media (max-width:480px){div.input{display:-webkit-box;-webkit-box-orient:vertical;-webkit-box-align:stretch;display:-moz-box;-moz-box-orient:vertical;-moz-box-align:stretch;display:box;box-orient:vertical;box-align:stretch;display:flex;flex-direction:column;align-items:stretch}}div.input_prompt{color:#000080;border-top:1px solid transparent}
div.input_area&gt;div.highlight{margin:.4em;border:none;padding:0;background-color:transparent}
div.input_area&gt;div.highlight&gt;pre{margin:0;border:none;padding:0;background-color:transparent}
.CodeMirror{line-height:1.21429em;height:auto;background:none;}
.CodeMirror-scroll{overflow-y:hidden;overflow-x:auto}
.CodeMirror-lines{padding:.4em}
.CodeMirror-linenumber{padding:0 8px 0 4px}
.CodeMirror-gutters{border-bottom-left-radius:4px;border-top-left-radius:4px}
.CodeMirror pre{padding:0;border:0;border-radius:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}
pre code{display:block;padding:.5em}
.highlight-base,pre code,pre .subst,pre .tag .title,pre .lisp .title,pre .clojure .built_in,pre .nginx .title{color:#000}
.highlight-string,pre .string,pre .constant,pre .parent,pre .tag .value,pre .rules .value,pre .rules .value .number,pre .preprocessor,pre .ruby .symbol,pre .ruby .symbol .string,pre .aggregate,pre .template_tag,pre .django .variable,pre .smalltalk .class,pre .addition,pre .flow,pre .stream,pre .bash .variable,pre .apache .tag,pre .apache .cbracket,pre .tex .command,pre .tex .special,pre .erlang_repl .function_or_atom,pre .markdown .header{color:#ba2121}
.highlight-comment,pre .comment,pre .annotation,pre .template_comment,pre .diff .header,pre .chunk,pre .markdown .blockquote{color:#408080;font-style:italic}
.highlight-number,pre .number,pre .date,pre .regexp,pre .literal,pre .smalltalk .symbol,pre .smalltalk .char,pre .go .constant,pre .change,pre .markdown .bullet,pre .markdown .link_url{color:#080}
pre .label,pre .javadoc,pre .ruby .string,pre .decorator,pre .filter .argument,pre .localvars,pre .array,pre .attr_selector,pre .important,pre .pseudo,pre .pi,pre .doctype,pre .deletion,pre .envvar,pre .shebang,pre .apache .sqbracket,pre .nginx .built_in,pre .tex .formula,pre .erlang_repl .reserved,pre .prompt,pre .markdown .link_label,pre .vhdl .attribute,pre .clojure .attribute,pre .coffeescript .property{color:#88f}
.highlight-keyword,pre .keyword,pre .id,pre .phpdoc,pre .aggregate,pre .css .tag,pre .javadoctag,pre .phpdoc,pre .yardoctag,pre .smalltalk .class,pre .winutils,pre .bash .variable,pre .apache .tag,pre .go .typename,pre .tex .command,pre .markdown .strong,pre .request,pre .status{color:#008000;font-weight:bold}
.highlight-builtin,pre .built_in{color:#008000}
pre .markdown .emphasis{font-style:italic}
pre .nginx .built_in{font-weight:normal}
pre .coffeescript .javascript,pre .javascript .xml,pre .tex .formula,pre .xml .javascript,pre .xml .vbscript,pre .xml .css,pre .xml .cdata{opacity:.5}
.cm-s-ipython span.cm-variable{color:#000}
.cm-s-ipython span.cm-keyword{color:#008000;font-weight:bold}
.cm-s-ipython span.cm-number{color:#080}
.cm-s-ipython span.cm-comment{color:#408080;font-style:italic}
.cm-s-ipython span.cm-string{color:#ba2121}
.cm-s-ipython span.cm-builtin{color:#008000}
.cm-s-ipython span.cm-error{color:#f00}
.cm-s-ipython span.cm-operator{color:#a2f;font-weight:bold}
.cm-s-ipython span.cm-meta{color:#a2f}
.cm-s-ipython span.cm-tab{background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAMCAYAAAAkuj5RAAAAAXNSR0IArs4c6QAAAGFJREFUSMft1LsRQFAQheHPowAKoACx3IgEKtaEHujDjORSgWTH/ZOdnZOcM/sgk/kFFWY0qV8foQwS4MKBCS3qR6ixBJvElOobYAtivseIE120FaowJPN75GMu8j/LfMwNjh4HUpwg4LUAAAAASUVORK5CYII=);background-position:right;background-repeat:no-repeat}
div.output_wrapper{position:relative;display:-webkit-box;-webkit-box-orient:vertical;-webkit-box-align:stretch;display:-moz-box;-moz-box-orient:vertical;-moz-box-align:stretch;display:box;box-orient:vertical;box-align:stretch;display:flex;flex-direction:column;align-items:stretch}
div.output_scroll{height:24em;width:100%;overflow:auto;border-radius:4px;-webkit-box-shadow:inset 0 2px 8px rgba(0,0,0,0.8);-moz-box-shadow:inset 0 2px 8px rgba(0,0,0,0.8);box-shadow:inset 0 2px 8px rgba(0,0,0,0.8);display:block}
div.output_collapsed{margin:0;padding:0;display:-webkit-box;-webkit-box-orient:vertical;-webkit-box-align:stretch;display:-moz-box;-moz-box-orient:vertical;-moz-box-align:stretch;display:box;box-orient:vertical;box-align:stretch;display:flex;flex-direction:column;align-items:stretch}
div.out_prompt_overlay{height:100%;padding:0 .4em;position:absolute;border-radius:4px}
div.out_prompt_overlay:hover{-webkit-box-shadow:inset 0 0 1px #000;-moz-box-shadow:inset 0 0 1px #000;box-shadow:inset 0 0 1px #000;background:rgba(240,240,240,0.5)}
div.output_prompt{color:#8b0000}
div.output_area{padding:0;page-break-inside:avoid;display:-webkit-box;-webkit-box-orient:horizontal;-webkit-box-align:stretch;display:-moz-box;-moz-box-orient:horizontal;-moz-box-align:stretch;display:box;box-orient:horizontal;box-align:stretch;display:flex;flex-direction:row;align-items:stretch}div.output_area .MathJax_Display{text-align:left !important}
div.output_area .rendered_html table{margin-left:0;margin-right:0}
div.output_area .rendered_html img{margin-left:0;margin-right:0}
.output{display:-webkit-box;-webkit-box-orient:vertical;-webkit-box-align:stretch;display:-moz-box;-moz-box-orient:vertical;-moz-box-align:stretch;display:box;box-orient:vertical;box-align:stretch;display:flex;flex-direction:column;align-items:stretch}
@media (max-width:480px){div.output_area{display:-webkit-box;-webkit-box-orient:vertical;-webkit-box-align:stretch;display:-moz-box;-moz-box-orient:vertical;-moz-box-align:stretch;display:box;box-orient:vertical;box-align:stretch;display:flex;flex-direction:column;align-items:stretch}}div.output_area pre{margin:0;padding:0;border:0;vertical-align:baseline;color:#000;background-color:transparent;border-radius:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}
div.output_subarea{padding:.4em .4em 0 .4em;-webkit-box-flex:1;-moz-box-flex:1;box-flex:1;flex:1}
div.output_text{text-align:left;color:#000;line-height:1.21429em}
div.output_stderr{background:#fdd;}
div.output_latex{text-align:left}
div.output_javascript:empty{padding:0}
.js-error{color:#8b0000}
div.raw_input_container{font-family:monospace;padding-top:5px}
span.raw_input_prompt{}
input.raw_input{font-family:inherit;font-size:inherit;color:inherit;width:auto;vertical-align:baseline;padding:0 .25em;margin:0 .25em}
input.raw_input:focus{box-shadow:none}
p.p-space{margin-bottom:10px}
.rendered_html{color:#000;}.rendered_html em{font-style:italic}
.rendered_html strong{font-weight:bold}
.rendered_html u{text-decoration:underline}
.rendered_html :link{text-decoration:underline}
.rendered_html :visited{text-decoration:underline}
.rendered_html h1{font-size:185.7%;margin:1.08em 0 0 0;font-weight:bold;line-height:1}
.rendered_html h2{font-size:157.1%;margin:1.27em 0 0 0;font-weight:bold;line-height:1}
.rendered_html h3{font-size:128.6%;margin:1.55em 0 0 0;font-weight:bold;line-height:1}
.rendered_html h4{font-size:100%;margin:2em 0 0 0;font-weight:bold;line-height:1}
.rendered_html h5{font-size:100%;margin:2em 0 0 0;font-weight:bold;line-height:1;font-style:italic}
.rendered_html h6{font-size:100%;margin:2em 0 0 0;font-weight:bold;line-height:1;font-style:italic}
.rendered_html h1:first-child{margin-top:.538em}
.rendered_html h2:first-child{margin-top:.636em}
.rendered_html h3:first-child{margin-top:.777em}
.rendered_html h4:first-child{margin-top:1em}
.rendered_html h5:first-child{margin-top:1em}
.rendered_html h6:first-child{margin-top:1em}
.rendered_html ul{list-style:disc;margin:0 2em}
.rendered_html ul ul{list-style:square;margin:0 2em}
.rendered_html ul ul ul{list-style:circle;margin:0 2em}
.rendered_html ol{list-style:decimal;margin:0 2em}
.rendered_html ol ol{list-style:upper-alpha;margin:0 2em}
.rendered_html ol ol ol{list-style:lower-alpha;margin:0 2em}
.rendered_html ol ol ol ol{list-style:lower-roman;margin:0 2em}
.rendered_html ol ol ol ol ol{list-style:decimal;margin:0 2em}
.rendered_html *+ul{margin-top:1em}
.rendered_html *+ol{margin-top:1em}
.rendered_html hr{color:#000;background-color:#000}
.rendered_html pre{margin:1em 2em}
.rendered_html pre,.rendered_html code{border:0;background-color:#fff;color:#000;font-size:100%;padding:0}
.rendered_html blockquote{margin:1em 2em}
.rendered_html table{margin-left:auto;margin-right:auto;border:1px solid #000;border-collapse:collapse}
.rendered_html tr,.rendered_html th,.rendered_html td{border:1px solid #000;border-collapse:collapse;margin:1em 2em}
.rendered_html td,.rendered_html th{text-align:left;vertical-align:middle;padding:4px}
.rendered_html th{font-weight:bold}
.rendered_html *+table{margin-top:1em}
.rendered_html p{text-align:justify}
.rendered_html *+p{margin-top:1em}
.rendered_html img{display:block;margin-left:auto;margin-right:auto}
.rendered_html *+img{margin-top:1em}
div.text_cell{padding:5px 5px 5px 0;display:-webkit-box;-webkit-box-orient:horizontal;-webkit-box-align:stretch;display:-moz-box;-moz-box-orient:horizontal;-moz-box-align:stretch;display:box;box-orient:horizontal;box-align:stretch;display:flex;flex-direction:row;align-items:stretch}
@media (max-width:480px){div.text_cell&gt;div.prompt{display:none}}div.text_cell_render{outline:none;resize:none;width:inherit;border-style:none;padding:.5em .5em .5em .4em;color:#000}
a.anchor-link:link{text-decoration:none;padding:0 20px;visibility:hidden}
h1:hover .anchor-link,h2:hover .anchor-link,h3:hover .anchor-link,h4:hover .anchor-link,h5:hover .anchor-link,h6:hover .anchor-link{visibility:visible}
div.cell.text_cell.rendered{padding:0}
.widget-area{page-break-inside:avoid;display:-webkit-box;-webkit-box-orient:horizontal;-webkit-box-align:stretch;display:-moz-box;-moz-box-orient:horizontal;-moz-box-align:stretch;display:box;box-orient:horizontal;box-align:stretch;display:flex;flex-direction:row;align-items:stretch}.widget-area .widget-subarea{padding:.44em .4em .4em 1px;margin-left:6px;box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;display:-webkit-box;-webkit-box-orient:vertical;-webkit-box-align:stretch;display:-moz-box;-moz-box-orient:vertical;-moz-box-align:stretch;display:box;box-orient:vertical;box-align:stretch;display:flex;flex-direction:column;align-items:stretch;-webkit-box-flex:2;-moz-box-flex:2;box-flex:2;flex:2;-webkit-box-align:start;-moz-box-align:start;box-align:start;align-items:flex-start}
.widget-hlabel{min-width:10ex;padding-right:8px;padding-top:3px;text-align:right;vertical-align:text-top}
.widget-vlabel{padding-bottom:5px;text-align:center;vertical-align:text-bottom}
.widget-hreadout{padding-left:8px;padding-top:3px;text-align:left;vertical-align:text-top}
.widget-vreadout{padding-top:5px;text-align:center;vertical-align:text-top}
.slide-track{border:1px solid #ccc;background:#fff;border-radius:4px;}
.widget-hslider{padding-left:8px;padding-right:5px;overflow:visible;width:348px;height:5px;max-height:5px;margin-top:11px;margin-bottom:10px;border:1px solid #ccc;background:#fff;border-radius:4px;display:-webkit-box;-webkit-box-orient:horizontal;-webkit-box-align:stretch;display:-moz-box;-moz-box-orient:horizontal;-moz-box-align:stretch;display:box;box-orient:horizontal;box-align:stretch;display:flex;flex-direction:row;align-items:stretch}.widget-hslider .ui-slider{border:0 !important;background:none !important;display:-webkit-box;-webkit-box-orient:horizontal;-webkit-box-align:stretch;display:-moz-box;-moz-box-orient:horizontal;-moz-box-align:stretch;display:box;box-orient:horizontal;box-align:stretch;display:flex;flex-direction:row;align-items:stretch;-webkit-box-flex:1;-moz-box-flex:1;box-flex:1;flex:1}.widget-hslider .ui-slider .ui-slider-handle{width:14px !important;height:28px !important;margin-top:-8px !important}
.widget-vslider{padding-bottom:8px;overflow:visible;width:5px;max-width:5px;height:250px;margin-left:12px;border:1px solid #ccc;background:#fff;border-radius:4px;display:-webkit-box;-webkit-box-orient:vertical;-webkit-box-align:stretch;display:-moz-box;-moz-box-orient:vertical;-moz-box-align:stretch;display:box;box-orient:vertical;box-align:stretch;display:flex;flex-direction:column;align-items:stretch}.widget-vslider .ui-slider{border:0 !important;background:none !important;margin-left:-4px;margin-top:5px;display:-webkit-box;-webkit-box-orient:vertical;-webkit-box-align:stretch;display:-moz-box;-moz-box-orient:vertical;-moz-box-align:stretch;display:box;box-orient:vertical;box-align:stretch;display:flex;flex-direction:column;align-items:stretch;-webkit-box-flex:1;-moz-box-flex:1;box-flex:1;flex:1}.widget-vslider .ui-slider .ui-slider-handle{width:28px !important;height:14px !important;margin-left:-9px}
.widget-text{width:350px;margin:0 !important}
.widget-listbox{width:364px;margin-bottom:0}
.widget-numeric-text{width:150px;margin:0 !important}
.widget-progress{width:363px}.widget-progress .bar{-webkit-transition:none;-moz-transition:none;-ms-transition:none;-o-transition:none;transition:none}
.widget-combo-btn{min-width:138px;}
.widget-box{margin:5px;-webkit-box-pack:start;-moz-box-pack:start;box-pack:start;justify-content:flex-start;box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;-webkit-box-align:start;-moz-box-align:start;box-align:start;align-items:flex-start}
.widget-hbox{margin:5px;-webkit-box-pack:start;-moz-box-pack:start;box-pack:start;justify-content:flex-start;box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;-webkit-box-align:start;-moz-box-align:start;box-align:start;align-items:flex-start;display:-webkit-box;-webkit-box-orient:horizontal;-webkit-box-align:stretch;display:-moz-box;-moz-box-orient:horizontal;-moz-box-align:stretch;display:box;box-orient:horizontal;box-align:stretch;display:flex;flex-direction:row;align-items:stretch}
.widget-hbox-single{margin:5px;-webkit-box-pack:start;-moz-box-pack:start;box-pack:start;justify-content:flex-start;box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;-webkit-box-align:start;-moz-box-align:start;box-align:start;align-items:flex-start;display:-webkit-box;-webkit-box-orient:horizontal;-webkit-box-align:stretch;display:-moz-box;-moz-box-orient:horizontal;-moz-box-align:stretch;display:box;box-orient:horizontal;box-align:stretch;display:flex;flex-direction:row;align-items:stretch;height:30px}
.widget-vbox{margin:5px;-webkit-box-pack:start;-moz-box-pack:start;box-pack:start;justify-content:flex-start;box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;-webkit-box-align:start;-moz-box-align:start;box-align:start;align-items:flex-start;display:-webkit-box;-webkit-box-orient:vertical;-webkit-box-align:stretch;display:-moz-box;-moz-box-orient:vertical;-moz-box-align:stretch;display:box;box-orient:vertical;box-align:stretch;display:flex;flex-direction:column;align-items:stretch}
.widget-vbox-single{margin:5px;-webkit-box-pack:start;-moz-box-pack:start;box-pack:start;justify-content:flex-start;box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;-webkit-box-align:start;-moz-box-align:start;box-align:start;align-items:flex-start;display:-webkit-box;-webkit-box-orient:vertical;-webkit-box-align:stretch;display:-moz-box;-moz-box-orient:vertical;-moz-box-align:stretch;display:box;box-orient:vertical;box-align:stretch;display:flex;flex-direction:column;align-items:stretch;width:30px}
.widget-modal{overflow:hidden;position:absolute !important;top:0;left:0;margin-left:0 !important}
.widget-modal-body{max-height:none !important}
.widget-container{box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;-webkit-box-align:start;-moz-box-align:start;box-align:start;align-items:flex-start}
.widget-radio-box{display:-webkit-box;-webkit-box-orient:vertical;-webkit-box-align:stretch;display:-moz-box;-moz-box-orient:vertical;-moz-box-align:stretch;display:box;box-orient:vertical;box-align:stretch;display:flex;flex-direction:column;align-items:stretch;box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding-top:4px}
.docked-widget-modal{overflow:hidden;position:relative !important;top:0 !important;left:0 !important;margin-left:0 !important}
body{background-color:#fff}
body.notebook_app{overflow:hidden}
@media (max-width:767px){body.notebook_app{padding-left:0;padding-right:0}}span#notebook_name{height:1em;line-height:1em;padding:3px;border:none;font-size:146.5%}
div#notebook_panel{margin:0 0 0 0;padding:0;-webkit-box-shadow:0 -1px 10px rgba(0,0,0,0.1);-moz-box-shadow:0 -1px 10px rgba(0,0,0,0.1);box-shadow:0 -1px 10px rgba(0,0,0,0.1)}
div#notebook{font-size:14px;line-height:20px;overflow-y:scroll;overflow-x:auto;width:100%;padding:1em 0 1em 0;margin:0;border-top:1px solid #ababab;outline:none;box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box}
div.ui-widget-content{border:1px solid #ababab;outline:none}
pre.dialog{background-color:#f7f7f7;border:1px solid #ddd;border-radius:4px;padding:.4em;padding-left:2em}
p.dialog{padding:.2em}
pre,code,kbd,samp{white-space:pre-wrap}
#fonttest{font-family:monospace}
p{margin-bottom:0}
.end_space{height:200px}
.celltoolbar{border:thin solid #cfcfcf;border-bottom:none;background:#eee;border-radius:3px 3px 0 0;width:100%;-webkit-box-pack:end;height:22px;display:-webkit-box;-webkit-box-orient:horizontal;-webkit-box-align:stretch;display:-moz-box;-moz-box-orient:horizontal;-moz-box-align:stretch;display:box;box-orient:horizontal;box-align:stretch;display:flex;flex-direction:row;align-items:stretch;-webkit-box-direction:reverse;-moz-box-direction:reverse;box-direction:reverse;flex-direction:row-reverse}
.ctb_hideshow{display:none;vertical-align:bottom;padding-right:2px}
.celltoolbar&gt;div{padding-top:0}
.ctb_global_show .ctb_show.ctb_hideshow{display:block}
.ctb_global_show .ctb_show+.input_area,.ctb_global_show .ctb_show+div.text_cell_input{border-top-right-radius:0;border-top-left-radius:0}
.celltoolbar .button_container select{margin:10px;margin-top:1px;margin-bottom:0;padding:0;font-size:87%;width:auto;display:inline-block;height:18px;line-height:18px;vertical-align:top}
.celltoolbar label{display:inline-block;height:15px;line-height:15px;vertical-align:top}
.celltoolbar label span{font-size:85%}
.celltoolbar input[type=checkbox]{margin:0;margin-left:4px;margin-right:4px}
.celltoolbar .ui-button{border:none;vertical-align:top;height:20px;min-width:30px}
.completions{position:absolute;z-index:10;overflow:hidden;border:1px solid #ababab;border-radius:4px;-webkit-box-shadow:0 6px 10px -1px #adadad;-moz-box-shadow:0 6px 10px -1px #adadad;box-shadow:0 6px 10px -1px #adadad}
.completions select{background:#fff;outline:none;border:none;padding:0;margin:0;overflow:auto;font-family:monospace;font-size:110%;color:#000;width:auto}
.completions select option.context{color:#0064cd}
#menubar .navbar-inner{min-height:28px;border-top:1px;border-radius:0 0 4px 4px}
#menubar .navbar{margin-bottom:8px}
.nav-wrapper{border-bottom:1px solid #d4d4d4}
#menubar li.dropdown{line-height:12px}
i.menu-icon{padding-top:4px}
ul#help_menu li a{overflow:hidden;padding-right:2.2em}ul#help_menu li a i{margin-right:-1.2em}
#notification_area{z-index:10}
.indicator_area{color:#777;padding:4px 3px;margin:0;width:11px;z-index:10;text-align:center}
#kernel_indicator{margin-right:-16px}
.edit_mode_icon:before{font-family:FontAwesome;font-weight:normal;font-style:normal;text-decoration:inherit;-webkit-font-smoothing:antialiased;*margin-right:.3em;content:&quot;\f040&quot;}
.command_mode_icon:before{font-family:FontAwesome;font-weight:normal;font-style:normal;text-decoration:inherit;-webkit-font-smoothing:antialiased;*margin-right:.3em;content:' '}
.kernel_idle_icon:before{font-family:FontAwesome;font-weight:normal;font-style:normal;text-decoration:inherit;-webkit-font-smoothing:antialiased;*margin-right:.3em;content:&quot;\f10c&quot;}
.kernel_busy_icon:before{font-family:FontAwesome;font-weight:normal;font-style:normal;text-decoration:inherit;-webkit-font-smoothing:antialiased;*margin-right:.3em;content:&quot;\f111&quot;}
.notification_widget{color:#777;padding:1px 12px;margin:2px 4px;z-index:10;border:1px solid #ccc;border-radius:4px;background:rgba(240,240,240,0.5)}.notification_widget.span{padding-right:2px}
div#pager_splitter{height:8px}
#pager-container{position:relative;padding:15px 0}
div#pager{font-size:14px;line-height:20px;overflow:auto;display:none}div#pager pre{line-height:1.21429em;color:#000;background-color:#f7f7f7;padding:.4em}
.quickhelp{display:-webkit-box;-webkit-box-orient:horizontal;-webkit-box-align:stretch;display:-moz-box;-moz-box-orient:horizontal;-moz-box-align:stretch;display:box;box-orient:horizontal;box-align:stretch;display:flex;flex-direction:row;align-items:stretch}
.shortcut_key{display:inline-block;width:20ex;text-align:right;font-family:monospace}
.shortcut_descr{display:inline-block;-webkit-box-flex:1;-moz-box-flex:1;box-flex:1;flex:1}
span#save_widget{padding:0 5px;margin-top:12px}
span#checkpoint_status,span#autosave_status{font-size:small}
@media (max-width:767px){span#save_widget{font-size:small} span#checkpoint_status,span#autosave_status{font-size:x-small}}@media (max-width:767px){span#checkpoint_status,span#autosave_status{display:none}}@media (min-width:768px) and (max-width:979px){span#checkpoint_status{display:none} span#autosave_status{font-size:x-small}}.toolbar{padding:0 10px;margin-top:-5px}.toolbar select,.toolbar label{width:auto;height:26px;vertical-align:middle;margin-right:2px;margin-bottom:0;display:inline;font-size:92%;margin-left:.3em;margin-right:.3em;padding:0;padding-top:3px}
.toolbar .btn{padding:2px 8px}
.toolbar .btn-group{margin-top:0}
.toolbar-inner{border:none !important;-webkit-box-shadow:none !important;-moz-box-shadow:none !important;box-shadow:none !important}
#maintoolbar{margin-bottom:0}
@-moz-keyframes fadeOut{from{opacity:1} to{opacity:0}}@-webkit-keyframes fadeOut{from{opacity:1} to{opacity:0}}@-moz-keyframes fadeIn{from{opacity:0} to{opacity:1}}@-webkit-keyframes fadeIn{from{opacity:0} to{opacity:1}}.bigtooltip{overflow:auto;height:200px;-webkit-transition-property:height;-webkit-transition-duration:500ms;-moz-transition-property:height;-moz-transition-duration:500ms;transition-property:height;transition-duration:500ms}
.smalltooltip{-webkit-transition-property:height;-webkit-transition-duration:500ms;-moz-transition-property:height;-moz-transition-duration:500ms;transition-property:height;transition-duration:500ms;text-overflow:ellipsis;overflow:hidden;height:80px}
.tooltipbuttons{position:absolute;padding-right:15px;top:0;right:0}
.tooltiptext{padding-right:30px}
.ipython_tooltip{max-width:700px;-webkit-animation:fadeOut 400ms;-moz-animation:fadeOut 400ms;animation:fadeOut 400ms;-webkit-animation:fadeIn 400ms;-moz-animation:fadeIn 400ms;animation:fadeIn 400ms;vertical-align:middle;background-color:#f7f7f7;overflow:visible;border:#ababab 1px solid;outline:none;padding:3px;margin:0;padding-left:7px;font-family:monospace;min-height:50px;-moz-box-shadow:0 6px 10px -1px #adadad;-webkit-box-shadow:0 6px 10px -1px #adadad;box-shadow:0 6px 10px -1px #adadad;border-radius:4px;position:absolute;z-index:2}.ipython_tooltip a{float:right}
.ipython_tooltip .tooltiptext pre{border:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;font-size:100%;background-color:#f7f7f7}
.pretooltiparrow{left:0;margin:0;top:-16px;width:40px;height:16px;overflow:hidden;position:absolute}
.pretooltiparrow:before{background-color:#f7f7f7;border:1px #ababab solid;z-index:11;content:&quot;&quot;;position:absolute;left:15px;top:10px;width:25px;height:25px;-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);-ms-transform:rotate(45deg);-o-transform:rotate(45deg)}

    &lt;/style&gt;
&lt;style type=&quot;text/css&quot;&gt;
    .highlight .hll { background-color: #ffffcc }
.highlight  { background: #f8f8f8; }
.highlight .c { color: #408080; font-style: italic } /* Comment */
.highlight .err { border: 1px solid #FF0000 } /* Error */
.highlight .k { color: #008000; font-weight: bold } /* Keyword */
.highlight .o { color: #666666 } /* Operator */
.highlight .cm { color: #408080; font-style: italic } /* Comment.Multiline */
.highlight .cp { color: #BC7A00 } /* Comment.Preproc */
.highlight .c1 { color: #408080; font-style: italic } /* Comment.Single */
.highlight .cs { color: #408080; font-style: italic } /* Comment.Special */
.highlight .gd { color: #A00000 } /* Generic.Deleted */
.highlight .ge { font-style: italic } /* Generic.Emph */
.highlight .gr { color: #FF0000 } /* Generic.Error */
.highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */
.highlight .gi { color: #00A000 } /* Generic.Inserted */
.highlight .go { color: #888888 } /* Generic.Output */
.highlight .gp { color: #000080; font-weight: bold } /* Generic.Prompt */
.highlight .gs { font-weight: bold } /* Generic.Strong */
.highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */
.highlight .gt { color: #0044DD } /* Generic.Traceback */
.highlight .kc { color: #008000; font-weight: bold } /* Keyword.Constant */
.highlight .kd { color: #008000; font-weight: bold } /* Keyword.Declaration */
.highlight .kn { color: #008000; font-weight: bold } /* Keyword.Namespace */
.highlight .kp { color: #008000 } /* Keyword.Pseudo */
.highlight .kr { color: #008000; font-weight: bold } /* Keyword.Reserved */
.highlight .kt { color: #B00040 } /* Keyword.Type */
.highlight .m { color: #666666 } /* Literal.Number */
.highlight .s { color: #BA2121 } /* Literal.String */
.highlight .na { color: #7D9029 } /* Name.Attribute */
.highlight .nb { color: #008000 } /* Name.Builtin */
.highlight .nc { color: #0000FF; font-weight: bold } /* Name.Class */
.highlight .no { color: #880000 } /* Name.Constant */
.highlight .nd { color: #AA22FF } /* Name.Decorator */
.highlight .ni { color: #999999; font-weight: bold } /* Name.Entity */
.highlight .ne { color: #D2413A; font-weight: bold } /* Name.Exception */
.highlight .nf { color: #0000FF } /* Name.Function */
.highlight .nl { color: #A0A000 } /* Name.Label */
.highlight .nn { color: #0000FF; font-weight: bold } /* Name.Namespace */
.highlight .nt { color: #008000; font-weight: bold } /* Name.Tag */
.highlight .nv { color: #19177C } /* Name.Variable */
.highlight .ow { color: #AA22FF; font-weight: bold } /* Operator.Word */
.highlight .w { color: #bbbbbb } /* Text.Whitespace */
.highlight .mf { color: #666666 } /* Literal.Number.Float */
.highlight .mh { color: #666666 } /* Literal.Number.Hex */
.highlight .mi { color: #666666 } /* Literal.Number.Integer */
.highlight .mo { color: #666666 } /* Literal.Number.Oct */
.highlight .sb { color: #BA2121 } /* Literal.String.Backtick */
.highlight .sc { color: #BA2121 } /* Literal.String.Char */
.highlight .sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */
.highlight .s2 { color: #BA2121 } /* Literal.String.Double */
.highlight .se { color: #BB6622; font-weight: bold } /* Literal.String.Escape */
.highlight .sh { color: #BA2121 } /* Literal.String.Heredoc */
.highlight .si { color: #BB6688; font-weight: bold } /* Literal.String.Interpol */
.highlight .sx { color: #008000 } /* Literal.String.Other */
.highlight .sr { color: #BB6688 } /* Literal.String.Regex */
.highlight .s1 { color: #BA2121 } /* Literal.String.Single */
.highlight .ss { color: #19177C } /* Literal.String.Symbol */
.highlight .bp { color: #008000 } /* Name.Builtin.Pseudo */
.highlight .vc { color: #19177C } /* Name.Variable.Class */
.highlight .vg { color: #19177C } /* Name.Variable.Global */
.highlight .vi { color: #19177C } /* Name.Variable.Instance */
.highlight .il { color: #666666 } /* Literal.Number.Integer.Long */
    &lt;/style&gt;


&lt;style type=&quot;text/css&quot;&gt;
/* Overrides of notebook CSS for static HTML export */
body {
  overflow: visible;
  padding: 8px;
}

div#notebook {
  overflow: visible;
  border-top: none;
}

@media print {
  div.cell {
    display: block;
    page-break-inside: avoid;
  } 
  div.output_wrapper { 
    display: block;
    page-break-inside: avoid; 
  }
  div.output { 
    display: block;
    page-break-inside: avoid; 
  }
}
&lt;/style&gt;

&lt;!-- Custom stylesheet, it must be in the same directory as the html file --&gt;
&lt;link rel=&quot;stylesheet&quot; href=&quot;custom.css&quot;&gt;

&lt;!-- Loading mathjax macro --&gt;
&lt;!-- Load mathjax --&gt;
    &lt;script src=&quot;https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS_HTML&quot;&gt;&lt;/script&gt;
    &lt;!-- MathJax configuration --&gt;
    &lt;script type=&quot;text/x-mathjax-config&quot;&gt;
    MathJax.Hub.Config({
        tex2jax: {
            inlineMath: [ ['$','$'], [&quot;\\(&quot;,&quot;\\)&quot;] ],
            displayMath: [ ['$$','$$'], [&quot;\\[&quot;,&quot;\\]&quot;] ],
            processEscapes: true,
            processEnvironments: true
        },
        // Center justify equations in code and markdown cells. Elsewhere
        // we use CSS to left justify single line equations in code cells.
        displayAlign: 'center',
        &quot;HTML-CSS&quot;: {
            styles: {'.MathJax_Display': {&quot;margin&quot;: 0}},
            linebreaks: { automatic: true }
        }
    });
    &lt;/script&gt;
    &lt;!-- End of mathjax configuration --&gt;

&lt;/head&gt;
&lt;body&gt;
  &lt;div tabindex=&quot;-1&quot; id=&quot;notebook&quot; class=&quot;border-box-sizing&quot;&gt;
    &lt;div class=&quot;container&quot; id=&quot;notebook-container&quot;&gt;

&lt;div class=&quot;cell border-box-sizing text_cell rendered&quot;&gt;
&lt;div class=&quot;prompt input_prompt&quot;&gt;
&lt;/div&gt;
&lt;div class=&quot;inner_cell&quot;&gt;
&lt;div class=&quot;text_cell_render border-box-sizing rendered_html&quot;&gt;
&lt;p&gt;I recently heard this riddle from a friend at a campfire. I wasn&amp;#39;t smart enough to come up with the answer, 
but when it was explained to me I wanted to know how long it would take the prisoners to be released. 
In this post I&amp;#39;ll describe the riddle and the answer, and show how to use Python to set up an experiment, 
use a Monte Carlo simulator to run the experiment repeatedly, and briefly discuss some of the results.&lt;/p&gt;
&lt;h2 id=&quot;the-riddle&quot;&gt;The Riddle&lt;/h2&gt;
&lt;p&gt;There are 50 prisoners, and one prison keeper. The prisoners will be placed in separate cells, never 
able to communicate. Once per day, the prison keeper will randomly select one prisoner and take him 
into a room with two levers. The levers have two positions each: Up, and down. The prisoner may operate 
the levers however he wishes, then he must return to his cell. (The levers don&amp;#39;t do anything; they 
just represent a binary state.) The prisoners have one chance to indicate to the prison keeper whether 
all the prisoners have been in the lever-room. If they so indicate too early, they will never be released. 
If they&amp;#39;re correct (even if they&amp;#39;re late), they will be released immediately. The prisoners get one chance 
to meet prior to imprisonment, to discuss strategy. How can they ensure their release?&lt;/p&gt;
&lt;h2 id=&quot;the-answer&quot;&gt;The Answer&lt;/h2&gt;
&lt;p&gt;Only one lever is needed. Elect one prisoner to be a &amp;#39;counter.&amp;#39; When a prisoner enters the lever room and 
the lever is in the &amp;#39;down&amp;#39; position and he has never moved the lever, then and only then will he move the 
lever to the &amp;#39;up&amp;#39; position. Only the &amp;#39;counter&amp;#39; prisoner may return the lever to the &amp;#39;down&amp;#39; position, and 
each time he does so he increments a counter. When the counter reaches 50, he knows that all prisoners have 
been into the lever room at least once. He can then inform the prison guard, and all the prisoners will be 
released.&lt;/p&gt;
&lt;h2 id=&quot;a-solution-in-python&quot;&gt;A Solution in Python&lt;/h2&gt;
&lt;p&gt;I came up with the following model in Python to describe the prison scenario. There are probably better 
and more optimized way to represent this situation, but here&amp;#39;s the first one I came up with.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;cell border-box-sizing code_cell rendered&quot;&gt;
&lt;div class=&quot;input&quot;&gt;
&lt;div class=&quot;prompt input_prompt&quot;&gt;
In&amp;nbsp;[12]:
&lt;/div&gt;
&lt;div class=&quot;inner_cell&quot;&gt;
    &lt;div class=&quot;input_area&quot;&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span class=&quot;kn&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;random&lt;/span&gt;

&lt;span class=&quot;k&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;run_simulation&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;():&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;day_number&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt; 
    &lt;span class=&quot;n&quot;&gt;prisoner_designee&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt; &lt;span class=&quot;c&quot;&gt;# chosen by prisoners to be the official counter&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;counter&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt; &lt;span class=&quot;c&quot;&gt;# as tracked by the prisoner_designee&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;lever_position&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&amp;#39;down&amp;#39;&lt;/span&gt; &lt;span class=&quot;c&quot;&gt;# starting position of the lever&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;prisoners_who_have_operated_lever&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[]&lt;/span&gt;

    &lt;span class=&quot;k&quot;&gt;while&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;counter&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;50&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; 
        &lt;span class=&quot;n&quot;&gt;prisoner_number&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;random&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;randint&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;50&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;    &lt;span class=&quot;c&quot;&gt;# Select a prisoner&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;ow&quot;&gt;not&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;prisoner_number&lt;/span&gt; &lt;span class=&quot;ow&quot;&gt;in&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;prisoners_who_have_operated_lever&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;
            &lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;lever_position&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;==&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&amp;#39;down&amp;#39;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;
                &lt;span class=&quot;n&quot;&gt;prisoners_who_have_operated_lever&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;append&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;prisoner_number&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
                &lt;span class=&quot;n&quot;&gt;lever_position&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&amp;#39;up&amp;#39;&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;prisoner_number&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;==&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;prisoner_designee&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;    &lt;span class=&quot;c&quot;&gt;# If it&amp;#39;s the designee...&lt;/span&gt;
            &lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;lever_position&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;==&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&amp;#39;up&amp;#39;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;              &lt;span class=&quot;c&quot;&gt;# ...and the lever is up...&lt;/span&gt;
                &lt;span class=&quot;n&quot;&gt;lever_position&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&amp;#39;down&amp;#39;&lt;/span&gt;             &lt;span class=&quot;c&quot;&gt;# ...put the lever back down...&lt;/span&gt;
                &lt;span class=&quot;n&quot;&gt;counter&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;+=&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;                        &lt;span class=&quot;c&quot;&gt;# ...and increment the counter.&lt;/span&gt;
        &lt;span class=&quot;n&quot;&gt;day_number&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;+=&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;day_number&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;
&lt;div class=&quot;cell border-box-sizing code_cell rendered&quot;&gt;
&lt;div class=&quot;input&quot;&gt;
&lt;div class=&quot;prompt input_prompt&quot;&gt;
In&amp;nbsp;[13]:
&lt;/div&gt;
&lt;div class=&quot;inner_cell&quot;&gt;
    &lt;div class=&quot;input_area&quot;&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span class=&quot;n&quot;&gt;run_simulation&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div class=&quot;output_wrapper&quot;&gt;
&lt;div class=&quot;output&quot;&gt;


&lt;div class=&quot;output_area&quot;&gt;&lt;div class=&quot;prompt output_prompt&quot;&gt;
    Out[13]:&lt;/div&gt;


&lt;div class=&quot;output_text output_subarea output_pyout&quot;&gt;
&lt;pre&gt;
2691
&lt;/pre&gt;
&lt;/div&gt;

&lt;/div&gt;

&lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;
&lt;div class=&quot;cell border-box-sizing text_cell rendered&quot;&gt;
&lt;div class=&quot;prompt input_prompt&quot;&gt;
&lt;/div&gt;
&lt;div class=&quot;inner_cell&quot;&gt;
&lt;div class=&quot;text_cell_render border-box-sizing rendered_html&quot;&gt;
&lt;p&gt;The above code uses &amp;#39;random.randint&amp;#39; to generate a random integer. I used &lt;code&gt;if&lt;/code&gt; statements 
to describe the logic, and printed out the result.&lt;/p&gt;
&lt;p&gt;This means that for this particular run, it would have taken the prisoners (or rather, the prisoners&amp;#39; 
designated counter prisoner_designee) nearly 3000 days to count 50 &amp;#39;up&amp;#39; levers, proving that all prisoners 
had entered the lever room and ensuring their release. That&amp;#39;s like seven years(!).&lt;/p&gt;
&lt;p&gt;But this result depends on the order in which the prison keeper (in our case represented by random.randint) 
chose the prisoners. Running this code produces different results each time, usually 
in the range of 2500--3000 (days). To get a better picture of how long it would take a new group of 
prisoners to earn their release we&amp;#39;d have to simulate the whole range of possible outputs (or which 
there are nearly infinitely many) But I don&amp;#39;t want to run this manually dozens of times and tabulate 
the results by hand; I want to make the code run the simulation thousands of times, with random inputs 
each time, and then aggregate the results. That&amp;#39;s the 
&lt;a href=&quot;http://en.wikipedia.org/wiki/Monte_Carlo_method&quot;&gt;Monte Carlo method&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;implementing-the-monte-carlo-method&quot;&gt;Implementing the Monte Carlo method&lt;/h2&gt;
&lt;p&gt;We&amp;#39;re going to use a loop to run the experiment. Below, we use a &lt;code&gt;while&lt;/code&gt; loop to run the simulation 
1000 times, storing the results in the list called &lt;code&gt;simulation_results&lt;/code&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;cell border-box-sizing code_cell rendered&quot;&gt;
&lt;div class=&quot;input&quot;&gt;
&lt;div class=&quot;prompt input_prompt&quot;&gt;
In&amp;nbsp;[14]:
&lt;/div&gt;
&lt;div class=&quot;inner_cell&quot;&gt;
    &lt;div class=&quot;input_area&quot;&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span class=&quot;n&quot;&gt;simulation_results&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[]&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;simulations&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt; 
&lt;span class=&quot;k&quot;&gt;while&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;simulations&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;100&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;simulation_results&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;append&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;run_simulation&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;())&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;simulations&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;+=&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;print&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;simulation_results&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div class=&quot;output_wrapper&quot;&gt;
&lt;div class=&quot;output&quot;&gt;


&lt;div class=&quot;output_area&quot;&gt;&lt;div class=&quot;prompt&quot;&gt;&lt;/div&gt;
&lt;div class=&quot;output_subarea output_stream output_stdout output_text&quot;&gt;
&lt;pre&gt;
[2412, 1853, 2175, 2548, 2231, 1875, 2681, 2559, 3088, 2807, 2399, 2986, 2961, 2587, 2507, 2479, 2617, 2508, 2729, 2998, 2615, 2189, 2682, 2044, 3117, 2732, 2562, 2559, 2583, 2365, 2870, 2814, 2834, 2092, 2787, 2956, 3226, 2677, 2904, 3013, 2816, 2759, 2151, 2445, 2468, 3079, 2596, 2994, 2745, 2850, 2740, 2755, 2114, 2595, 2444, 3172, 2983, 2852, 2278, 2267, 2707, 3429, 2960, 2629, 2495, 3711, 2255, 2623, 2554, 2204, 2862, 2416, 2450, 1887, 2281, 2212, 3097, 2758, 2760, 2564, 3212, 3252, 2600, 2246, 2497, 2837, 2624, 2133, 2329, 2586, 2065, 2715, 3171, 3117, 2633, 2857, 2535, 2575, 2496, 2588]

&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;
&lt;div class=&quot;cell border-box-sizing text_cell rendered&quot;&gt;
&lt;div class=&quot;prompt input_prompt&quot;&gt;
&lt;/div&gt;
&lt;div class=&quot;inner_cell&quot;&gt;
&lt;div class=&quot;text_cell_render border-box-sizing rendered_html&quot;&gt;
&lt;p&gt;The last step in the Monte Carlo method is to aggregate and interpret the results. In this case, that 
means taking the average of all the simulation runs. A simple way to do this with lists is to sum 
the list:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;average = sum(list)/len(list)`
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;A more elegant way is to use Numpy&amp;#39;s built-in &lt;code&gt;mean&lt;/code&gt; function, 
which requires first converting the &lt;code&gt;list&lt;/code&gt; to a Numpy &lt;code&gt;array&lt;/code&gt;:&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;cell border-box-sizing code_cell rendered&quot;&gt;
&lt;div class=&quot;input&quot;&gt;
&lt;div class=&quot;prompt input_prompt&quot;&gt;
In&amp;nbsp;[15]:
&lt;/div&gt;
&lt;div class=&quot;inner_cell&quot;&gt;
    &lt;div class=&quot;input_area&quot;&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span class=&quot;kn&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;numpy&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;array&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;numpy&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;array&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;simulation_results&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;array&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;mean&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div class=&quot;output_wrapper&quot;&gt;
&lt;div class=&quot;output&quot;&gt;


&lt;div class=&quot;output_area&quot;&gt;&lt;div class=&quot;prompt output_prompt&quot;&gt;
    Out[15]:&lt;/div&gt;


&lt;div class=&quot;output_text output_subarea output_pyout&quot;&gt;
&lt;pre&gt;
2636.46
&lt;/pre&gt;
&lt;/div&gt;

&lt;/div&gt;

&lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;
&lt;div class=&quot;cell border-box-sizing text_cell rendered&quot;&gt;
&lt;div class=&quot;prompt input_prompt&quot;&gt;
&lt;/div&gt;
&lt;div class=&quot;inner_cell&quot;&gt;
&lt;div class=&quot;text_cell_render border-box-sizing rendered_html&quot;&gt;
&lt;p&gt;Now, instead of one experiment, this result represents the average of 100 experiments.&lt;/p&gt;
&lt;h2 id=&quot;so-what-&quot;&gt;So what?&lt;/h2&gt;
&lt;p&gt;So on average, it would take 50 prisoners in this scenario 2636 days to earn their release. 
Cool. Neat. But this raises so many more questions: Is this number related to the probability 
of 1/50)x(1/50)? Where is this average value in the range of values yielded from the 100 
results? If we halve the number of prisoners, will the number of days go down by half? 
What does a histogram of the results look like? The answers, as well as a more in-depth 
discussion of other statistics, will be in the next post.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;cell border-box-sizing code_cell rendered&quot;&gt;
&lt;div class=&quot;input&quot;&gt;
&lt;div class=&quot;prompt input_prompt&quot;&gt;
In&amp;nbsp;[]:
&lt;/div&gt;
&lt;div class=&quot;inner_cell&quot;&gt;
    &lt;div class=&quot;input_area&quot;&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt; 
&lt;/pre&gt;&lt;/div&gt;

&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/body&gt;
&lt;/html&gt;
</description>
        <pubDate>Mon, 15 Oct 2012 23:25:51 +0000</pubDate>
        <link>http://andrewsturges.com/blog/python/2012/10/15/solving-a-prisoner-espape-riddle.html</link>
        <guid isPermaLink="true">http://andrewsturges.com/blog/python/2012/10/15/solving-a-prisoner-espape-riddle.html</guid>
        
        
        <category>python</category>
        
      </item>
    
      <item>
        <title>Installing Twitter Bootstrap in Flask 0.9</title>
        <description>&lt;p&gt;I have a small web application called &amp;#39;dispatchtool&amp;#39; written in the Python microframework 
&lt;a href=&quot;http://flask.pocoo.org/&quot;&gt;Flask&lt;/a&gt;.
I want to use Twitter&amp;#39;s &lt;a href=&quot;http://twitter.github.com/bootstrap/&quot;&gt;Bootstrap CSS&lt;/a&gt;.
In this post I will explain how to do this.&lt;/p&gt;

&lt;p&gt;I am running Ubuntu 12.04, using Python 2.7, and Flask 0.9.
This tutorial assumes you&amp;#39;ve got a basic Flask application up and running,
and that you can view the development version on your local machine.
It also assumes that you&amp;#39;re using &lt;a href=&quot;http://flask.pocoo.org/docs/tutorial/templates/&quot;&gt;templates&lt;/a&gt;.
(This is important!) &lt;/p&gt;

&lt;h2 id=&quot;step-1-get-a-basic-css-file-working&quot;&gt;Step 1: Get a basic CSS file working&lt;/h2&gt;

&lt;p&gt;Before dealing with Bootstrap, we want to ensure sure that the application can
correctly find and use a simple test CSS file.
To do this, first, create a new directory in your Flask application&amp;#39;s root directory called &amp;#39;static&amp;#39;.
My app is called &amp;#39;dispatchtool&amp;#39;, so I create &amp;#39;static&amp;#39; inside the &amp;#39;dispatchtool&amp;#39; directory:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;&lt;span class=&quot;gp&quot;&gt;$ &lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;cd &lt;/span&gt;dispatchtool
&lt;span class=&quot;gp&quot;&gt;$ &lt;/span&gt;mkdir static
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Next, in that new directory, create the test css file. I&amp;#39;ll call mine &amp;#39;test.css&amp;#39;.
Add some simple style that will be loud and obvious.
It&amp;#39;s only purpose will be to ensure that we can get the application to see this file and use it.
Here&amp;#39;s my &amp;#39;test.css&amp;#39;:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-css&quot; data-lang=&quot;css&quot;&gt;&lt;span class=&quot;nt&quot;&gt;h1&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;color&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;no&quot;&gt;red&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;nt&quot;&gt;p&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;color&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;no&quot;&gt;green&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Of course, make sure that your app includes an &lt;code&gt;&amp;lt;h1&amp;gt;&lt;/code&gt; tag and a &lt;code&gt;&amp;lt;p&amp;gt;&lt;/code&gt; tag somewhere,
or else these styles won&amp;#39;t be applied, even if the stylesheet is properly set up.&lt;/p&gt;

&lt;p&gt;Now that we&amp;#39;ve got our test css file in the right place, we need to tell Flask how to find it.
CSS files are always linked to HTML pages in the &lt;code&gt;&amp;lt;head&amp;gt;&lt;/code&gt; section of
each page using the &lt;code&gt;&amp;lt;link … /&amp;gt;&lt;/code&gt; tag. In my application, I&amp;#39;ll add the following tag:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-html&quot; data-lang=&quot;html&quot;&gt;&lt;span class=&quot;nt&quot;&gt;&amp;lt;link&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;type=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;text/css&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;rel=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;stylesheet&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;href=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'/static/test.css'&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Here&amp;#39;s the top of my page, for context:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-html&quot; data-lang=&quot;html&quot;&gt;&lt;span class=&quot;cp&quot;&gt;&amp;lt;!DOCTYPE html&amp;gt;&lt;/span&gt;
&lt;span class=&quot;nt&quot;&gt;&amp;lt;html&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;lang=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;en&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span class=&quot;nt&quot;&gt;&amp;lt;head&amp;gt;&lt;/span&gt;
&lt;span class=&quot;nt&quot;&gt;&amp;lt;title&amp;gt;&lt;/span&gt;The Demand Response Dispatch Tool&lt;span class=&quot;nt&quot;&gt;&amp;lt;/title&amp;gt;&lt;/span&gt;
&lt;span class=&quot;nt&quot;&gt;&amp;lt;link&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;type=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;text/css&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;rel=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;stylesheet&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;href=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'static/test.css'&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;/&amp;gt;&lt;/span&gt;
&lt;span class=&quot;nt&quot;&gt;&amp;lt;/head&amp;gt;&lt;/span&gt;
&lt;span class=&quot;nt&quot;&gt;&amp;lt;body&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Now open up your page in a browser, and see if the styles were applied.
In my case, it suddenly looks like Christmas. If nothing changed, look at the source (ctrl-U)
and click on the link you created to the stylesheet. That will show where Flask thinks the CSS file is. &lt;/p&gt;

&lt;p&gt;Even though that&amp;#39;s working, we&amp;#39;re not quite done yet.
Web application frameworks like Flask have a better way of creating links to
static things like CSS files.&lt;/p&gt;

&lt;p&gt;In Flask, it&amp;#39;s a method called &lt;a href=&quot;http://flask.pocoo.org/docs/api/?highlight=url_for#flask.url_for&quot;&gt;url_for()&lt;/a&gt;.
Methods like this make your application more flexible, allowing you to move 
around pages without breaking links to your CSS files.
So now, replace the value of the &lt;code&gt;href&lt;/code&gt; attribute in the &lt;code&gt;&amp;lt;link&amp;gt;&lt;/code&gt; tag with the following line:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-python&quot; data-lang=&quot;python&quot;&gt;
&lt;span class=&quot;p&quot;&gt;{{&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;url_for&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'static'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;filename&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'test.css'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;}}&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;The double braces tell Flask a) that the contents are to parsed as Python code and b) to 
render the result directly into the HTML output.&lt;/p&gt;

&lt;p&gt;Now the whole link tag should look like this:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-html&quot; data-lang=&quot;html&quot;&gt;
&lt;span class=&quot;nt&quot;&gt;&amp;lt;link&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;type=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;text/css&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;rel=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;stylesheet&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;href=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;{{ url_for('static', filename='test.css') }}&quot;&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;/&amp;gt;&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Now save the file and refresh your browser page.
If that still renders your page using your test CSS file, then we&amp;#39;re most of the way done. 
If it doesn&amp;#39;t, check the page source, and ensure that the &lt;code&gt;&amp;lt;link&amp;gt;&lt;/code&gt; tag is pointing to the right place.&lt;/p&gt;

&lt;h2 id=&quot;step-2-download-and-quot-install-quot-twitter-bootstrap&quot;&gt;Step 2: Download and &amp;quot;install&amp;quot; Twitter Bootstrap&lt;/h2&gt;

&lt;p&gt;The next step is simple and short.
We need to get the Bootstrap files (download) and put them in the right place (install). 
Normal people will navigate to &lt;a href=&quot;http://twitter.github.com/bootstrap/getting-started.html&quot;&gt;the Bootstrap page&lt;/a&gt;,
click &lt;a href=&quot;http://twitter.github.com/bootstrap/assets/bootstrap.zip&quot;&gt;the link&lt;/a&gt;,
and unzip the files, then put those files (as-is, with no changes to the directory structure)
in the &amp;#39;static&amp;#39; folder that we created earlier:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;&lt;span class=&quot;gp&quot;&gt;$ &lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;cd&lt;/span&gt; ../static/
&lt;span class=&quot;gp&quot;&gt;$ &lt;/span&gt;wget http://twitter.github.com/bootstrap/assets/bootstrap.zip
&lt;span class=&quot;gp&quot;&gt;$ &lt;/span&gt;unzip bootstrap.zip
&lt;span class=&quot;gp&quot;&gt;$ &lt;/span&gt;rm -r bootstrap.zip
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Whichever way you do it, you should now have a folder called &amp;#39;bootstrap&amp;#39; inside your &amp;#39;static&amp;#39; folder.
That&amp;#39;s it. You have downloaded and &amp;#39;installed&amp;#39; Bootstrap.&lt;/p&gt;

&lt;h2 id=&quot;step-3-link-to-the-boostrap-css-stylesheet&quot;&gt;Step 3: Link to the boostrap.css stylesheet&lt;/h2&gt;

&lt;p&gt;The main Bootstrap stylesheet is in bootstrap/css/, and it&amp;#39;s called &amp;#39;bootstrap.css&amp;#39;. 
We want to change our link from &amp;#39;test.css&amp;#39; to this file, so update your &lt;code&gt;&amp;lt;link&amp;gt;&lt;/code&gt; tag as follows:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-html&quot; data-lang=&quot;html&quot;&gt;
&lt;span class=&quot;nt&quot;&gt;&amp;lt;link&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;type=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;text/css&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;rel=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;stylesheet&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;href=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;{{ url_for('static', filename='bootstrap/css/bootstrap.css') }}&quot;&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;/&amp;gt;&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;That&amp;#39;s it. If you reload your page, you should see at least some changes reflecting Twitter&amp;#39;s style. 
(When you go to production, you should switch from the general &amp;#39;bootstrap.css&amp;#39; to the 
minified &amp;#39;bootstrap.min.css&amp;#39; to save bandwidth.)&lt;/p&gt;

&lt;h2 id=&quot;step-4-update-your-html-to-hook-into-the-bootstrap-styles&quot;&gt;Step 4: Update your HTML to hook into the Bootstrap styles&lt;/h2&gt;

&lt;p&gt;Now that we&amp;#39;ve got our Flask app properly linking to the Boostrap css file,
all that remains is to use it.
That means we have to look at the boostrap.css file, and see what classes and ids we 
need to assign to our HTML elements. 
I&amp;#39;ll go through two quick examples.&lt;/p&gt;

&lt;h3 id=&quot;container&quot;&gt;Container&lt;/h3&gt;

&lt;p&gt;The most important is probably to use Bootstrap&amp;#39;s &amp;quot;container&amp;quot; class. 
Simply add the class &amp;#39;container&amp;#39; to the &lt;code&gt;&lt;body&gt;&lt;/code&gt; tag:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-html&quot; data-lang=&quot;html&quot;&gt;&lt;span class=&quot;nt&quot;&gt;&amp;lt;body&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;class=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;container&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;When you refresh the page, you should see your content contained in a 940 pixel-wide column. &lt;/p&gt;

&lt;h3 id=&quot;the-hero-unit&quot;&gt;The Hero Unit&lt;/h3&gt;

&lt;p&gt;The most famous Bootstrap style is probably the &amp;quot;hero unit&amp;quot;. 
To see it, just add the class &amp;#39;hero-unit&amp;#39; to any block-level element: &lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-html&quot; data-lang=&quot;html&quot;&gt;&lt;span class=&quot;nt&quot;&gt;&amp;lt;div&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;class=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;hero-unit&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&amp;lt;p&amp;gt;&lt;/span&gt;Don't abuse this style!&lt;span class=&quot;nt&quot;&gt;&amp;lt;/p&amp;gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&quot;conclusion&quot;&gt;Conclusion&lt;/h2&gt;

&lt;p&gt;We walked through how to set up general CSS file in a Flask app, 
then how to acquire and link Bootstrap to the same Flask app. 
The next step is to check out the 
&lt;a href=&quot;http://twitter.github.com/bootstrap/scaffolding.html&quot;&gt;Bootstrap Documentation&lt;/a&gt;,
and start choosing the styles you want to use. Thanks for reading!&lt;/p&gt;
</description>
        <pubDate>Thu, 09 Aug 2012 19:53:18 +0000</pubDate>
        <link>http://andrewsturges.com/blog/bootstrap/flask/2012/08/09/installing-twitter-bootstrap-in-flask-0.9.html</link>
        <guid isPermaLink="true">http://andrewsturges.com/blog/bootstrap/flask/2012/08/09/installing-twitter-bootstrap-in-flask-0.9.html</guid>
        
        
        <category>bootstrap</category>
        
        <category>flask</category>
        
      </item>
    
      <item>
        <title>Basic unit testing in Python</title>
        <description>&lt;p&gt;I have a Python 3.2 program that&amp;#39;s in a working state, but I never wrote any tests for it. 
Now, I want to go back and provide some code coverage so that as I go back to refactor and add functionality, 
I&amp;#39;ll be more certain I&amp;#39;m not breaking anything. 
This is a fairly common case--you have existing code, and you want to write some tests for it.&lt;/p&gt;

&lt;h2 id=&quot;environment&quot;&gt;Environment&lt;/h2&gt;

&lt;p&gt;I&amp;#39;m running Python 3.2 in a Windows 7 environment, using the IDLE Python code editor. 
I typically run code directly from IDLE by using the F5 key. 
Because of how IDLE invokes the Python interpreter, some of the code examples below will run 
differently depending on whether code is invoked from IDLE or from the command line.
To enable Python from the Windows command line, it must be added to the PATH. 
To do this, open a command line window (Start -&amp;gt; Accessories -&amp;gt; Command Line) and type path &lt;path to your python installation&gt;. 
For example, since my python 3.2 installation can be found at C:\Python32, I issue the following path command:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;path C:&lt;span class=&quot;se&quot;&gt;\P&lt;/span&gt;ython32
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;This adds the Python interpreter to the path so it can be invoked from within your Python project directory. 
Note that it only changes the path for this one command line session, so if you close and 
re-open the command line window you&amp;#39;ll have to re-issue the path command.&lt;/p&gt;

&lt;h2 id=&quot;python-39-s-unittest-module&quot;&gt;Python&amp;#39;s UnitTest Module&lt;/h2&gt;

&lt;p&gt;The first issue is what testing framework to use. I&amp;#39;m going to use Python&amp;#39;s built-in module called UnitTest. 
It&amp;#39;s a one-stop shop for all the testing most pure-Python programs will need. 
More advanced testing frameworks are available. The two most popular seem to be py.test and nose. 
I want to explore testing in a more &amp;#39;raw&amp;#39; state, so I&amp;#39;ll save these frameworks until I&amp;#39;m comfortable using unittest on its own.&lt;/p&gt;

&lt;h2 id=&quot;writing-testable-code&quot;&gt;Writing Testable Code&lt;/h2&gt;

&lt;p&gt;It&amp;#39;s easiest to write a test for a small, discreet bit of code that accomplishes a well-defined task. 
Python best practices dictate that code be broken into small functions that perform one task at one level of abstraction. 
If you follow this advice and write your code using many small functions that each perform one well-defined task,
 then those functions will be easy to test. 
If instead you have written large functions that combine many steps,
 then first consider breaking these functions down into smaller ones.&lt;/p&gt;

&lt;h2 id=&quot;pick-a-small-function-to-test&quot;&gt;Pick a small function to test&lt;/h2&gt;

&lt;p&gt;Start small by picking a short, well-understood function that does something simple. 
I&amp;#39;ll use a function that takes one argument, uses an if statement to choose a &amp;quot;rate&amp;quot;, and returns that rate:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-python&quot; data-lang=&quot;python&quot;&gt;&lt;span class=&quot;k&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;choose_renovation_rate&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;bp&quot;&gt;self&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;years_since_last_renovation&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;):&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;years_since_last_renovation&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;7&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;
        &lt;span class=&quot;n&quot;&gt;rate&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;elif&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;years_since_last_renovation&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;15&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;
        &lt;span class=&quot;n&quot;&gt;rate&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;mf&quot;&gt;0.01&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;elif&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;years_since_last_renovation&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;25&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;
        &lt;span class=&quot;n&quot;&gt;rate&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;mf&quot;&gt;0.05&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;elif&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;years_since_last_renovation&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;50&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;
        &lt;span class=&quot;n&quot;&gt;rate&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;mf&quot;&gt;0.07&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;else&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;
        &lt;span class=&quot;n&quot;&gt;rate&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;mf&quot;&gt;0.1&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;rate&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&quot;create-a-new-file-to-hold-the-test-code&quot;&gt;Create a new file to hold the test code&lt;/h2&gt;

&lt;p&gt;To get started with the testing itself, create a new file,
 and for now make sure it&amp;#39;s in the same directory as the code you wish to test. 
I called mine unit_tests.py. 
Import the testunit module, and start a new class that describes what you will be testing. 
This new class will be a sub-class of unittest.TestCase. This class will hold several small test cases.&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-python&quot; data-lang=&quot;python&quot;&gt;&lt;span class=&quot;kn&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;unittest&lt;/span&gt;

&lt;span class=&quot;k&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;TestRateFunctions&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;unittest&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;TestCase&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;):&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;pass&lt;/span&gt;
    &lt;span class=&quot;c&quot;&gt;# test cases go here&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&quot;write-a-test-function-title-and-description&quot;&gt;Write a test function title and description&lt;/h2&gt;

&lt;p&gt;Next, inside the TestRateFunctions class I just defined, I will define a function and describe in words what it will test. 
The function names, by convention and to allow the testing machinery to run properly, should start with test_. 
For the moment, I will use a single assertTrue statement and pass it the condition True,
 just to see if everything is working.&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-python&quot; data-lang=&quot;python&quot;&gt;&lt;span class=&quot;kn&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;unittest&lt;/span&gt;

&lt;span class=&quot;k&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;TestRateFunctions&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;unittest&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;TestCase&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;):&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;test_renovation_chooser_should_return_correct_rate&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;bp&quot;&gt;self&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;):&lt;/span&gt;
        &lt;span class=&quot;c&quot;&gt;# This function should return the correct renovation rate&lt;/span&gt;
        &lt;span class=&quot;bp&quot;&gt;self&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;assertTrue&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;bp&quot;&gt;True&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;This is now a trivial, but functioning test.&lt;/p&gt;

&lt;h2 id=&quot;run-the-test&quot;&gt;Run the test&lt;/h2&gt;

&lt;p&gt;To actually run the test, we need to add one line to the end of the file: unittest.main(). 
With this line in place, we can simply call this test one of two ways.&lt;/p&gt;

&lt;h3 id=&quot;via-the-command-line&quot;&gt;Via the command line&lt;/h3&gt;

&lt;p&gt;After issuing the PATH commands as discussed under &amp;quot;Environment&amp;quot; above,
 in the command line terminal navigate to the directory where you created the file and call it:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;C:&lt;span class=&quot;se&quot;&gt;\l&lt;/span&gt;ighting_floor_space_stock_model&amp;gt;python unit_tests.py
.
----------------------------------------------------------------------
Ran 1 &lt;span class=&quot;nb&quot;&gt;test &lt;/span&gt;&lt;span class=&quot;k&quot;&gt;in &lt;/span&gt;0.000s

OK
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;The output consists of&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;A period. This represents one test, which in this case was test_renovation_chooser.
With more tests written, these dots acts as a progress indicator for the test suite.&lt;/li&gt;
&lt;li&gt;A long line of hyphens. This is just a visual separator representing the end of the execution of tests.&lt;/li&gt;
&lt;li&gt;A report, which in this case &lt;code&gt;Ran 1 test in 0.000s&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;The phrase &lt;code&gt;OK&lt;/code&gt;. We only get this if all tests pass.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3 id=&quot;via-idle&quot;&gt;Via IDLE&lt;/h3&gt;

&lt;p&gt;In the IDLE code editor, you can just press F5 to run the code directly. This produces the following output:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;.
----------------------------------------------------------------------
Ran 1 &lt;span class=&quot;nb&quot;&gt;test &lt;/span&gt;&lt;span class=&quot;k&quot;&gt;in &lt;/span&gt;0.004s

OK
Traceback &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;most recent call last&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;:
  File &lt;span class=&quot;s2&quot;&gt;&quot;C:&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\l&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;ighting_floor_space_stock_model&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\u&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;nit_tests.py&quot;&lt;/span&gt;, line 8, &lt;span class=&quot;k&quot;&gt;in&lt;/span&gt; &amp;lt;module&amp;gt;
    unittest.main&lt;span class=&quot;o&quot;&gt;()&lt;/span&gt;
  File &lt;span class=&quot;s2&quot;&gt;&quot;C:&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\P&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;ython32&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\l&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;ib&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\u&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;nittest&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\m&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;ain.py&quot;&lt;/span&gt;, line 124, &lt;span class=&quot;k&quot;&gt;in &lt;/span&gt;__init__
    self.runTests&lt;span class=&quot;o&quot;&gt;()&lt;/span&gt;
  File &lt;span class=&quot;s2&quot;&gt;&quot;C:&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\P&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;ython32&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\l&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;ib&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\u&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;nittest&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\m&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;ain.py&quot;&lt;/span&gt;, line 272, &lt;span class=&quot;k&quot;&gt;in &lt;/span&gt;runTests
    sys.exit&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;not self.result.wasSuccessful&lt;span class=&quot;o&quot;&gt;())&lt;/span&gt;
SystemExit: False
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;As you can see, when we ran the test suite from inside IDLE,
 we got the same successful output telling us the test passed (OK!),
 but it&amp;#39;s followed by an ugly error and a traceback. 
The error is because unittest wants to &amp;quot;exit&amp;quot; but it can&amp;#39;t, because the default IDLE behavior is to keep running. &lt;/p&gt;

&lt;p&gt;There are &lt;strong&gt;two simple ways&lt;/strong&gt; around this error:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;One solution is to just catch the error and pass around it. Simply change the last line to following:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-python&quot; data-lang=&quot;python&quot;&gt;&lt;span class=&quot;k&quot;&gt;try&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;unittest&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;main&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;except&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;SystemExit&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;pass&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Alternatively, we could keep the first line as-is (without adding the try/except 
statements or the second line) and just add an argument to the original line, as follows:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-python&quot; data-lang=&quot;python&quot;&gt;&lt;span class=&quot;n&quot;&gt;unittest&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;main&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;exit&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;bp&quot;&gt;False&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;With either of those two modifications in place, the test suite should run properly from within IDLE.&lt;/p&gt;

&lt;h2 id=&quot;now-test-your-function&quot;&gt;Now Test Your Function&lt;/h2&gt;

&lt;p&gt;Now that we&amp;#39;re sure we&amp;#39;ve got all the machinery operating correctly 
(&lt;code&gt;import unittest&lt;/code&gt;, create a subclass, define a test case starting with test_,
 make sure it runs properly), we have to write code that actually tests our function.&lt;/p&gt;

&lt;p&gt;In order to call the function in question (&lt;code&gt;choose_renovation_rate()&lt;/code&gt;) inside the testing 
function (&lt;code&gt;test_renovation_chooser_should_return_correct_rate&lt;/code&gt;),
we need to first make sure its parent class is available. 
In this case, &lt;code&gt;choose_renovation_rate()&lt;/code&gt; is a function inside the class &lt;code&gt;FloorSpace()&lt;/code&gt;,
so first I need to import the FloorSpare class with from &lt;code&gt;floor_space import *&lt;/code&gt;. 
Then I can create a new variable called &lt;code&gt;self.rate&lt;/code&gt; that holds the result of the 
&lt;code&gt;FloorSpace.choose_renovation_rate&lt;/code&gt; function. 
The whole file now appears as follows, using &lt;code&gt;assertTrue&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-python&quot; data-lang=&quot;python&quot;&gt;&lt;span class=&quot;kn&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;unittest&lt;/span&gt;
&lt;span class=&quot;kn&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;floor_space&lt;/span&gt; &lt;span class=&quot;kn&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;FloorSpace&lt;/span&gt;

&lt;span class=&quot;k&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;TestRateFunctions&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;unittest&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;TestCase&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;):&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;test_renovation_chooser_should_return_correct_rate&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;bp&quot;&gt;self&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;):&lt;/span&gt;
        &lt;span class=&quot;c&quot;&gt;# A 2-year old building has a 0% chance of renovation:&lt;/span&gt;
        &lt;span class=&quot;bp&quot;&gt;self&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;rate&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;FloorSpace&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;choose_renovation_rate&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;bp&quot;&gt;self&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
        &lt;span class=&quot;bp&quot;&gt;self&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;assertTrue&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;bp&quot;&gt;self&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;rate&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;==&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;

&lt;span class=&quot;n&quot;&gt;unittest&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;main&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;exit&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;bp&quot;&gt;False&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&quot;a-quick-refactor&quot;&gt;A Quick Refactor&lt;/h2&gt;

&lt;p&gt;Let&amp;#39;s make one short change. Since we&amp;#39;re testing for equality (using the == operator),
 we could use the assertEqual function instead of assertTrue. 
Furthermore, we could a string argument to the end of the function that will get 
printed if the test fails, allowing us to pass more detailed and useful information to the user. 
Change the last line of the test function as follows:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-python&quot; data-lang=&quot;python&quot;&gt;&lt;span class=&quot;bp&quot;&gt;self&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;assertEqual&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;bp&quot;&gt;self&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;rate&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;2-year-old building should have a 0&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;% &lt;/span&gt;&lt;span class=&quot;s&quot;&gt;renovation rate.&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;This is such a simple test method that the message is nearly redunant to just reading the code,
 but it serves to illustrate the method of adding an information string to the assert method.&lt;/p&gt;

&lt;h2 id=&quot;refining-the-test&quot;&gt;Refining the Test&lt;/h2&gt;

&lt;p&gt;Consider again the function we&amp;#39;re testing:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-python&quot; data-lang=&quot;python&quot;&gt;&lt;span class=&quot;k&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;choose_renovation_rate&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;bp&quot;&gt;self&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;years_since_last_renovation&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;):&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;years_since_last_renovation&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;7&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;
        &lt;span class=&quot;n&quot;&gt;rate&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;elif&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;years_since_last_renovation&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;15&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;
        &lt;span class=&quot;n&quot;&gt;rate&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;mf&quot;&gt;0.01&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;elif&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;years_since_last_renovation&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;25&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;
        &lt;span class=&quot;n&quot;&gt;rate&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;mf&quot;&gt;0.05&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;elif&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;years_since_last_renovation&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;50&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;
        &lt;span class=&quot;n&quot;&gt;rate&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;mf&quot;&gt;0.07&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;else&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;
        &lt;span class=&quot;n&quot;&gt;rate&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;mf&quot;&gt;0.1&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;rate&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;We pass it the number of years since it was last renovated (in years), and it returns a renovation rate. 
That renovation rate is used by other functions to perform various other computations. 
We could test each of the if conditions, but those numbers might change if we later tune the function to match real-world data. 
It might be more useful to test, for example, that the function always returns a percentage (i.e. a float between zero and one). 
So let&amp;#39;s test a few of the if conditions just for completeness, and add a new 
test function to check whether it always returns a percentage between 0 and 1. 
Note that instead of testing each year we put the assert methods inside a for loop.&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-python&quot; data-lang=&quot;python&quot;&gt;&lt;span class=&quot;kn&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;unittest&lt;/span&gt;
&lt;span class=&quot;kn&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;floor_space&lt;/span&gt; &lt;span class=&quot;kn&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;FloorSpace&lt;/span&gt;

&lt;span class=&quot;k&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;TestRateFunctions&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;unittest&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;TestCase&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;):&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;test_renovation_chooser_should_return_correct_rate&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;bp&quot;&gt;self&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;):&lt;/span&gt;
        &lt;span class=&quot;c&quot;&gt;# A 2-year old building has a 0% chance of renovation:&lt;/span&gt;
        &lt;span class=&quot;bp&quot;&gt;self&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;rate&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;FloorSpace&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;choose_renovation_rate&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;bp&quot;&gt;self&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
        &lt;span class=&quot;bp&quot;&gt;self&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;assertEqual&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;bp&quot;&gt;self&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;rate&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;2-year-old building should have a 0&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;% &lt;/span&gt;&lt;span class=&quot;s&quot;&gt;renovation rate.&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;

        &lt;span class=&quot;c&quot;&gt;# A 13-year old building has a 1% chance of renovation:&lt;/span&gt;
        &lt;span class=&quot;bp&quot;&gt;self&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;rate&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;FloorSpace&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;choose_renovation_rate&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;bp&quot;&gt;self&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;13&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
        &lt;span class=&quot;bp&quot;&gt;self&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;assertEqual&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;bp&quot;&gt;self&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;rate&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mf&quot;&gt;0.01&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;13-year-old building should have a 1&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;% &lt;/span&gt;&lt;span class=&quot;s&quot;&gt;renovation rate.&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;

        &lt;span class=&quot;c&quot;&gt;# A 55-year old building has a 10% chance of renovation:&lt;/span&gt;
        &lt;span class=&quot;bp&quot;&gt;self&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;rate&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;FloorSpace&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;choose_renovation_rate&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;bp&quot;&gt;self&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;55&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
        &lt;span class=&quot;bp&quot;&gt;self&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;assertEqual&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;bp&quot;&gt;self&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;rate&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mf&quot;&gt;0.1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;55-year-old building should have a 10&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;% &lt;/span&gt;&lt;span class=&quot;s&quot;&gt;renovation rate.&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;

    &lt;span class=&quot;k&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;test_renovation_chooser_should_return_percentage&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;bp&quot;&gt;self&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;):&lt;/span&gt;
        &lt;span class=&quot;c&quot;&gt;# The function should always return a rate such that 0 &amp;lt;= rate &amp;lt;= 1&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;years_since_renovation&lt;/span&gt; &lt;span class=&quot;ow&quot;&gt;in&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;range&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;100&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;):&lt;/span&gt;
            &lt;span class=&quot;bp&quot;&gt;self&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;rate&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;FloorSpace&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;choose_renovation_rate&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;bp&quot;&gt;self&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;years_since_renovation&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
            &lt;span class=&quot;bp&quot;&gt;self&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;assertGreaterEqual&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;bp&quot;&gt;self&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;rate&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;renovation rate should be &amp;gt;= 0&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
            &lt;span class=&quot;bp&quot;&gt;self&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;assertLessEqual&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;bp&quot;&gt;self&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;rate&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;renovation rate should be &amp;lt;= 1&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;

&lt;span class=&quot;n&quot;&gt;unittest&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;main&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;exit&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;bp&quot;&gt;False&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;For a list of assert methods made available to unittest, see the documentation.&lt;/p&gt;

&lt;h2 id=&quot;conclusion&quot;&gt;Conclusion&lt;/h2&gt;

&lt;p&gt;The basic steps to writing unit tests in Python are:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; Write testable code by keeping functions short; each function should perform one task&lt;/li&gt;
&lt;li&gt; Create a new file for the test code (e.g. unit_tests.py)&lt;/li&gt;
&lt;li&gt; &lt;code&gt;Import unittest&lt;/code&gt;&lt;/li&gt;
&lt;li&gt; Subclass unittest.TestCase (e.g. &lt;code&gt;class TestRateFunctions(unittest.TestCase)&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt; Create new test functions with description names starting with &lt;code&gt;test_&lt;/code&gt; (e.g. 
def test_renovation_chooser_should_return_percentage):`&lt;/li&gt;
&lt;li&gt; Make your &amp;quot;work&amp;quot; functions available to the &amp;quot;test&amp;quot; functions by importing where 
necessary (e.g. from floor_space import FloorSpace)&lt;/li&gt;
&lt;li&gt; Add string arguments to pass relevant information to the user in the case of a failed test.&lt;/li&gt;
&lt;li&gt; Refine and refactor for readability and usefulness.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Finally, don&amp;#39;t forget to actually run the tests frequently during development!&lt;/p&gt;
</description>
        <pubDate>Thu, 05 Jul 2012 19:53:18 +0000</pubDate>
        <link>http://andrewsturges.com/blog/python/testing/2012/07/05/basic-unit-testing-in-python.html</link>
        <guid isPermaLink="true">http://andrewsturges.com/blog/python/testing/2012/07/05/basic-unit-testing-in-python.html</guid>
        
        
        <category>python</category>
        
        <category>testing</category>
        
      </item>
    
  </channel>
</rss>
