[
  {
    "path": ".erb-lint.yml",
    "content": "---\nlinters:\n  ErbSafety:\n    enabled: true\n  Rubocop:\n    enabled: true\n    rubocop_config:\n      inherit_from:\n        - .rubocop.yml\n      Layout/InitialIndentation:\n        Enabled: false\n      Layout/TrailingBlankLines:\n        Enabled: false\n      Layout/TrailingWhitespace:\n        Enabled: false\n      Naming/FileName:\n        Enabled: false\n      Style/FrozenStringLiteralComment:\n        Enabled: false\n      Layout/LineLength:\n        Enabled: true\n      Lint/UselessAssignment:\n        Enabled: false\n      Rails/OutputSafety:\n        Enabled: false\n"
  },
  {
    "path": ".github/dependabot.yml",
    "content": "# Documentation for all configuration options:\n# https://help.github.com/github/administering-a-repository/configuration-options-for-dependency-updates\n\nversion: 2\nupdates:\n  - package-ecosystem: \"bundler\"\n    directory: \"/\"\n    schedule:\n      interval: \"weekly\"\n    open-pull-requests-limit: 15\n  - package-ecosystem: \"npm\"\n    directory: \"/\"\n    schedule:\n      interval: \"weekly\"\n  - package-ecosystem: \"github-actions\"\n    directory: \"/\"\n    schedule:\n      interval: \"monthly\"\n"
  },
  {
    "path": ".github/workflows/ruby.yml",
    "content": "# This workflow will download a prebuilt Ruby version, install dependencies and\n# run tests with Rake\n# For more information see: https://github.com/marketplace/actions/setup-ruby-jruby-and-truffleruby\n\nname: CI\n\n\"on\":\n  push:\n    branches:\n      - master\n      - 10-0-stable\n      - 9-2-stable\n  pull_request:\n    branches:\n      - master\n      - 10-0-stable\n      - 9-2-stable\n  workflow_dispatch:\n\njobs:\n  test-postgresql:\n    name: \"Test on PostgreSQL\"\n\n    runs-on: ubuntu-latest\n\n    strategy:\n      matrix:\n        ruby: [\"3.2\", \"3.3\", \"3.4\"]\n\n    services:\n      postgres:\n        image: postgres:latest\n        env:\n          POSTGRES_PASSWORD: postgres\n        ports: ['5432:5432']\n\n    steps:\n      - uses: actions/checkout@v6\n      - name: Set up Ruby\n        uses: ruby/setup-ruby@v1\n        with:\n          ruby-version: ${{ matrix.ruby }}\n          bundler-cache: true\n      - name: Database Configuration\n        run: cp config/database.yml.postgresql config/database.yml\n      - name: Migrate database\n        run: bundle exec rake db:create db:migrate\n      - name: Run tests\n        run: bundle exec rake\n\n  test-mysql:\n    name: \"Test on MySQL\"\n\n    runs-on: ubuntu-latest\n\n    strategy:\n      matrix:\n        ruby: [\"3.2\", \"3.3\", \"3.4\"]\n\n    services:\n      mysql:\n        image: mysql:latest\n        env:\n          MYSQL_ROOT_PASSWORD: mysql\n        ports: ['3306:3306']\n\n    steps:\n      - uses: actions/checkout@v6\n      - name: Set up Ruby\n        uses: ruby/setup-ruby@v1\n        with:\n          ruby-version: ${{ matrix.ruby }}\n          bundler-cache: true\n      - name: Database Configuration\n        run: cp config/database.yml.mysql config/database.yml\n      - name: Migrate database\n        run: bundle exec rake db:create db:migrate\n      - name: Run tests\n        run: bundle exec rake\n\n  test-sqlite:\n    name: \"Test on SQLite\"\n\n    runs-on: ubuntu-latest\n\n    strategy:\n      matrix:\n        ruby: [\"3.2\", \"3.3\", \"3.4\"]\n\n    steps:\n      - uses: actions/checkout@v6\n      - name: Set up Ruby\n        uses: ruby/setup-ruby@v1\n        with:\n          ruby-version: ${{ matrix.ruby }}\n          bundler-cache: true\n      - name: Database Configuration\n        run: cp config/database.yml.sqlite config/database.yml\n      - name: Migrate database\n        run: bundle exec rake db:create db:migrate\n      - name: Run tests\n        run: bundle exec rake\n\n  lint:\n    name: \"Linting\"\n\n    runs-on: ubuntu-latest\n\n    steps:\n      - uses: actions/checkout@v6\n      - name: Set up Ruby\n        uses: ruby/setup-ruby@v1\n        with:\n          ruby-version: 3.2\n          bundler-cache: true\n      - name: Run lint task\n        run: bundle exec rake lint\n"
  },
  {
    "path": ".gitignore",
    "content": "config/database.yml\nconfig/mail.yml\nconfig/timezone.yml\n*.log\n*~\ndb/db*\ndb/*.sqlite*\n.*.swp\n.*.swo\n.DS_Store\n.byebug_history\ninstaller/rails_installer.yml\n/public/files\n/public/images/theme\n/public/javascripts/ckeditor/config.js\n/public/javascripts/ckeditor/config.bak\n/public/javascripts/all.js\n/public/robots.txt\n/public/stylesheets/theme\n/public/stylesheets/all.css\n/publify_core/spec/dummy/public/files\ntmp/*\ncoverage/\nnbproject\npublic/cache/*\nGemfile.lock\n.rbenv-version\n.ruby-version\n.env\n.bundle/\n.sass-cache/\n/vendor/bundle\n/themes/*\n!/themes/bootstrap-2\n!/themes/plain\ngems/\nnode_modules/\nspec/examples.txt\n"
  },
  {
    "path": ".hound.yml",
    "content": "ruby:\n  config_file: .rubocop.yml\n"
  },
  {
    "path": ".metrics",
    "content": "MetricFu::Configuration.run do |config|\n  config.rcov[:test_files] = 'spec/**/*_spec.rb'\n  config.rcov[:rcov_opts] << '-Ispec'\n  config.syntax_highlighting = false\nend\n\n"
  },
  {
    "path": ".reek.yml",
    "content": "exclude_paths:\n  - 'db/migrate'\n  - 'publify_amazon_sidebar/spec/dummy/db/migrate'\n  - 'publify_textfilter_code/spec/dummy/db/migrate'\n  - 'publify_core/db/migrate'\ndirectories:\n  \"app/controllers\":\n    IrresponsibleModule:\n      enabled: false\n    NestedIterators:\n      max_allowed_nesting: 2\n    UnusedPrivateMethod:\n      enabled: false\n  \"app/helpers\":\n    IrresponsibleModule:\n      enabled: false\n    UtilityFunction:\n      enabled: false\n  \"app/models\":\n    IrresponsibleModule:\n      enabled: false\n"
  },
  {
    "path": ".rspec",
    "content": "--color\n--require spec_helper\n"
  },
  {
    "path": ".rubocop.yml",
    "content": "inherit_from: .rubocop_todo.yml\n\ninherit_mode:\n  merge:\n    - Exclude\n\nplugins:\n  - rubocop-capybara\n  - rubocop-factory_bot\n  - rubocop-performance\n  - rubocop-rails\n  - rubocop-rspec\n  - rubocop-rspec_rails\n\nAllCops:\n  Exclude:\n    - 'bin/*'\n    - 'db/converters/*.rb'\n    - 'db/schema.rb'\n  NewCops: enable\n  TargetRubyVersion: 3.2\n  TargetRailsVersion: 7.1\n\nRails:\n  Enabled: true\n\n# We have duplication due to extra logic in the Gemfile\nBundler/DuplicatedGem:\n  Enabled: false\n\n# Require tests to specify whether an element is a link or a button\nCapybara/ClickLinkOrButtonStyle:\n  EnforcedStyle: strict\n\n# Match style of regular expectations\nCapybara/RSpec/NegationMatcher:\n  EnforcedStyle: not_to\n\n# Make BeginEndAlignment behavior match EndAlignment\nLayout/BeginEndAlignment:\n  EnforcedStyleAlignWith: begin\n\n# Spaces in strings with line continuations go at the beginning of the line.\nLayout/LineContinuationLeadingSpace:\n  EnforcedStyle: leading\n\n# Lenient line length that fits in pull requests\nLayout/LineLength:\n  Max: 92\n\nLayout/MultilineMethodCallBraceLayout:\n  EnforcedStyle: same_line\n\n# Multi-line operations should be simply indented. Aligning them makes it even\n# harder to keep a sane line length.\nLayout/MultilineMethodCallIndentation:\n  EnforcedStyle: indented\n\n# Multi-line operations should be simply indented. Aligning them makes it even\n# harder to keep a sane line length.\nLayout/MultilineOperationIndentation:\n  EnforcedStyle: indented\n\n# Uniform block layout\nLayout/SpaceBeforeBlockBraces:\n  EnforcedStyleForEmptyBraces: space\n\n# Assume the programmer knows how bracketed block syntax works\nLint/AmbiguousBlockAssociation:\n  Enabled: false\n\n# Allow if (foo = get_foo) style\nLint/AssignmentInCondition:\n  AllowSafeAssignment: true\n\n# Suppress BlockLength for some files:\n# - Spec describe blocks can be any length\n# - Environment configuration blocks can be any length\nMetrics/BlockLength:\n  Exclude:\n    - 'spec/**/*'\n    - 'config/environments/*'\n\n# Initial schema has a very large change method\nMetrics/MethodLength:\n  Exclude:\n    - 'db/migrate/113_initial_schema.publify_core_engine.rb'\n\nPerformance/StartWith:\n  AutoCorrect: true\n\nPerformance/EndWith:\n  AutoCorrect: true\n\n# Migrations should not use ApplicationRecord\nRails/ApplicationRecord:\n  Exclude:\n    - 'db/migrate/*'\n\n# This cop has issues and is too database-specific\nRails/BulkChangeTable:\n  Enabled: false\n\n# These tasks do not need environment\nRails/RakeEnvironment:\n  Exclude:\n    - 'lib/tasks/i18n.rake'\n    - 'lib/tasks/rspec.rake'\n    - 'lib/tasks/rubocop.rake'\n\n# Migrations should not do validations in general?\nRails/SkipsModelValidations:\n  Exclude:\n    - 'db/migrate/*'\n\n# Spec type inference is disabled, so this cop must be disabled too.\nRSpecRails/InferredSpecType:\n  Enabled: false\n\n# Allow the use of 'and' 'or' in control structures.\nStyle/AndOr:\n  EnforcedStyle: conditionals\n\nStyle/ClassAndModuleChildren:\n  Enabled: false\n\nStyle/CollectionMethods:\n  Enabled: true\n\n# Documenting all classes is not common in Rails projects.\nStyle/Documentation:\n  Enabled: false\n\n# This cop doesn't detect use of break yet\nStyle/EachWithObject:\n  Enabled: false\n\n# Allows format strings with: format, sprintf or percent.\nStyle/FormatString:\n  Enabled: false\n\n# Require at least two dependent lines before suggesting a guard clause\nStyle/GuardClause:\n  MinBodyLength: 2\n\n# TODO: Re-enable?\nStyle/NumericPredicate:\n  Enabled: false\n\n# Not all objects that implement #size implement #empty?\nStyle/ZeroLengthPredicate:\n  Enabled: false\n\n# Restore previous RuboCop defaults\nStyle/PercentLiteralDelimiters:\n  PreferredDelimiters:\n    '%W': ()\n    '%w': ()\n\n# Always use raise to raise exceptions\nStyle/SignalException:\n  EnforcedStyle: only_raise\n\n# Allow meaningful names for single-line reduce etc.\nStyle/SingleLineBlockParams:\n  Enabled: false\n\n# Prefer not to commit to need to interpolate\nStyle/StringLiterals:\n  EnforcedStyle: double_quotes\n\n# Be consistent with non-interpolated strings\nStyle/StringLiteralsInInterpolation:\n  EnforcedStyle: double_quotes\n\n# Prefer symbols to look like symbols\nStyle/SymbolArray:\n  EnforcedStyle: brackets\n\n# Allow small arrays of words with quotes\nStyle/WordArray:\n  MinSize: 4\n"
  },
  {
    "path": ".rubocop_todo.yml",
    "content": "# This configuration was generated by\n# `rubocop --auto-gen-config --no-offense-counts --no-auto-gen-timestamp`\n# using RuboCop version 1.80.2.\n# The point is for the user to remove these configuration records\n# one by one as the offenses are removed from the code base.\n# Note that changes in the inspected code, or installation of new\n# versions of RuboCop, may require this file to be generated again.\n\n# This cop supports safe autocorrection (--autocorrect).\n# Configuration parameters: Max, AllowHeredoc, AllowURI, AllowQualifiedName, URISchemes, IgnoreCopDirectives, AllowedPatterns, SplitStrings.\n# URISchemes: http, https\nLayout/LineLength:\n  Exclude:\n    - 'config/initializers/new_framework_defaults_7_1.rb'\n\n# Configuration parameters: AllowedMethods, AllowedPatterns, CountRepeatedAttributes.\nMetrics/AbcSize:\n  Max: 157\n\n# Configuration parameters: CountComments, CountAsOne.\nMetrics/ClassLength:\n  Max: 177\n\n# Configuration parameters: AllowedMethods, AllowedPatterns.\nMetrics/CyclomaticComplexity:\n  Max: 19\n\n# Configuration parameters: CountComments, CountAsOne, AllowedMethods, AllowedPatterns.\nMetrics/MethodLength:\n  Max: 48\n\n# Configuration parameters: AllowedMethods, AllowedPatterns.\nMetrics/PerceivedComplexity:\n  Max: 22\n\n# Configuration parameters: Prefixes, AllowedPatterns.\n# Prefixes: when, with, without\nRSpec/ContextWording:\n  Exclude:\n    - 'spec/views/xml_sidebar/_content.html.erb_spec.rb'\n\n# Configuration parameters: CountAsOne.\nRSpec/ExampleLength:\n  Max: 14\n\n# Configuration parameters: AssignmentOnly.\nRSpec/InstanceVariable:\n  Exclude:\n    - 'spec/controllers/tags_controller_spec.rb'\n    - 'spec/controllers/xml_controller_spec.rb'\n    - 'spec/views/comments/html_sanitization_spec.rb'\n    - 'spec/views/layouts/default_spec.rb'\n    - 'spec/views/xml_sidebar/_content.html.erb_spec.rb'\n\nRSpec/LetSetup:\n  Exclude:\n    - 'spec/controllers/articles_controller_spec.rb'\n    - 'spec/controllers/feedback_controller_spec.rb'\n\nRSpec/MultipleExpectations:\n  Max: 10\n\n# Configuration parameters: AllowedGroups.\nRSpec/NestedGroups:\n  Max: 5\n\n# Configuration parameters: IgnoreNameless, IgnoreSymbolicNames.\nRSpec/VerifiedDoubles:\n  Exclude:\n    - 'spec/lib/publify_textfilter_flickr_spec.rb'\n    - 'spec/lib/publify_textfilter_lightbox_spec.rb'\n\nRails/CreateTableWithTimestamps:\n  Exclude:\n    - 'db/migrate/113_initial_schema.publify_core_engine.rb'\n    - 'db/migrate/20150807134129_simplify_redirect_relations.publify_core_engine.rb'\n    - 'db/migrate/20160605154632_remove_profiles.publify_core_engine.rb'\n    - 'db/migrate/20190210121317_remove_text_filters.publify_core_engine.rb'\n    - 'db/migrate/20221010170801_remove_page_caches_table.publify_core_engine.rb'\n\nRails/ThreeStateBooleanColumn:\n  Exclude:\n    - 'db/migrate/113_initial_schema.publify_core_engine.rb'\n\nSecurity/Eval:\n  Exclude:\n    - 'Gemfile'\n\n# This cop supports safe autocorrection (--autocorrect).\n# Configuration parameters: MinBodyLength, AllowConsecutiveConditionals.\nStyle/GuardClause:\n  Exclude:\n    - 'db/migrate/20150808191127_add_blog_id_to_redirects.publify_core_engine.rb'\n    - 'db/migrate/20150810094754_add_blog_id_to_tags.publify_core_engine.rb'\n\n# This cop supports safe autocorrection (--autocorrect).\n# Configuration parameters: EnforcedStyle.\n# SupportedStyles: implicit, explicit\nStyle/RescueStandardError:\n  Exclude:\n    - 'db/migrate/20150808052637_add_blog_ids.publify_core_engine.rb'\n    - 'lib/publify_textfilter_flickr.rb'\n"
  },
  {
    "path": "CHANGELOG.md",
    "content": "# Changelog\n\nSee the changelogs for the individual engines for more details for releases 9.0\nand up.\n\n## 10.0.1 / 2024-06-28\n\nThis is a bug fix and security release.\n\n* Update the dependency on `publify_core` from `~> 10.0.0` to `~> 10.0.2`. This\n  includes the following two security updates:\n\n   * Safely link target URLs for Redirects in admin ([publify_core#148] by [mvz])\n   * Upgrade jquery-ui-rails to version 7.0 ([publify_core#149] by [mvz])\n\n  See the `publify_core` changelog for further details.\n\n* Update various other dependencies (various pull requests)\n\n[publify_core#148]: https://github.com/publify/publify_core/pull/148\n[publify_core#149]: https://github.com/publify/publify_core/pull/149\n[mvz]: https://github.com/mvz\n\n## 10.0.0 / 2023-06-25\n\nThis major release updates Publify to Rails 6.1 in preparation of the upgrade\nto Rails 7.0. It also updates the set of supported Rubies to 2.7 through 3.2.\n\n### Security-related changes\n\n* Require at least Rails 6.1.6.1 [#1068](https://github.com/publify/publify/pull/1068)\n* Update puma dependency to require at least version 5.6.4 [#1064](https://github.com/publify/publify/pull/1064)\n\n### Updated dependencies\n\n* Upgrade to Rails 6.1\n  [#987](https://github.com/publify/publify/pull/987),\n  [#1014](https://github.com/publify/publify/pull/1014),\n* Support only Ruby 2.7 through 3.2\n  [#1013](https://github.com/publify/publify/pull/1013)\n  [#1041](https://github.com/publify/publify/pull/1041)\n  [#1115](https://github.com/publify/publify/pull/1115)\n  [#1120](https://github.com/publify/publify/pull/1120)\n* Update various other dependencies (various pull requests)\n\n### Breaking changes\n\n* Remove support for Textile as a text format [#1001](https://github.com/publify/publify/pull/1001)\n* Require email uniqueness to be case-insensitive [#1080](https://github.com/publify/publify/pull/1080)\n\n### Other changes\n\n* Add arabic language to the project [#1060](https://github.com/publify/publify/pull/1060)\n  by [ahmedhamid13](https://github.com/ahmedhamid13)\n* Fix article search rendering in bootstrap theme [#1101](https://github.com/publify/publify/pull/1101)\n* Remove local copies of engines and use external ones instead [#1099](https://github.com/publify/publify/pull/1099)\n* Require AWS configuration to be present when choosing AWS storage [#1082](https://github.com/publify/publify/pull/1082)\n* Replace deprecated non-digest-assets configuration [#1019](https://github.com/publify/publify/pull/1019)\n\n### Internal changes\n\n* Remove `sitealizer` table [#1089](https://github.com/publify/publify/pull/1089)\n  by [SupriyaMedankar](https://github.com/SupriyaMedankar)\n* Remove itunes fields from resources [#1092](https://github.com/publify/publify/pull/1092)\n  by [SupriyaMedankar](https://github.com/SupriyaMedankar)\n* Remove `page_caches` table [#1090](https://github.com/publify/publify/pull/1090)\n  by [SupriyaMedankar](https://github.com/SupriyaMedankar)\n* Remove `dynamic_form` dependency [#991](https://github.com/publify/publify/pull/991)\n\nSee also the changelogs for\n[publify_core](https://github.com/publify/publify_core/blob/v10.0.0/CHANGELOG.md#1000--2023-06-25),\n[publify_textfilter_code](https://github.com/publify/publify_textfilter_code/blob/v10.0.0/CHANGELOG.md#1000--2023-06-25)\nand\n[publify_amazon_sidebar](https://github.com/publify/publify_amazon_sidebar/blob/v10.0.0/CHANGELOG.md#1000--2023-06-25).\n\n## 9.2.10 / 2023-01-08\n\nThis release fixes several security issues:\n\n* Bump Rails version to 5.2.8.1 [#1070](https://github.com/publify/publify/pull/1070)\n* Limit length of settings values [#1072](https://github.com/publify/publify/pull/1072)\n* Require login to stay unique when updating a User [#1073](https://github.com/publify/publify/pull/1073)\n* Validate lengths of string attributes [#1077](https://github.com/publify/publify/pull/1077)\n* Strip EXIF data from resource uploads [#1078](https://github.com/publify/publify/pull/1078)\n* Require user passwords to be strong [#1086](https://github.com/publify/publify/pull/1086)\n\n## 9.2.9 / 2022-05-22\n\nThis release fixes two security issues:\n\n* Fix admin article access control [#1065](https://github.com/publify/publify/pull/1065)\n* Refuse html files as resources even if declared to be plain text [#1066](https://github.com/publify/publify/pull/1066)\n\n## 9.2.8 / 2022-05-14\n\nThis release fixes several security issues:\n\n* Disallow comments on draft articles [#1048](https://github.com/publify/publify/pull/1048)\n* Disallow images in comments [#1054](https://github.com/publify/publify/pull/1054)\n* Hide bodies of password-protected articles in search results [#1057](https://github.com/publify/publify/pull/1057)\n* Do not create article meta description for password-protected articles [#1061](https://github.com/publify/publify/pull/1061)\n\nAdditionally, it includes the following changes:\n\n* Clean up Feedback validation [#1051](https://github.com/publify/publify/pull/1051)\n* Bump mimimum puma and Rails versions [#1050](https://github.com/publify/publify/pull/1050)\n* Fix password reset process [#1055](https://github.com/publify/publify/pull/1055)\n* Fix password protected article reveal [#1049](https://github.com/publify/publify/pull/1049)\n* Provide correct `article_id` input in bulkops form [#1058](https://github.com/publify/publify/pull/1058)\n* Bump minimum required Rails version [#1062](https://github.com/publify/publify/pull/1062)\n\n## 9.2.7 / 2022-02-07\n\nThis release fixes a security issue:\n\n* Fix setting the article password from the Admin [#1044](https://github.com/publify/publify/pull/1044)\n\n## 9.2.6 / 2022-01-07\n\nThis release fixes a minor security issue:\n\n* Rate-limit Devise logins and password resets\n\nAdditionally, it includes the following change:\n\n* Add documentation about use of the media library\n\n## 9.2.5 / 2021-10-11\n\nThis release fixes several security issues:\n\n* Force session cookie to be secure in production\n* Block ability to switch themes using a GET request; use a POST instead\n* Disallow user self-registration rather than hiding it\n* Let the browser not cache admin pages\n* Limit the set of allowed mime types for uploaded media\n* Limit allowed HTML in articles, pages and notes\n\nAdditionally, it includes the following changes:\n\n* Fix resource size display in admin resource list\n* Trigger download of media in the Media Library in admin instead of displaying\n  them directly\n\n## 9.2.4 / 2021-10-02\n\n* Require at least version 1.12.5 of nokogiri to avoid a security issue\n* Drop support for Ruby 2.4 since it is incompatible with nokogiri 1.12.5\n\n## 9.2.3 / 2021-05-22\n\n* Bump Rails dependency to 5.2.6\n* Replace mimemagic with marcel [#996](https://github.com/publify/publify/pull/996)\n\n## 9.2.2 / 2021-03-21\n\n* Fix the `publify:textile_to_markdown` task. This task failed on feedback and\n  pages.\n\n## 9.2.1 / 2021-03-20\n\nThis release updates dependencies due to security issues.\n\n* Bump minimum Rails version to 5.2.4.5\n* Update `activerecord-session_store` dependency to 2.0.0\n\n## 9.2.0 / 2021-01-17\n\n### Breaking changes\n\n* Upgrade to Rails 5.2 (mvz)\n* Drop support for custom mail.yml configuration. Mail settings should now be\n  configured in config/environments/production.rb (mvz)\n* Drop support for custom timezone.yml configuration. If relevant, the timezone\n  can be set in config/application.rb (mvz)\n* Drop support for Ruby 2.2 and 2.3 (mvz)\n* Drop support for humans.txt (mvz)\n* Deprecate use of Textile. The admin will warn about any content that uses\n  Textile formatting. A task has been added to convert this content to\n  Markdown. The next release of Publify will drop Textile support entirely\n  (mvz)\n\n### Other changes\n\n* Fix comment preview (mvz)\n* Fix gravatar request URL (mvz)\n* Fix various issues with the bootstrap-2 theme (mvz)\n* Add support for Ruby 2.7 (mvz)\n* Update dependencies (mvz)\n* Allow rake tasks to be loaded when only production gems are present (mvz)\n\n## 9.1.0 / 2018-04-19\n\n* Upgrade to Rails 5.1 (mvz)\n* Update translations (xy2z, gergu)\n* Remove outdated converters (mvz)\n* Fix a bunch of issues (e-tobi)\n* Fix google analytics tag rendering (mvz)\n\n## 9.0.1\n\n* Use at least Rails 5.0.4 (mvz)\n* Update Russian translations (biggless)\n\n## 9.0.0\n\n### Breaking/large changes\n\n* Use Rails' default method of setting `secret_key_base` in production: Through\n  an environment variable. This means you will have to update your production\n  environment so this variable is actually set (whithajess)\n* Break out Publify functionality into several engine gems (mvz)\n* Update to Rails 5.0\n\n### Other changes\n\n* Hide spinner on `ajax:complete` for article search (nathanallen)\n* Fix layout for log in form (mvz)\n* Fix spinner for sidebar editor (mvz)\n* Update copyright information and contributor list (mvz)\n* Fix XML sidebar (mvz)\n\n## 8.3.3\n\n* Fix Devise error during sign-in (mvz)\n* Protect from forgery on all actions (mvz)\n* Have Devise be paranoid by default (mvz)\n* Fix resource upload and properly check mime types (mvz)\n* Store session in the database to prevent session hijacking (mvz)\n* Correctly escape blog name in devise view (mvz)\n\n## 8.3.2\n\n* Replace deprecated count-with-conditions (mvz)\n* Loosen/update dependencies (mvz)\n* Fix google sitemap (mvz)\n* Restore theme helper loading (mvz)\n* Fix password edit form (jetware)\n\n## 8.3.1\n\n* Fix live search (mvz)\n* Introduce `SidebarRegistry` to avoid need to preload all sidebars (mvz)\n* Avoid use of `String#html_safe` (mvz)\n* Fix several cases of double-escaped HTML (mvz)\n* Avoid ambiguous field reference in feedback scopes (apsheronets)\n* Remove spurious error message when starting a new article (mvz)\n* Replace bundled bootstrap with bootstrap-sass gem (mvz)\n* Link Resource directly to Blog in order to make upload of images to media\n  library work again (mvz)\n* Fix comment order and other feedback scopes (mvz)\n* Fix autosave (mvz)\n* Improve russian translation (apsheronets)\n* Fix note publication date entry (mvz)\n* Ensure settings update flash has the correct language (mvz)\n\n## 8.3.0\n\n### Breaking/large changes\n\n* Make Publify multiblog-ready (mvz)\n* Replace custom Publify authentication system with Devise (mvz)\n* Replace custom Publify authorization system with CanCanCan (mvz)\n* Remove Profile model (mvz)\n* Remove long-deprecated `view_root` method for sidebars (mvz)\n* Provide registration mechanism for themes, allowing them to be stored\n  anywhere (mvz)\n\n### Other changes\n\n* Update Akismet API calls (drakontia)\n* Remove old Rails patches (mvz)\n* Update dependency on Rails to 4.2.5 (mvz)\n* Fix issues with missing translations and HTML escaping errors\n* Clean up helpers and partials (mvz)\n* Add specs to check for double HTML escaping and fix errors (mvz)\n* Load JavaScript asynchronously (mvz)\n* Remove own copies of jQuery files (mvz)\n* Fixed rake db:seed error (sachiotomita)\n* Add check for translation keys and fix errors (mvz)\n* Introduce RuboCop to automatically check style errors (mvz)\n* Fix many RuboCop offenses (mvz)\n* Update Travis config to stop testing on MRI 2.0.0, start testing on 2.3 (mvz)\n* Remove unused `#reset_local_cache` method (mvz)\n* Load JavaScript asynchronously in supporting layouts (mvz)\n* Fix translations for labels in Devise views (mvz)\n* Update dependencies (mvz)\n* Clean up textfilter code (mvz)\n* Test and improve setup process (mvz)\n* Update translations for Dutch (mvz)\n* Fix syntax error in mailer template (ttibau)\n* Ensure development dependencies don't break the build (mvz)\n* Fix spelling (mvz)\n* Use only the parts from fog needed by Publify (mvz)\n* Upgrade to mysql2 0.4.x (ttibau)\n* Remove unused code (mvz)\n* Load JavaScript asynchronously only in production (priit)\n* Run tests as a sub-URL installation by default (mvz)\n* Ensure new sidebars have `blog_id` set (mvz)\n* Fix bug in article attachment saving (mvz)\n* Fix broken authors sidebar (mvz)\n\n## 8.2.0\n\n### Breaking/large changes\n\n* Update rails, jquery-rails and web-console to avoid security vulnerabilities (mvz)\n* Update dependencies (mvz, fdv)\n* Update to Rails 4.2 (mvz)\n* Roll up migrations up to 113 according to our\n  [upgrade policy](https://github.com/publify/publify/wiki/Upgrading).\n  You must now first upgrade to at least version 7 before upgrading to the\n  latest version. (mvz)\n* Replace default theme bootstrap with bootstrap-2 (fdv)\n* Add a Plain theme demonstrating the use of Publify's default templates (mvz)\n* Use HTML instead of XHTML in views (fdv)\n\n### Other changes\n\n* Restore hiding of automatic redirects from admin interface (mvz)\n* Fix broken stylesheet link in bootstrap2 theme (hmallett)\n* Create a fonts folder for themes, to replicate the Rails default (hmallet)\n* Update rubocop todo and use rubocop in travis (whithajess)\n* Autocorrect rubocop offenses (mvz)\n* Support Ruby 2.2 (mvz)\n* Indicate dependency on external JS runtime (mvz)\n* Several improvements to the Admin UI\n* Update pt-BR translations (ramirovjr)\n* Update nl translations (mvz)\n* Update fr translations (Stephanyan, giniouxe)\n* Update en translations (hmallett, stevenwilkin)\n* Update es-MX translations (hernamvel)\n* Changed navbar to dropdown onhover (jacemonje)\n* Improve Publify's default templates\n* Fix sidebar administration (mvz)\n* Various cleanups and improvements of code and specs\n* Fix several vulnerabilities reported by brakeman (mvz)\n* Use more resourceful routes (hmallett)\n* Fix editing users in Admin (pacergh)\n* Add foreign keys and indexes to the schema (hmallett)\n* Add a CONTRIBUTING.md file to help contributors (randomecho)\n* Remove test dependency on feedvalidator (mvz)\n* Remove old API links from RSD view (mvz)\n* Remove outdated schemas rake task (stevenwilkin)\n* Improve installation instructions (giniouxe)\n* Paginate article archives pages (giniouxe)\n* Handle tags that contain colons (ook)\n* Ensure cache path exists (pvcarrera)\n* Use protocol-relative URIs for Flickr images (flameeyes)\n* Update text filter help texts to use 'publify' (mvz)\n* Restore hiding/showing of optional comment fields (mvz)\n* Use rails-timeago to provide time ago display (mvz)\n* Adding new Publify favicon (fdv)\n* Fix typo (garethrees)\n* Various small bug fixes\n* Several theme fixes\n\n## 8.1.1\n\nFrédéric de Villamil (4):\n\n* Fixes broken autosave.\n* Fixes editor size for pages and articles.\n* Fixes publishing. Need to investigate why the specs did not break on that one.\n* Updating Publify version for 8.1.1\n\n## 8.1.0\n\nFrédéric de Villamil (2):\n\n* Adds missing users-style.css in assets precompile.\n* Updates Rails version\n\nMatijs van Zuijlen (47):\n\n* Fix spec for sending pings on Article save\n* Enforce correct join table name\n* Fix finders\n* Fix Feedback scopes\n* Remove invalid attribute in Trackback spec setup\n* Fix finder in spec\n* Fix Migrator to match changed ActiveRecord::Migrator\n* Declare params used for assignment permitted in admin\n* Fix use of finders in admin and its specs\n* Move `#text_filter=` override to where it will be picked up\n* Fix implementation of `assert_xml`\n* Avoid exception when avatar plugin is undefined\n* Rewrite use of removed assertions\n* Fix tests for layoutless rendering\n* Fix rendered template spec\n* Avoid attempting to create articles with the same id in spec setup\n* Avoid attempting to update articles with the wrong id\n* Fix use of finders outside admin\n* Make Rails ignore the accept header again\n* Declare params permitted\n* Fix finders in migrations\n* Match files as generated by Rails 4.1\n* Remove unused Sidebar methods\n* Introduce `valid` scope to find Sidebars safely\n* Remove unused methods\n* Wrap long comment\n* Add a TODO\n* Wrap long lines\n* Avoid time zone shift\n* Add a FIXME\n* Use current time zone for Tweets\n* Fix check for SQLite connection\n* Replace webrat with capybara\n* Replace should contain with should match\n* Fix usage of `have_selector` matcher\n* Make sidebar generator Rails 3 compliant.\n* Declare assets for precompilation\n* Allow GET to /setup\n* Include admin assets in precompile list\n* Fix creation of first article in SetupController\n* Fix hash rockets and white space in SetupController and its specs\n* Include admin css in precompile list\n* Move fonts to their normal position\n* Precompile font assets without cache buster\n* Make sure NonStupidDigestAssets is always defined\n* Fix spec setup\n* Make rendering notes in article list work\n\nThomas Lecavelier (16):\n\n* Upgrade rails stack to 4.1.1\n* `eager_loading` mandatory in conf\n* Page caching removed from Rails4.0, return it as a Gem\n* Observers removed from Rails4.0, return it as a Gem\n* WIP deprecated stuff conversion\n* Can't merge proc, you know…\n* `default_scope` explicitly require a block, now\n* `attr_accessible` no longer exist. User `params.require`/`permits` in\n  controller instead.\n* `default_scope` for Note\n* I hate you all… T_T match must specify HTTP method(s)\n* Can't use same alias for 2 differents routes…\n* Misuse of named route + match / via\n* Replace every #match by its HTTP verb or define their opened verbs with :via key\n* Must check searches\n* Fix deprecation warning for Travis\n* Fix Blog.default\n\nregonn (3):\n\n* fix heroku config:set\n* delete unnecessary command\n* add heroku server restart command\n\n## 8.0.2\n\nAlexander Markov (1):\n\n* `.published_on` changed; see below\n\nBenoit C. Sirois (2):\n\n* Added some translations\n* Fixes link caching issue (All cached links are the same basically)\n\nFrédéric de Villamil (21):\n\n* Replaces the old Prototype based Lightbox with a more modern based on\n  Bootstrap and Jquery.\n* Fixes bootstrap use in the image gallery.\n* Porting the lightbox plugin to the new version.\n* Removing useless Javascript.\n* Fixes the specs\n* Fixes that very annoying bug in the editor save bar.\n* Fixing a bug where the article content is displayed twice when using the more tag.\n* Encloses the sidebar admin help text in a blue block (like every help text).\n  Also fixes the style on the per widget submit button + removes button class\n  on the cancel link (this should be the default)\n* Removes the btn class on cancel\n* Enables the close icon on the help messages\n* Fixes layout differences betwen the page form and the post form\n* Fixes the last comments dashboard avatar alignment\n* Fixes articles search.\n* Fixes an encoding issue in the inbound link plugin.\n* Fixes the tag manager display issue.\n* Apparently, rendering an empty js.erb file on destroy makes the effective\n  destroy work. Not sure why.\n* Fixes file upload.\n* Fixes dynamic comment state change.\n* Removes forgoten debug trace\n* Replaces the date picker with datetime picker.\n* Updating README and Publify version for 8.0.2 release\n\nHans de Graaff (1):\n\n* Use a relative image path\n\nMatijs van Zuijlen (13):\n\n* Limit set of allowed comment parameters\n* Run db setup inside bundle on Travis CI\n* Upgrade to Rails 3.2.18\n* Remove useless gems\n* Fix indenting\n* Remove useless #map\n* Make Travis CI validate the rendered feeds\n* Avoid symbolizing by stringifying instead\n* Ensure RSpec 2.99 gets installed\n* Avoid clearing cache that may not be there in test\n* Balance tags of Bootstrap theme layout\n* CarrierWave automatically sets the mime type now\n* Fix Twitter gem deprecations\n\nSoon Van (1):\n\n* Typos and capitals in README [ci skip]\n\nThomas Lecavelier (2):\n\n* Fix [#423]: stutter article content\n* Excerpt is not editable anymore. Drop it even for `full_article_content`\n  partial. Close [#423]\n* Upgrade to Rails 3.2.17\n\nTor Helland (2):\n\n* Synchronised Norwegian translation with the English en.yml.\n* Revised all of Norwegian translation.\n\nYannick Francois (11):\n\n* Just a little cleanup of a spec\n* Add humans txt settingso\n* Really write to humans txt file\n* Add a text controller to manage humans.txt (and other later)\n* Robots.txt generated by a controller.\n* Refactor duplication in notes controller\n* Just clean syntax on specs\n* Prepare rspec 3 by removing deprecations\n* Put back condition on cache for archives page\n* Clean code around notes show and url helper\n* Fix note helper. Back in application helper.\n\nslainer68 (1):\n\n* Travis build on 2.0 and 2.1\n\n[#423]: https://github.com/publify/publify/issues/423\n\n## 8.0.1\n\n* [#398]: the user-style.css stylesheet is not loaded in the Bootstrap theme\n* [#399]: the note style is not applied.\n* [#402], [#410], [#411]: deployment crashes on Heroku (thank you @slainer68 for\n  fixing that).\n* [#412]: the editor locally saves the content of the edited note, which means it\n  reloads it when you edit another note, overwriting the legit content.\n\n[#398]: https://github.com/publify/publify/issues/398\n[#399]: https://github.com/publify/publify/issues/399\n[#402]: https://github.com/publify/publify/issues/402\n[#410]: https://github.com/publify/publify/issues/410\n[#411]: https://github.com/publify/publify/issues/411\n[#412]: https://github.com/publify/publify/issues/412\n\n## Publify 8.0\n\nIt's been 5 months since Publify 7.1, and considering the figures, Publify 8.0\nis the biggest release we ever pushed in 9 years: 474 commits, 71 issues\nclosed, 8 contributors, 567 files changed, 60,767 additions and 45,166\ndeletions.\n\nBut you probably don't care about numbers that much, except if you're wondering\nwhether or not the project is till alive. TL; DR: it is.\n\nThe project itself has known one big change, [moving from Fred's personal\nGithub account to a dedicated organization][1]. We have been thinking about it\nfor a while, and we believe it's the best we could do for Publify.\n\n### Simpler, better, faster\n\nLast summer, [we started to rethink what we wanted Publify to be][2]. At a time\nwhere online publishing is more or less split between Wordpress, hosted\nplatforms and static engines, being \"only\" a blogging platform had no meaning\nanymore. We started to extend publishing capabilities, choosing Twitter pushed\nshort notes as a first step before we add more content type. This led to\nPublify 7.0, and once again we knew it was the way to go.\n\nBefore adding these feature, we wanted Publify 8.0 to rebuild the whole user\nexperience. It had to be simpler, clearer and better, far from the MS Word 97\nstyle that prevails in Web publishing since more than 10 years.\n\nThis meant a simpler interface with a single, smaller menu, getting out of the\nold create / read / update / delete scheme when possible, merging some sections\nand finally removing lots of things. This also means using the most of large\nscreens capabilities, using _responsive_ layouts as much as we could, even\nthough it made the job more difficult at some point.\n\nThe editor, it has been completely revamped, following the way opened by both\nMedium and Ghost. We've pushed aside everything that may distract you from\nwriting. The post settings are 1 click away from the editor so you won't feel\nlost anyway. We know how much work is left to get a really classy tool, but\nwe're working on it.\n\nThe notes have got improvement. When replying to a tweet, Publify now displays\nthe original tweet so readers can keep the context this was done.\n\nUsers profiles have been improved to. Each user now has its own detailed page\nwith avatar, contact links, short bio and indeed the published content.\n\n### Missing in action\n\nThe old categories VS tags separation is no more. We merged the first into the\nseconds as a strict categorization has no real meaning on most blogs. Don't\nworry about your URLs, we took care of everything, eventually creating the\nredirects you needed.\n\nThe _excerpt_ has been removed. Excerpt was meant to display a different\ncontent on the listing page and on the post itself. It was an interesting\nfeature, but only a handful of people, if none was using it, and it made the\neditor more complicated than necessary.\n\nThe old [Typographic theme][3] is not part of the core anymore. It has moved to\nits own project and will still be maintained.\n\nThe old XMLRPC backend has been discontinued. This means Publify does not\nsupport desktop clients anymore. This choice has been motivated by the fact\nthat the APIs it was relying had not been updated for 10 years, and that most\ndesktop editors are not maintained anymore either. Web browsers capabilities\nhave evolved, and you can now have a fairly decent editor with local saving\nwithout the need of a desktop application.\n\n### Under the hood\n\nPublify has been around for 9 years now. Rails was not 1.0 yet, and some of our\ncode was older than you can ever imagine.\n\nPublify 8.0 got rid of most of that legacy code. The old Prototype based\nhelpers that made Rails famous back then left the building. Prototype itself\nhas finally been replaced by Jquery, and Rails i18n allowed the _Globalize_\nbased translation system to enjoy a deserved retirement. Most helpers have been\nremoved too, as most of them were only used in one place.\n\nThis should not affect you unless you're running custom themes and plugins. If\nso, have a look at the Bootstrap theme to see how we're now working.\n\nThat's all folks, you can now download Publify, or give it a try on [our demo\nplatform][4].\n\n[1]: http://t37.net/here-comes-the-time-to-hand-over-your-open-source-project.html\n[2]: http://t37.net/is-coding-a-blogging-engine-still-worth-the-effort-in-2013-and-other-thoughts-about-content-publishing-tools.html\n[3]: https://github.com/publify/typographic\n[4]: https://demo-publify.herokuapp.com/\n"
  },
  {
    "path": "CONTRIBUTING.md",
    "content": "# Contributing to Publify\n\nWe welcome contributions to Publify. Please follow the guidelines below to help the\nprocess of handling issues and pull requests go smoothly.\n\n## Issues\n\nWhen creating an issue, please provide as much information as possible, and\nfollow the guidelines below to make it easier for us to figure out what's going\non. If you miss any of these points we will probably ask you to improve the\nticket.\n\n- Include a clear title describing the problem\n- Describe what you are trying to achieve\n- Describe what you did, including the URLs of the pages you visited\n- Describe what you expected to happen\n- Describe what happened instead, including any relevant output, error logs or screenshots\n- State the version of Publify you are using\n- Use [code blocks](https://github.github.com/gfm/#fenced-code-blocks) to\n  format any code and output in your ticket to make it readable.\n\n## Pull Requests\n\nWe welcome pull requests. Please check first if the problem you're solving is\nfixed in master, or if the desired feature is already in development. Before\nstarting a large feature, please open a ticket first so we can discuss it.\n\nWhen sending a pull request, please follow **all of** the instructions below:\n\n- Make sure `bundle exec rake` runs without reporting any failures. See\n  *Testing your changes* below for more details.\n- Add tests for your feature. Otherwise, I can't see if it works or if I break\n  it later.\n- Create a separate branch for your feature based off of latest master.\n- Write [good commit messages](https://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html).\n- Do not include changes that are irrelevant to your feature in the same\n  commit.\n- Keep an eye on the build results in GitHub Actions. If the build fails and it\n  seems due to your changes, please update your pull request with a fix.\n\nIf you're not sure how to test the problem, or what the best solution is, or\nget stuck on something else, please open an issue first so that we can discuss\nthe best approach.\n\n### Testing your changes\n\nYou can run the test suite with the latest version of all dependencies by running the following:\n\n- Run `bundle install` if you haven't done so already, or `bundle update` to update the dependencies\n- Run `bundle exec rake` to run the tests\n\nTo run the tests suite for **TODO** a particular version of Rails, use\n[appraisal](https://github.com/thoughtbot/appraisal). For example, to run the\nspecs with Rails 6.1, run `appraisal rails_6_1 rake`. See appraisal's\ndocumentation for details.\n\n### The review process\n\n- We will try to review your pull request as soon as possible but we can make no\n  guarantees. Feel free to ping us now and again.\n- I will probably ask you to rebase your branch on current master at some point\n  during the review process.\n  If you are unsure how to do this,\n  [this in-depth guide](https://git-rebase.io/) should help out.\n- If you have any unclear commit messages, work-in-progress commits, or commits\n  that just fix a mistake in a previous commit, we will ask you to clean up the\n  history.\n  Again, [the git-rebase guide](https://git-rebase.io/) should help out.\n  Note that we will not squash-merge pull requests, since that results in a loss of history.\n- **At the end of the review process we may still choose not to merge your pull\n  request.** For example, this could happen if we decide the proposed feature\n  should not be part of Publify, or if the technical implementation does not\n  match where I want to go with the architecture of the project.\n- We will generally not merge any pull requests that make the build fail, unless\n  it's very clearly not related to the changes in the pull request.\n"
  },
  {
    "path": "Gemfile",
    "content": "# frozen_string_literal: true\n\nsource \"https://rubygems.org\"\ngit_source(:github) { |repo| \"https://github.com/#{repo}.git\" }\n\ngem \"rails\", [\"~> 7.1.5\", \">= 7.1.5.2\"]\n\ngem \"mysql2\"\ngem \"pg\"\ngem \"sqlite3\", \"~> 2.9.4\"\n\n# Store sessions in the database\ngem \"activerecord-session_store\", \"~> 2.2.0\"\n\n# Use Puma as the app server\ngem \"puma\", \"~> 8.0\"\n\ngem \"publify_amazon_sidebar\", github: \"publify/publify_amazon_sidebar\"\ngem \"publify_core\", github: \"publify/publify_core\"\ngem \"publify_textfilter_code\", github: \"publify/publify_textfilter_code\"\n\n# Use Uglifier as compressor for JavaScript assets\ngem \"uglifier\", \">= 1.3.0\"\n\n# Needed for the lightbox and flickr text filters\ngem \"flickraw\", \"~> 0.9.8\", require: false\n\ngem \"non-digest-assets\", \"~> 2.0\"\ngem \"rake\", \"~> 13.0\"\ngem \"reverse_markdown\", \"~> 3.0\"\n\n# Force newer sprockets\ngem \"sprockets\", \"~> 4.0\"\n\n# Allow throttling requests\ngem \"rack-attack\", \"~> 6.5\"\n\ngem \"net-smtp\", \"~> 0.5.0\"\n\ngroup :development, :test do\n  # Call 'byebug' anywhere in the code to stop execution and get a debugger console\n  gem \"byebug\", platforms: [:mri, :windows]\n\n  gem \"capybara\", \"~> 3.9\"\n  gem \"factory_bot\", \"~> 6.2\"\n  gem \"i18n-tasks\", \"~> 1.1.0\", require: false\n  gem \"rspec-rails\", \"~> 7.1\"\n  gem \"rubocop\", \"~> 1.86.1\", require: false\n  gem \"rubocop-capybara\", \"~> 2.23.0\", require: false\n  gem \"rubocop-factory_bot\", \"~> 2.28.0\", require: false\n  gem \"rubocop-performance\", \"~> 1.26.0\", require: false\n  gem \"rubocop-rails\", \"~> 2.35.0\", require: false\n  gem \"rubocop-rspec\", \"~> 3.9.0\", require: false\n  gem \"rubocop-rspec_rails\", \"~> 2.32.0\", require: false\n  gem \"simplecov\", \"~> 0.22.0\", require: false\nend\n\ngroup :development do\n  # Access an interactive console on exception pages or by calling 'console'\n  # anywhere in the code.\n  gem \"web-console\", \"~> 4.1\"\n\n  gem \"listen\", \"~> 3.3\"\n  # Display performance information such as SQL time and flame graphs for each\n  # request in your browser.\n  # Can be configured to work on production as well see: https://github.com/MiniProfiler/rack-mini-profiler/blob/master/README.md\n  gem \"rack-mini-profiler\", \"~> 4.0\"\n  # Spring speeds up development by keeping your application running in the\n  # background. Read more: https://github.com/rails/spring\n  gem \"spring\", \"~> 4.5.0\"\n  gem \"spring-commands-rspec\", \"~> 1.0\"\n\n  gem \"fast_stack\"\n  gem \"flamegraph\"\n  gem \"memory_profiler\"\n  gem \"stackprof\"\nend\n\ngroup :test do\n  # TODO: Remove when upgrading rails and/or rspec-rails\n  gem \"drb\", \"~> 2.2.3\"\n  gem \"mutex_m\", \"~> 0.3.0\"\n\n  gem \"feedjira\", \"~> 4.0\"\n  gem \"launchy\", \"~> 3.0\"\n  gem \"rails-controller-testing\", \"~> 1.0.1\"\n  gem \"shoulda-matchers\", \"~> 7.0\"\n  gem \"timecop\", \"~> 0.9.1\"\n  gem \"webmock\", \"~> 3.3\"\nend\n\n# Install gems from each theme\nDir.glob(File.join(File.dirname(__FILE__), \"themes\", \"**\", \"Gemfile\")) do |gemfile|\n  eval(File.read(gemfile), binding)\nend\n"
  },
  {
    "path": "MIT-LICENSE",
    "content": "Copyright (c) 2005 Tobias Luetke\nCopyright (c) 2005-2013 Typo Developers & Contributors\nCopyright (c) 2013-2017 Publify Developers & Contributors\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n\"Software\"), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\nLIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\nWITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n"
  },
  {
    "path": "README.md",
    "content": "# Publify\n\n**The Ruby on Rails publishing software formerly known as Typo**\n\n[![Build status](https://github.com/publify/publify/actions/workflows/ruby.yml/badge.svg)](https://github.com/publify/publify/actions/workflows/ruby.yml)\n[![Code Climate](https://codeclimate.com/github/publify/publify.svg)](https://codeclimate.com/github/publify/publify)\n[![Reviewed by Hound](https://img.shields.io/badge/Reviewed_by-Hound-8E64B0.svg)](https://houndci.com)\n\n## What's Publify?\n\nPublify is a simple but full featured web publishing software. It's built\naround a blogging engine and a small message system connected to Twitter.\n\nPublify follows the principles of the IndieWeb, which are self hosting your Web\nsite, and Publish On your Own Site, Syndicate Everywhere.\n\nPublify has been around since 2004 and is the oldest Ruby on Rails open source\nproject alive.\n\n## Features\n\n- A classic multi user blogging engine\n- Short messages with a Twitter connection\n- Text filters (Markdown, SmartyPants, @mention to link, #hashtag to link)\n- A widgets system and a plugin API\n- Custom themes\n- Advanced SEO capabilities\n- Multilingual : Publify is (more or less) translated in English, French,\n  German, Danish, Norwegian, Japanese, Hebrew, Simplified Chinese, Mexican\n  Spanish, Italian, Lithuanian, Dutch, Polish, Romanian…\n\n## Demo site\n\nYou can give Publify a try at [the demo site](https://publify-demo.fly.dev/).\n\nThe demo is reset every hour.\n\n## Install\n\n### Download\n\nYou can download the latest\nPublify [stable release](https://github.com/publify/publify/releases/latest).\n\nIf you want to run the master branch, you can [clone the Publify\nrepository](https://github.com/publify/publify.git). However, random things may\nbe broken there at any time, so tread carefully!\n\n**Running the master branch in production is not recommended!**\n\n### Install Publify locally\n\nTo install Publify you need the following:\n\n- CRuby (MRI) 2.5, 2.6 or 2.7\n- Ruby on Rails 5.2.x\n- A database engine, MySQL, PgSQL or SQLite3\n- A compatible JavaScript installation for asset compilation. See\n  [the execjs readme](https://github.com/sstephenson/execjs#readme) for details.\n- ImageMagick (used by `mini_magick`).\n\n1.  Unzip Publify archive\n2.  Rename database.yml.yourEngine as database.yml\n3.  Edit database.yml to add your database name, login and password.\n\n```bash\n$ bundle install\n$ rake db:setup\n$ rake db:migrate\n$ rake db:seed\n$ rake assets:precompile\n$ rails server\n```\n\nYou can now launch you browser and access 127.0.0.1:3000.\n\n### Install Publify on a server\n\nYou can use your preferred installation method (e.g., Capistrano) to install\nPublify on a server. You will also need to set up the environment so it\ncontains at least `SECRET_KEY_BASE`. Your web server may allow you to set this,\nor you can consider using a tool like `dotenv`.\n\n### Install Publify on Heroku\n\nIn order to install Publify on Heroku, you’ll need to do some minor tweaks.\n\nFirst of all, you need to set up Amazon S3 storage to be able to upload files on\nyour blog. Set Heroku config vars.\n\n```bash\nheroku config:set PROVIDER=AWS\nheroku config:set AWS_ACCESS_KEY_ID=<your_aws_access_key_id>\nheroku config:set AWS_SECRET_ACCESS_KEY=<your_aws_secret_access_key>\nheroku config:set AWS_BUCKET=<your_aws_bucket_name>\n```\n\nNext, you need to update `Gemfile`. You should remove the `mysql2` and\n`sqlite3` gems, set the Ruby version, and add `rails_12factor`. The top of your\n`Gemfile` should look something like this:\n\n```ruby\nsource 'https://rubygems.org'\n\nruby '2.7.4' # Or whichever version you're running\ngem 'pg'\ngem 'rails_12factor'\n\ngem 'rails', '~> 5.2.6'\n```\n\nNext, to regenerate the Gemfile.lock, run:\n```bash\nbundle install\n```\n\nCommit your updated `Gemfile` and `Gemfile.lock`:\n\n```bash\ngit commit -am 'Update bundle for Heroku'\n```\n\nCreate a file `Procfile` containing the following:\n```\nweb: bundle exec puma -C config/puma.rb\n```\n\nCommit your new `Procfile`:\n```bash\ngit add Procfile\ngit ci -m 'Tell Heroku how to run Rails'\n```\n\nYou also need to set Rails' secret key base. Generate one using `rake secret`,\nthen set the Heroku config var:\n\n```bash\nheroku config:set SECRET_KEY_BASE=<your_generated_secret>\n```\n\nPush the repository to Heroku.\n\nWhen deploying for the first time, Heroku will automatically add a Database\nplugin to your instance and links it to the application. After the first\ndeployment, don't forget to run the database migration and seed.\n\n```bash\nheroku run rake db:migrate db:seed\n```\n\nIf application error has occurred after migration, you need to restart Heroku server.\n\n```bash\nheroku restart\n```\n\n## Resources\n\n- [Sidebar Plugins](https://github.com/publify/publify/wiki/Sidebar-plugins)\n- [In page Plugins](https://github.com/publify/publify/wiki/In-Page-Plugins)\n- [**Report a bug**](https://github.com/publify/publify/issues)\n- [**Frequently Asked Questions**](https://github.com/publify/publify/wiki/frequently-asked-questions)\n- [Publify on Twitter](https://twitter.com/getpublify)\n- IRC: \\#publify on irc.freenode.net\n\n## Maintainers\n\n### Current Maintainers\n\n**Frédéric de Villamil**\nblog: http://t37.net\n\n**Matijs van Zuijlen**\nblog: http://www.matijs.net/blog/\n\n**Thomas Lecavelier**\nblog: http://blog.ookook.fr/\n\n**Yannick François**\nblog: http://elsif.fr\n\n### Previous Maintainers & Notable Contributors\n\n**Cyril Mougel**\nblog: http://blog.shingara.fr\n\n**Davide D'Agostino**\nblog: http://www.lipsiasoft.com\n\n**Piers Cawley**\nblog: http://www.bofh.org.uk/\n\n**Scott Laird**\n\n**Kevin Ballard**\nblog: kevin.sb.org\n\n**Patrick Lenz**\n\n**Seth Hall**\n\nAnd [many more cool people who’ve one way or another contributed to\nPublify](https://github.com/publify/publify/graphs/contributors).\n\n**Original Author: Tobias Luetke**\nblog: http://blog.leetsoft.com/\n\nEnjoy,\nThe Publify team\n"
  },
  {
    "path": "Rakefile",
    "content": "# frozen_string_literal: true\n\n# Add your own tasks in files placed in lib/tasks ending in .rake,\n# for example lib/tasks/capistrano.rake, and they will automatically be available to Rake.\n\nrequire File.expand_path(\"config/application\", __dir__)\n\nRails.application.load_tasks\n"
  },
  {
    "path": "TODO.txt",
    "content": "AdminSidebar:\n- On the fly save of params\n- CSS\n- Remove on staged/active sidebars\n- Maybe some animations\n"
  },
  {
    "path": "app/assets/config/manifest.js",
    "content": ""
  },
  {
    "path": "app/assets/images/.keep",
    "content": ""
  },
  {
    "path": "app/controllers/application_controller.rb",
    "content": "# frozen_string_literal: true\n\nclass ApplicationController < ActionController::Base\n  protect_from_forgery with: :exception\nend\n"
  },
  {
    "path": "app/helpers/theme_helper.rb",
    "content": "# frozen_string_literal: true\n\nmodule ThemeHelper\n  # Adds per theme helpers if file exists. Ugly but at least it works.\n  # Use: just add your methods in yourtheme/helpers/theme_helper.rb\n  # If your theme is a plugin, it's better to just load relevant helpers in the\n  # initialization code instead.\n  Theme.find_all.each do |theme|\n    filename = File.join(theme.path, \"helpers\", \"theme_helper.rb\")\n    require filename if File.exist? filename\n  end\nend\n"
  },
  {
    "path": "app/mailers/application_mailer.rb",
    "content": "# frozen_string_literal: true\n\nclass ApplicationMailer < ActionMailer::Base\nend\n"
  },
  {
    "path": "app/models/application_record.rb",
    "content": "# frozen_string_literal: true\n\nclass ApplicationRecord < ActiveRecord::Base\n  self.abstract_class = true\nend\n"
  },
  {
    "path": "app/models/authors_sidebar.rb",
    "content": "# frozen_string_literal: true\n\nclass AuthorsSidebar < Sidebar\n  display_name \"Authors\"\n  description \"Displays a list of authors ordered by name with links to their\" \\\n              \" articles and profile\"\n\n  setting :count, true, label: \"Show articles number\", input_type: :checkbox\n\n  def authors\n    @authors = User.where(state: \"active\").order(:name)\n  end\nend\n\nSidebarRegistry.register_sidebar AuthorsSidebar\n"
  },
  {
    "path": "app/models/concerns/.keep",
    "content": ""
  },
  {
    "path": "app/models/livesearch_sidebar.rb",
    "content": "# frozen_string_literal: true\n\nclass LivesearchSidebar < Sidebar\n  description \"Adds livesearch to your Publify blog\"\n\n  setting :title, \"Search\"\nend\n\nSidebarRegistry.register_sidebar LivesearchSidebar\n"
  },
  {
    "path": "app/models/notes_sidebar.rb",
    "content": "# frozen_string_literal: true\n\nclass NotesSidebar < Sidebar\n  description \"Displays the latest notes\"\n  setting :title, \"Notes\"\n  setting :count, 5, label: \"Number of notes\"\n\n  attr_accessor :notes\n\n  def parse_request(_contents, params)\n    @notes = Note.published.page(params[:page]).per(count)\n  end\nend\n\nSidebarRegistry.register_sidebar NotesSidebar\n"
  },
  {
    "path": "app/models/popular_sidebar.rb",
    "content": "# frozen_string_literal: true\n\nclass PopularSidebar < Sidebar\n  description \"Displays the most popular posts\"\n  setting :title, \"Most popular\"\n  setting :count, 5, label: \"Number articles\"\n\n  attr_accessor :popular\n\n  def parse_request(_contents, _params)\n    @popular = Article.bestof.limit(5)\n  end\nend\n\nSidebarRegistry.register_sidebar PopularSidebar\n"
  },
  {
    "path": "app/models/xml_sidebar.rb",
    "content": "# frozen_string_literal: true\n\nclass XmlSidebar < Sidebar\n  display_name \"XML Syndication\"\n  description \"RSS and Atom feeds\"\n\n  setting :articles, true, input_type: :checkbox\n  setting :feedback, true, input_type: :checkbox\n  setting :article_comments, true, input_type: :checkbox\n  setting :tag_feeds, false, input_type: :checkbox\n\n  setting :format, \"atom\", input_type: :radio, choices: [%w(rss RSS), %w(atom Atom)]\n\n  def format_strip\n    strip_format = +format\n    strip_format ||= +\"atom\"\n    strip_format.gsub!(/\\d+/, \"\")\n    strip_format.gsub!(\"1.0\", \"\")\n    strip_format.gsub!(\"2.0\", \"\")\n    strip_format\n  end\nend\n\nSidebarRegistry.register_sidebar XmlSidebar\n"
  },
  {
    "path": "app/views/authors_sidebar/_content.html.erb",
    "content": "<% cache sidebar.authors do %>\n<% unless sidebar.authors.blank? %>\n  <h3 class=\"sidebar-title\"><%= t('.authors') %></h3>\n  <div class=\"sidebar-body\">\n    <ul id=\"categories\">\n      <% for user in sidebar.authors %>\n        <li>\n          <% count = \"(#{user.articles.count})\" %>\n          <%= link_to \"#{h(user.name)} #{count if sidebar.count}\", author_path(id: user.login) %>\n        </li>\n      <% end %>\n    </ul>\n  </div>\n<% end %>\n<% end %>\n"
  },
  {
    "path": "app/views/livesearch_sidebar/_content.html.erb",
    "content": "<h3 class=\"sidebar-title\">\n  <label for=\"q\"><%= sidebar.title %></label>\n</h3>\n<div class=\"sidebar-body\">\n  <%= form_tag({ controller: 'articles', action: 'search' }, { method: 'get', id: 'sform' }) do %>\n    <%= text_field_tag :q, '',\n                       id: 'live_search', size: 15, autocomplete: 'off', class: 'observable',\n                       data: { url: live_search_articles_url, target: '#search-results', spinner: '#search_spinner' } %>\n    <%= image_tag 'spinner-blue.gif', id: 'search_spinner', style: 'display:none;' %>\n  <% end %>\n  <div id=\"search-results\" class=\"results\"></div>\n</div>\n"
  },
  {
    "path": "app/views/notes_sidebar/_content.html.erb",
    "content": "<% unless sidebar.notes.blank? %>\n  <h3 class=\"sidebar-title\"><%= sidebar.title %></h3>\n  <div class=\"sidebar-body\">\n    <% sidebar.notes.each do |note| %>\n      <div class=\"statuses_sidebar\">\n        <%= author_picture note %>\n        <%= note.html(:body) %>\n        <%= link_to_permalink(note, display_date_and_time(note.published_at)) %>\n        <% unless note.twitter_id.blank? %>\n          <%= \" | #{link_to(t('.view_on_twitter'), note.twitter_url, class: 'u-syndication', rel: 'syndication')}\" %>\n        <% end %>\n      </div>\n    <% end %>\n  </div>\n<% end %>\n"
  },
  {
    "path": "app/views/popular_sidebar/_content.html.erb",
    "content": "<h3 class=\"sidebar-title\"><%= sidebar.title %></h3>\n<div class=\"sidemenu-content\">\n  <ul class=\"popular_sidebar\">\n    <% if sidebar.popular.empty? || sidebar.popular.size == 0 %>\n      <li class=\"alert\"><%= t('.nothing_to_show_yet') %> !</li>\n    <% else %>\n      <% sidebar.popular.each do |article| %>\n        <%= sprintf('%s (%s)', link_to_permalink(article, article.title), t('.comments', count: article.comment_count)) %>\n      <% end %>\n    <% end %>\n    </li>\n  </ul>\n</div>\n"
  },
  {
    "path": "app/views/xml_sidebar/_content.html.erb",
    "content": "<h3 class=\"sidebar-title\"><%= t('.syndicate') %></h3>\n<div class=\"sidebar-body\">\n  <ul>\n    <% if sidebar.articles %>\n      <li>\n        <a href=\"<%= url_for controller: 'articles', action: 'index', format: sidebar.format_strip %>\" title=\"Articles feed\">\n          <%= t('.articles') %>\n        </a>\n      </li>\n    <% end %>\n    <% if sidebar.feedback %>\n      <li>\n        <a href=\"<%= feedback_index_path(format: sidebar.format_strip) %>\" title=\"Feedback feed\">\n          <%= t('.feedback') %>\n        </a>\n      </li>\n    <% end %>\n    <% if sidebar.tag_feeds and controller.controller_name == 'tags' and controller.action_name == 'show' %>\n      <li>\n        <%= t('.tag') %>\n        <%= link_to(@tag.display_name, @tag.feed_url(sidebar.format_strip)) %>\n      </li>\n    <% end %>\n    <% if sidebar.article_comments and controller.controller_name == 'articles' and controller.action_name == 'redirect' %>\n      <li>\n        <%= link_to(@article.title, @article.feed_url(sidebar.format_strip)) %>\n      </li>\n    <% end %>\n  </ul>\n</div>\n"
  },
  {
    "path": "bin/bundle",
    "content": "#!/usr/bin/env ruby\nENV['BUNDLE_GEMFILE'] ||= File.expand_path('../Gemfile', __dir__)\nload Gem.bin_path('bundler', 'bundle')\n"
  },
  {
    "path": "bin/i18n-tasks",
    "content": "#!/usr/bin/env ruby\nbegin\n  load File.expand_path('../spring', __FILE__)\nrescue LoadError => e\n  raise unless e.message.include?('spring')\nend\nrequire 'bundler/setup'\nrequire 'logger'\nload Gem.bin_path('i18n-tasks', 'i18n-tasks')\n"
  },
  {
    "path": "bin/rails",
    "content": "#!/usr/bin/env ruby\nAPP_PATH = File.expand_path(\"../config/application\", __dir__)\nrequire_relative \"../config/boot\"\nrequire \"rails/commands\"\n"
  },
  {
    "path": "bin/rake",
    "content": "#!/usr/bin/env ruby\nrequire_relative \"../config/boot\"\nrequire \"rake\"\nRake.application.run\n"
  },
  {
    "path": "bin/rspec",
    "content": "#!/usr/bin/env ruby\nbegin\n  load File.expand_path('../spring', __FILE__)\nrescue LoadError => e\n  raise unless e.message.include?('spring')\nend\nrequire 'bundler/setup'\nload Gem.bin_path('rspec-core', 'rspec')\n"
  },
  {
    "path": "bin/setup",
    "content": "#!/usr/bin/env ruby\nrequire \"fileutils\"\n\n# path to your application root.\nAPP_ROOT = File.expand_path(\"..\", __dir__)\n\ndef system!(*args)\n  system(*args, exception: true)\nend\n\nFileUtils.chdir APP_ROOT do\n  # This script is a way to set up or update your development environment automatically.\n  # This script is idempotent, so that you can run it at any time and get an expectable outcome.\n  # Add necessary setup steps to this file.\n\n  puts \"== Installing dependencies ==\"\n  system! \"gem install bundler --conservative\"\n  system(\"bundle check\") || system!(\"bundle install\")\n\n  # puts \"\\n== Copying sample files ==\"\n  # unless File.exist?(\"config/database.yml\")\n  #   FileUtils.cp \"config/database.yml.sample\", \"config/database.yml\"\n  # end\n\n  puts \"\\n== Preparing database ==\"\n  system! \"bin/rails db:prepare\"\n\n  puts \"\\n== Removing old logs and tempfiles ==\"\n  system! \"bin/rails log:clear tmp:clear\"\n\n  puts \"\\n== Restarting application server ==\"\n  system! \"bin/rails restart\"\nend\n"
  },
  {
    "path": "bin/update",
    "content": "#!/usr/bin/env ruby\nrequire 'fileutils'\ninclude FileUtils\n\n# path to your application root.\nAPP_ROOT = File.expand_path('..', __dir__)\n\ndef system!(*args)\n  system(*args) || abort(\"\\n== Command #{args} failed ==\")\nend\n\nchdir APP_ROOT do\n  # This script is a way to update your development environment automatically.\n  # Add necessary update steps to this file.\n\n  puts '== Installing dependencies =='\n  system! 'gem install bundler --conservative'\n  system('bundle check') || system!('bundle install')\n\n  # Install JavaScript dependencies if using Yarn\n  # system('bin/yarn')\n\n  puts \"\\n== Updating database ==\"\n  system! 'bin/rails db:migrate'\n\n  puts \"\\n== Removing old logs and tempfiles ==\"\n  system! 'bin/rails log:clear tmp:clear'\n\n  puts \"\\n== Restarting application server ==\"\n  system! 'bin/rails restart'\nend\n"
  },
  {
    "path": "bin/yarn",
    "content": "#!/usr/bin/env ruby\nAPP_ROOT = File.expand_path('..', __dir__)\nDir.chdir(APP_ROOT) do\n  yarn = ENV[\"PATH\"].split(File::PATH_SEPARATOR).\n    select { |dir| File.expand_path(dir) != __dir__ }.\n    product([\"yarn\", \"yarn.cmd\", \"yarn.ps1\"]).\n    map { |dir, file| File.expand_path(file, dir) }.\n    find { |file| File.executable?(file) }\n\n  if yarn\n    exec yarn, *ARGV\n  else\n    $stderr.puts \"Yarn executable was not detected in the system.\"\n    $stderr.puts \"Download Yarn at https://yarnpkg.com/en/docs/install\"\n    exit 1\n  end\nend\n"
  },
  {
    "path": "config/application.rb",
    "content": "# frozen_string_literal: true\n\nrequire_relative \"boot\"\n\nrequire \"rails/all\"\n\n# Require the gems listed in Gemfile, including any gems\n# you've limited to :test, :development, or :production.\nBundler.require(*Rails.groups)\n\nmodule Publify\n  class Application < Rails::Application\n    # Initialize configuration defaults for originally generated Rails version.\n    config.load_defaults 7.0\n\n    # Please, add to the `ignore` list any other `lib` subdirectories that do\n    # not contain `.rb` files, or that should not be reloaded or eager loaded.\n    # Common ones are `templates`, `generators`, or `middleware`, for example.\n    config.autoload_lib(ignore: %w(assets tasks generators))\n    config.add_autoload_paths_to_load_path = false\n\n    # Configuration for the application, engines, and railties goes here.\n    #\n    # These settings can be overridden in specific environments using the files\n    # in config/environments, which are processed later.\n    #\n    # config.time_zone = \"Central Time (US & Canada)\"\n    # config.eager_load_paths << Rails.root.join(\"extras\")\n    config.action_dispatch.cookies_serializer = :hybrid\n  end\n\n  Theme.register_themes Rails.root.join(\"themes\")\nend\n"
  },
  {
    "path": "config/boot.rb",
    "content": "# frozen_string_literal: true\n\nENV[\"BUNDLE_GEMFILE\"] ||= File.expand_path(\"../Gemfile\", __dir__)\n\nrequire \"bundler/setup\" # Set up gems listed in the Gemfile.\n"
  },
  {
    "path": "config/cable.yml",
    "content": "development:\n  adapter: async\n\ntest:\n  adapter: test\n\nproduction:\n  adapter: redis\n  url: <%= ENV.fetch(\"REDIS_URL\") { \"redis://localhost:6379/1\" } %>\n  channel_prefix: publify_production\n"
  },
  {
    "path": "config/database.yml.mysql",
    "content": "login: &login\n  adapter: mysql2\n  host: 127.0.0.1\n  username: root\n  password: mysql\n  port: 3306\n\n\ndevelopment:\n  database: publify_dev\n  <<: *login\n\ntest:\n  database: publify_test\n  <<: *login\n\nproduction:\n  database: publify\n  <<: *login\n"
  },
  {
    "path": "config/database.yml.postgresql",
    "content": "login: &login\n  adapter: postgresql\n  host: localhost\n  port: 5432\n  username: postgres\n  password: postgres\n\nconnection: &connection\n  encoding: unicode\n  pool: 5\n\n\ndevelopment:\n  database: publify_dev\n  <<: *login\n  <<: *connection\n\ntest:\n  database: publify_test\n  <<: *login\n  <<: *connection\n\nproduction:\n  database: publify\n  <<: *login\n  <<: *connection\n"
  },
  {
    "path": "config/environment.rb",
    "content": "# frozen_string_literal: true\n\n# Load the Rails application.\nrequire_relative \"application\"\n\n# Initialize the Rails application.\nRails.application.initialize!\n"
  },
  {
    "path": "config/environments/development.rb",
    "content": "# frozen_string_literal: true\n\nrequire \"active_support/core_ext/integer/time\"\n\nRails.application.configure do\n  # Settings specified here will take precedence over those in config/application.rb.\n\n  # In the development environment your application's code is reloaded any time\n  # it changes. This slows down response time but is perfect for development\n  # since you don't have to restart the web server when you make code changes.\n  config.enable_reloading = true\n\n  # Do not eager load code on boot.\n  config.eager_load = false\n\n  # Show full error reports.\n  config.consider_all_requests_local = true\n\n  # Enable server timing\n  config.server_timing = true\n\n  # Enable/disable caching. By default caching is disabled.\n  # Run rails dev:cache to toggle caching.\n  if Rails.root.join(\"tmp/caching-dev.txt\").exist?\n    config.action_controller.perform_caching = true\n    config.action_controller.enable_fragment_cache_logging = true\n\n    config.cache_store = :memory_store\n    config.public_file_server.headers = {\n      \"Cache-Control\" => \"public, max-age=#{2.days.to_i}\"\n    }\n  else\n    config.action_controller.perform_caching = false\n\n    config.cache_store = :null_store\n  end\n\n  # Store uploaded files on the local file system (see config/storage.yml for options).\n  config.active_storage.service = :local\n\n  # Don't care if the mailer can't send.\n  config.action_mailer.raise_delivery_errors = false\n\n  config.action_mailer.perform_caching = false\n\n  # Print deprecation notices to the Rails logger.\n  config.active_support.deprecation = :log\n\n  # Raise exceptions for disallowed deprecations.\n  config.active_support.disallowed_deprecation = :raise\n\n  # Tell Active Support which deprecation messages to disallow.\n  config.active_support.disallowed_deprecation_warnings = []\n\n  # Raise an error on page load if there are pending migrations.\n  config.active_record.migration_error = :page_load\n\n  # Highlight code that triggered database queries in logs.\n  config.active_record.verbose_query_logs = true\n\n  # Highlight code that enqueued background job in logs.\n  config.active_job.verbose_enqueue_logs = true\n\n  # Suppress logger output for asset requests.\n  config.assets.quiet = true\n\n  # Raises error for missing translations.\n  # config.i18n.raise_on_missing_translations = true\n\n  # Annotate rendered view with file names.\n  # config.action_view.annotate_rendered_view_with_filenames = true\n\n  # Uncomment if you wish to allow Action Cable access from any origin.\n  # config.action_cable.disable_request_forgery_protection = true\n\n  # Raise error when a before_action's only/except options reference missing actions\n  config.action_controller.raise_on_missing_callback_actions = true\nend\n"
  },
  {
    "path": "config/environments/production.rb",
    "content": "# frozen_string_literal: true\n\nrequire \"active_support/core_ext/integer/time\"\n\nRails.application.configure do\n  # Settings specified here will take precedence over those in config/application.rb.\n\n  # Code is not reloaded between requests.\n  config.enable_reloading = false\n\n  # Eager load code on boot. This eager loads most of Rails and\n  # your application in memory, allowing both threaded web servers\n  # and those relying on copy on write to perform better.\n  # Rake tasks automatically ignore this option for performance.\n  config.eager_load = true\n\n  # Full error reports are disabled and caching is turned on.\n  config.consider_all_requests_local = false\n  config.action_controller.perform_caching = true\n\n  # Ensures that a master key has been made available in\n  # ENV[\"RAILS_MASTER_KEY\"], config/master.key, or an environment key such as\n  # config/credentials/production.key. This key is used to decrypt credentials\n  # (and other encrypted files).\n  # config.require_master_key = true\n\n  # Disable serving static files from `public/`, relying on NGINX/Apache to do so instead.\n  # config.public_file_server.enabled = false\n\n  # Compress CSS using a preprocessor.\n  # config.assets.css_compressor = :sass\n\n  # Do not fall back to assets pipeline if a precompiled asset is missed.\n  config.assets.compile = false\n\n  # Enable serving of images, stylesheets, and JavaScripts from an asset server.\n  # config.asset_host = \"http://assets.example.com\"\n\n  # Specifies the header that your server uses for sending files.\n  # config.action_dispatch.x_sendfile_header = \"X-Sendfile\" # for Apache\n  # config.action_dispatch.x_sendfile_header = \"X-Accel-Redirect\" # for NGINX\n\n  # Store uploaded files on the local file system (see config/storage.yml for options).\n  config.active_storage.service = :local\n\n  # Mount Action Cable outside main process or domain.\n  # config.action_cable.mount_path = nil\n  # config.action_cable.url = \"wss://example.com/cable\"\n  # config.action_cable.allowed_request_origins =\n  #   [ \"http://example.com\", /http:\\/\\/example.*/ ]\n\n  # Assume all access to the app is happening through a SSL-terminating reverse proxy.\n  # Can be used together with config.force_ssl for Strict-Transport-Security\n  # and secure cookies.\n  # config.assume_ssl = true\n\n  # Force all access to the app over SSL, use Strict-Transport-Security, and\n  # use secure cookies.\n  config.force_ssl = true\n\n  # Log to STDOUT by default\n  config.logger = ActiveSupport::Logger.new($stdout)\n    .tap  { |logger| logger.formatter = Logger::Formatter.new }\n    .then { |logger| ActiveSupport::TaggedLogging.new(logger) }\n\n  # Prepend all log lines with the following tags.\n  config.log_tags = [:request_id]\n\n  # \"info\" includes generic and useful information about system operation, but\n  # avoids logging too much information to avoid inadvertent exposure of\n  # personally identifiable information (PII). If you want to log everything,\n  # set the level to \"debug\".\n  config.log_level = ENV.fetch(\"RAILS_LOG_LEVEL\", \"info\")\n\n  # Use a different cache store in production.\n  # config.cache_store = :mem_cache_store\n\n  # Use a real queuing backend for Active Job (and separate queues per environment).\n  # config.active_job.queue_adapter = :resque\n  # config.active_job.queue_name_prefix = \"publify_production\"\n\n  config.action_mailer.perform_caching = false\n\n  # Ignore bad email addresses and do not raise email delivery errors.\n  # Set this to true and configure the email server for immediate delivery to\n  # raise delivery errors.\n  # config.action_mailer.raise_delivery_errors = false\n\n  # Enable locale fallbacks for I18n (makes lookups for any locale fall back to\n  # the I18n.default_locale when a translation cannot be found).\n  config.i18n.fallbacks = true\n\n  # Don't log any deprecations.\n  config.active_support.report_deprecations = false\n\n  # Do not dump schema after migrations.\n  config.active_record.dump_schema_after_migration = false\n\n  # Enable DNS rebinding protection and other `Host` header attacks.\n  # config.hosts = [\n  #   \"example.com\",     # Allow requests from example.com\n  #   /.*\\.example\\.com/ # Allow requests from subdomains like `www.example.com`\n  # ]\n  # Skip DNS rebinding protection for the default health check endpoint.\n  # config.host_authorization = { exclude: ->(request) { request.path == \"/up\" } }\nend\n"
  },
  {
    "path": "config/environments/test.rb",
    "content": "# frozen_string_literal: true\n\nrequire \"active_support/core_ext/integer/time\"\n\n# The test environment is used exclusively to run your application's\n# test suite. You never need to work with it otherwise. Remember that\n# your test database is \"scratch space\" for the test suite and is wiped\n# and recreated between test runs. Don't rely on the data there!\n\nRails.application.configure do\n  # Settings specified here will take precedence over those in config/application.rb.\n\n  # While tests run files are not watched, reloading is not necessary.\n  config.enable_reloading = false\n\n  # Eager loading loads your entire application. When running a single test locally,\n  # this is usually not necessary, and can slow down your test suite. However, it's\n  # recommended that you enable it in continuous integration systems to ensure eager\n  # loading is working properly before deploying your code.\n  config.eager_load = ENV[\"CI\"].present?\n\n  # Configure public file server for tests with Cache-Control for performance.\n  config.public_file_server.enabled = true\n  config.public_file_server.headers = {\n    \"Cache-Control\" => \"public, max-age=#{1.hour.to_i}\"\n  }\n\n  # Show full error reports and disable caching.\n  config.consider_all_requests_local = true\n  config.action_controller.perform_caching = false\n  config.cache_store = :null_store\n\n  # Render exception templates for rescuable exceptions and raise for other exceptions.\n  config.action_dispatch.show_exceptions = :rescuable\n\n  # Disable request forgery protection in test environment.\n  config.action_controller.allow_forgery_protection = false\n\n  # Store uploaded files on the local file system in a temporary directory.\n  config.active_storage.service = :test\n\n  config.action_mailer.perform_caching = false\n\n  # Tell Action Mailer not to deliver emails to the real world.\n  # The :test delivery method accumulates sent emails in the\n  # ActionMailer::Base.deliveries array.\n  config.action_mailer.delivery_method = :test\n\n  # Print deprecation notices to the stderr.\n  config.active_support.deprecation = :stderr\n\n  # Raise exceptions for disallowed deprecations.\n  config.active_support.disallowed_deprecation = :raise\n\n  # Tell Active Support which deprecation messages to disallow.\n  config.active_support.disallowed_deprecation_warnings = []\n\n  # Raises error for missing translations.\n  # config.i18n.raise_on_missing_translations = true\n\n  # Annotate rendered view with file names.\n  # config.action_view.annotate_rendered_view_with_filenames = true\n\n  # Raise error when a before_action's only/except options reference missing actions\n  config.action_controller.raise_on_missing_callback_actions = true\nend\n"
  },
  {
    "path": "config/filemanager.yml",
    "content": "image.type: jpg gif png\nflash.type: swf\nmovie.type: mov avi wmv\nrm.type: rm rmvb\nplain.type: txt ini inf html htm rb jsp php asp\noffice.type: doc dot xls xla ppt pps ppz pot hlp chm ods\nword.type: doc dot\nexcel.type: xls xla ods\nppt.type: ppt pps ppz pot\nhelp.type: hlp chm\nnone.type: rar zip\nresources.url: /files\nresources.path: <%= ::Rails.root.to_s %>/public/files\nencoding.to: UTF-8\nencoding.from: UTF-8\ntemp.dir:\n"
  },
  {
    "path": "config/i18n-tasks.yml",
    "content": "# i18n-tasks finds and manages missing and unused translations: https://github.com/glebm/i18n-tasks\n\n# The \"main\" locale.\nbase_locale: en\n\n# <% publify_core_path = %x[bundle info --path publify_core].chomp %>\n# <% rails_i18n_path = %x[bundle info --path rails-i18n].chomp %>\n\n# Read and write translations.\ndata:\n  # Locale files or `File.find` patterns where translations are read from:\n  read:\n    - config/locales/%{locale}.yml\n    - config/locales/sidebars.%{locale}.yml\n\n  # External locale data (e.g. gems).\n  # This data is not considered unused and is never written to.\n  external:\n    - \"<%= rails_i18n_path %>/rails/locale/%{locale}.yml\"\n    - \"<%= publify_core_path %>/config/locales/%{locale}.yml\"\n    - \"<%= publify_core_path %>/config/locales/sidebars.%{locale}.yml\"\n\n  # Locale files to write new keys to, based on a list of key pattern => file\n  # rules. Matched from top to bottom:\n  # `i18n-tasks normalize -p` will force move the keys according to these rules\n  write:\n    - ['*_sidebar.*', 'config/locales/sidebars.%{locale}.yml']\n    - config/locales/%{locale}.yml\n\n# Find translate calls\nsearch:\n  ## Paths or `File.find` patterns to search in:\n  paths:\n    - app/\n    - lib/\n    - themes/bootstrap-2/\n    - <%= publify_core_path %>/app/\n\n  ## Root directories for relative keys resolution.\n  relative_roots:\n    - app/controllers\n    - app/helpers\n    - app/mailers\n    - app/presenters\n    - app/views\n    - themes/bootstrap-2/views\n    - <%= publify_core_path %>/app/views/\n\n## Do not consider these keys missing:\nignore_missing:\n  - 'devise.*'\n\n## Consider these keys used:\nignore_unused:\n  - 'time.formats.*'\n  - 'layouts.default.designed_by'\n  - 'date.*'\n  - 'activerecord.{attributes,errors,models}.*'\n"
  },
  {
    "path": "config/initializers/application_controller_renderer.rb",
    "content": "# frozen_string_literal: true\n\n# Be sure to restart your server when you modify this file.\n\n# ActiveSupport::Reloader.to_prepare do\n#   ApplicationController.renderer.defaults.merge!(\n#     http_host: 'example.org',\n#     https: false\n#   )\n# end\n"
  },
  {
    "path": "config/initializers/assets.rb",
    "content": "# frozen_string_literal: true\n\n# Be sure to restart your server when you modify this file.\n\n# Version of your assets, change this if you want to expire all your assets.\nRails.application.config.assets.version = \"1.0\"\n\n# Add additional assets to the asset load path.\n# Rails.application.config.assets.paths << Emoji.images_path\n\n# Precompile additional assets.\n# application.js, application.css, and all non-JS/CSS in the app/assets\n# folder are already added.\n# Rails.application.config.assets.precompile += %w( admin.js admin.css )\n"
  },
  {
    "path": "config/initializers/backtrace_silencers.rb",
    "content": "# frozen_string_literal: true\n\n# Be sure to restart your server when you modify this file.\n\n# You can add backtrace silencers for libraries that you're using but don't\n# wish to see in your backtraces.\n# Rails.backtrace_cleaner.add_silencer { |line| /my_noisy_library/.match?(line) }\n\n# You can also remove all the silencers if you're trying to debug a problem\n# that might stem from framework code by setting BACKTRACE=1 before calling\n# your invocation, like \"BACKTRACE=1 ./bin/rails runner 'MyClass.perform'\".\nRails.backtrace_cleaner.remove_silencers! if ENV[\"BACKTRACE\"]\n"
  },
  {
    "path": "config/initializers/carrierwave.rb",
    "content": "# frozen_string_literal: true\n\nif Rails.env.in?(%(test cucumber))\n  CarrierWave.configure do |config|\n    config.storage = :file\n    config.enable_processing = false\n  end\nelse\n  CarrierWave.configure do |config|\n    if ENV[\"provider\"] == \"AWS\"\n      config.storage = :fog\n\n      config.fog_credentials = {\n        provider: \"AWS\",\n        aws_access_key_id: ENV.fetch(\"aws_access_key_id\"),\n        aws_secret_access_key: ENV.fetch(\"aws_secret_access_key\")\n      }\n\n      config.fog_directory  = ENV.fetch(\"aws_bucket\")\n      config.fog_public     = true\n      config.fog_attributes = { \"Cache-Control\" => \"max-age=315576000\" }\n    else\n      config.storage = :file\n      config.permissions = 0o666\n      config.directory_permissions = 0o777\n    end\n  end\nend\n"
  },
  {
    "path": "config/initializers/content_security_policy.rb",
    "content": "# frozen_string_literal: true\n\n# Be sure to restart your server when you modify this file.\n\n# Define an application-wide content security policy.\n# See the Securing Rails Applications Guide for more information:\n# https://guides.rubyonrails.org/security.html#content-security-policy-header\n\n# Rails.application.configure do\n#   config.content_security_policy do |policy|\n#     policy.default_src :self, :https\n#     policy.font_src    :self, :https, :data\n#     policy.img_src     :self, :https, :data\n#     policy.object_src  :none\n#     policy.script_src  :self, :https\n#     policy.style_src   :self, :https\n#     # Specify URI for violation reports\n#     # policy.report_uri \"/csp-violation-report-endpoint\"\n#   end\n#\n#   # Generate session nonces for permitted importmap, inline scripts, and inline styles.\n#   config.content_security_policy_nonce_generator = ->(request) { request.session.id.to_s }\n#   config.content_security_policy_nonce_directives = %w(script-src style-src)\n#\n#   # Report violations without enforcing the policy.\n#   # config.content_security_policy_report_only = true\n# end\n"
  },
  {
    "path": "config/initializers/cookies_serializer.rb",
    "content": "# frozen_string_literal: true\n\n# Be sure to restart your server when you modify this file.\n\n# Specify a serializer for the signed and encrypted cookie jars.\n# Valid options are :json, :marshal, and :hybrid.\nRails.application.config.action_dispatch.cookies_serializer = :json\n"
  },
  {
    "path": "config/initializers/filter_parameter_logging.rb",
    "content": "# frozen_string_literal: true\n\n# Be sure to restart your server when you modify this file.\n\n# Configure parameters to be partially matched (e.g. passw matches password)\n# and filtered from the log file.\n# Use this to limit dissemination of sensitive information.\n# See the ActiveSupport::ParameterFilter documentation for supported notations\n# and behaviors.\nRails.application.config.filter_parameters += [\n  :passw, :secret, :token, :_key, :crypt, :salt, :certificate, :otp, :ssn\n]\n"
  },
  {
    "path": "config/initializers/flickr.rb",
    "content": "# frozen_string_literal: true\n\nrequire \"flickraw\"\n\n# Prepare needed FlickRaw methods\nFlickRaw::Flickr.build([\"flickr.photos.getInfo\", \"flickr.photos.getSizes\"])\n\n# Please get your own API key for setting up this.\n# You can request it at\n# https://www.flickr.com/services/api/misc.api_keys.html\nFlickRaw.api_key = \"\"\nFlickRaw.shared_secret = \"\"\n"
  },
  {
    "path": "config/initializers/inflections.rb",
    "content": "# frozen_string_literal: true\n\n# Be sure to restart your server when you modify this file.\n\n# Add new inflection rules using the following format. Inflections\n# are locale specific, and you may define rules for as many different\n# locales as you wish. All of these examples are active by default:\n# ActiveSupport::Inflector.inflections(:en) do |inflect|\n#   inflect.plural /^(ox)$/i, \"\\\\1en\"\n#   inflect.singular /^(ox)en/i, \"\\\\1\"\n#   inflect.irregular \"person\", \"people\"\n#   inflect.uncountable %w( fish sheep )\n# end\n\n# These inflection rules are supported but not enabled by default:\n# ActiveSupport::Inflector.inflections(:en) do |inflect|\n#   inflect.acronym \"RESTful\"\n# end\n"
  },
  {
    "path": "config/initializers/mime_types.rb",
    "content": "# frozen_string_literal: true\n\n# Be sure to restart your server when you modify this file.\n\n# Add new mime types for use in respond_to blocks:\n# Mime::Type.register \"text/richtext\", :rtf\n"
  },
  {
    "path": "config/initializers/new_framework_defaults_7_1.rb",
    "content": "# frozen_string_literal: true\n\n# Be sure to restart your server when you modify this file.\n#\n# This file eases your Rails 7.1 framework defaults upgrade.\n#\n# Uncomment each configuration one by one to switch to the new default.\n# Once your application is ready to run with all new defaults, you can remove\n# this file and set the `config.load_defaults` to `7.1`.\n#\n# Read the Guide for Upgrading Ruby on Rails for more info on each option.\n# https://guides.rubyonrails.org/upgrading_ruby_on_rails.html\n\n###\n# No longer add autoloaded paths into `$LOAD_PATH`. This means that you won't be able\n# to manually require files that are managed by the autoloader, which you shouldn't do anyway.\n#\n# This will reduce the size of the load path, making `require` faster if you don't use bootsnap, or reduce the size\n# of the bootsnap cache if you use it.\n#\n# To set this configuration, add the following line to `config/application.rb` (NOT this file):\n#   config.add_autoload_paths_to_load_path = false\n\n###\n# Remove the default X-Download-Options headers since it is used only by Internet Explorer.\n# If you need to support Internet Explorer, add back `\"X-Download-Options\" => \"noopen\"`.\n#++\nRails.application.config.action_dispatch.default_headers = {\n  \"X-Frame-Options\" => \"SAMEORIGIN\",\n  \"X-XSS-Protection\" => \"0\",\n  \"X-Content-Type-Options\" => \"nosniff\",\n  \"X-Permitted-Cross-Domain-Policies\" => \"none\",\n  \"Referrer-Policy\" => \"strict-origin-when-cross-origin\"\n}\n\n###\n# Do not treat an `ActionController::Parameters` instance\n# as equal to an equivalent `Hash` by default.\n#++\nRails.application.config.action_controller.allow_deprecated_parameters_hash_equality = false\n\n###\n# Active Record Encryption now uses SHA-256 as its hash digest algorithm.\n#\n# There are 3 scenarios to consider.\n#\n# 1. If you have data encrypted with previous Rails versions, and you have\n# +config.active_support.key_generator_hash_digest_class+ configured as SHA1 (the default\n# before Rails 7.0), you need to configure SHA-1 for Active Record Encryption too:\n#++\n# Rails.application.config.active_record.encryption.hash_digest_class = OpenSSL::Digest::SHA1\n#\n# 2. If you have +config.active_support.key_generator_hash_digest_class+ configured as SHA256 (the new default\n# in 7.0), then you need to configure SHA-256 for Active Record Encryption:\n#++\n# Rails.application.config.active_record.encryption.hash_digest_class = OpenSSL::Digest::SHA256\n#\n# 3. If you don't currently have data encrypted with Active Record encryption, you can disable this setting to\n# configure the default behavior starting 7.1+:\n#++\nRails.application.config.active_record.encryption.support_sha1_for_non_deterministic_encryption = false\n\n###\n# No longer run after_commit callbacks on the first of multiple Active Record\n# instances to save changes to the same database row within a transaction.\n# Instead, run these callbacks on the instance most likely to have internal\n# state which matches what was committed to the database, typically the last\n# instance to save.\n#++\nRails.application.config.active_record.run_commit_callbacks_on_first_saved_instances_in_transaction = false\n\n###\n# Configures SQLite with a strict strings mode, which disables double-quoted string literals.\n#\n# SQLite has some quirks around double-quoted string literals.\n# It first tries to consider double-quoted strings as identifier names, but if they don't exist\n# it then considers them as string literals. Because of this, typos can silently go unnoticed.\n# For example, it is possible to create an index for a non existing column.\n# See https://www.sqlite.org/quirks.html#double_quoted_string_literals_are_accepted for more details.\n#++\nRails.application.config.active_record.sqlite3_adapter_strict_strings_by_default = true\n\n###\n# Disable deprecated singular associations names.\n#++\nRails.application.config.active_record.allow_deprecated_singular_associations_name = false\n\n###\n# Enable the Active Job `BigDecimal` argument serializer, which guarantees\n# roundtripping. Without this serializer, some queue adapters may serialize\n# `BigDecimal` arguments as simple (non-roundtrippable) strings.\n#\n# When deploying an application with multiple replicas, old (pre-Rails 7.1)\n# replicas will not be able to deserialize `BigDecimal` arguments from this\n# serializer. Therefore, this setting should only be enabled after all replicas\n# have been successfully upgraded to Rails 7.1.\n#++\n# Rails.application.config.active_job.use_big_decimal_serializer = true\n\n###\n# Specify if an `ArgumentError` should be raised if `Rails.cache` `fetch` or\n# `write` are given an invalid `expires_at` or `expires_in` time.\n# Options are `true`, and `false`. If `false`, the exception will be reported\n# as `handled` and logged instead.\n#++\nRails.application.config.active_support.raise_on_invalid_cache_expiration_time = true\n\n###\n# Specify whether Query Logs will format tags using the SQLCommenter format\n# (https://open-telemetry.github.io/opentelemetry-sqlcommenter/), or using the legacy format.\n# Options are `:legacy` and `:sqlcommenter`.\n#++\nRails.application.config.active_record.query_log_tags_format = :sqlcommenter\n\n###\n# Specify the default serializer used by `MessageEncryptor` and `MessageVerifier`\n# instances.\n#\n# The legacy default is `:marshal`, which is a potential vector for\n# deserialization attacks in cases where a message signing secret has been\n# leaked.\n#\n# In Rails 7.1, the new default is `:json_allow_marshal` which serializes and\n# deserializes with `ActiveSupport::JSON`, but can fall back to deserializing\n# with `Marshal` so that legacy messages can still be read.\n#\n# In Rails 7.2, the default will become `:json` which serializes and\n# deserializes with `ActiveSupport::JSON` only.\n#\n# Alternatively, you can choose `:message_pack` or `:message_pack_allow_marshal`,\n# which serialize with `ActiveSupport::MessagePack`. `ActiveSupport::MessagePack`\n# can roundtrip some Ruby types that are not supported by JSON, and may provide\n# improved performance, but it requires the `msgpack` gem.\n#\n# For more information, see\n# https://guides.rubyonrails.org/v7.1/configuring.html#config-active-support-message-serializer\n#\n# If you are performing a rolling deploy of a Rails 7.1 upgrade, wherein servers\n# that have not yet been upgraded must be able to read messages from upgraded\n# servers, first deploy without changing the serializer, then set the serializer\n# in a subsequent deploy.\n#++\nRails.application.config.active_support.message_serializer = :json_allow_marshal\n\n###\n# Enable a performance optimization that serializes message data and metadata\n# together. This changes the message format, so messages serialized this way\n# cannot be read by older versions of Rails. However, messages that use the old\n# format can still be read, regardless of whether this optimization is enabled.\n#\n# To perform a rolling deploy of a Rails 7.1 upgrade, wherein servers that have\n# not yet been upgraded must be able to read messages from upgraded servers,\n# leave this optimization off on the first deploy, then enable it on a\n# subsequent deploy.\n#++\nRails.application.config.active_support.use_message_serializer_for_metadata = true\n\n###\n# Set the maximum size for Rails log files.\n#\n# `config.load_defaults 7.1` does not set this value for environments other than\n# development and test.\n#++\nRails.application.config.log_file_size = 100 * 1024 * 1024 if Rails.env.local?\n\n###\n# Enable raising on assignment to attr_readonly attributes. The previous\n# behavior would allow assignment but silently not persist changes to the\n# database.\n#++\nRails.application.config.active_record.raise_on_assign_to_attr_readonly = true\n\n###\n# Enable validating only parent-related columns for presence when the parent is mandatory.\n# The previous behavior was to validate the presence of the parent record, which performed an extra query\n# to get the parent every time the child record was updated, even when parent has not changed.\n#++\nRails.application.config.active_record.belongs_to_required_validates_foreign_key = false\n\n###\n# Enable precompilation of `config.filter_parameters`. Precompilation can\n# improve filtering performance, depending on the quantity and types of filters.\n#++\nRails.application.config.precompile_filter_parameters = true\n\n###\n# Enable before_committed! callbacks on all enrolled records in a transaction.\n# The previous behavior was to only run the callbacks on the first copy of a record\n# if there were multiple copies of the same record enrolled in the transaction.\n#++\nRails.application.config.active_record.before_committed_on_all_records = true\n\n###\n# Disable automatic column serialization into YAML.\n# To keep the historic behavior, you can set it to `YAML`, however it is\n# recommended to explicitly define the serialization method for each column\n# rather than to rely on a global default.\n#++\nRails.application.config.active_record.default_column_serializer = nil\n\n###\n# Enable a performance optimization that serializes Active Record models\n# in a faster and more compact way.\n#\n# To perform a rolling deploy of a Rails 7.1 upgrade, wherein servers that have\n# not yet been upgraded must be able to read caches from upgraded servers,\n# leave this optimization off on the first deploy, then enable it on a\n# subsequent deploy.\n#++\n# Rails.application.config.active_record.marshalling_format_version = 7.1\n\n###\n# Run `after_commit` and `after_*_commit` callbacks in the order they are defined in a model.\n# This matches the behaviour of all other callbacks.\n# In previous versions of Rails, they ran in the inverse order.\n#++\nRails.application.config.active_record.run_after_transaction_callbacks_in_order_defined = true\n\n###\n# Whether a `transaction` block is committed or rolled back when exited via `return`, `break` or `throw`.\n#++\nRails.application.config.active_record.commit_transaction_on_non_local_return = true\n\n###\n# Controls when to generate a value for <tt>has_secure_token</tt> declarations.\n#++\nRails.application.config.active_record.generate_secure_token_on = :initialize\n\n###\n# ** Please read carefully, this must be configured in config/application.rb **\n#\n# Change the format of the cache entry.\n#\n# Changing this default means that all new cache entries added to the cache\n# will have a different format that is not supported by Rails 7.0\n# applications.\n#\n# Only change this value after your application is fully deployed to Rails 7.1\n# and you have no plans to rollback.\n# When you're ready to change format, add this to `config/application.rb` (NOT\n# this file):\n#   config.active_support.cache_format_version = 7.1\n\n###\n# Configure Action View to use HTML5 standards-compliant sanitizers when they are supported on your\n# platform.\n#\n# `Rails::HTML::Sanitizer.best_supported_vendor` will cause Action View to use HTML5-compliant\n# sanitizers if they are supported, else fall back to HTML4 sanitizers.\n#\n# In previous versions of Rails, Action View always used `Rails::HTML4::Sanitizer` as its vendor.\n#++\nRails.application.config.action_view.sanitizer_vendor = Rails::HTML::Sanitizer.best_supported_vendor\n\n###\n# Configure Action Text to use an HTML5 standards-compliant sanitizer when it is supported on your\n# platform.\n#\n# `Rails::HTML::Sanitizer.best_supported_vendor` will cause Action Text to use HTML5-compliant\n# sanitizers if they are supported, else fall back to HTML4 sanitizers.\n#\n# In previous versions of Rails, Action Text always used `Rails::HTML4::Sanitizer` as its vendor.\n#++\nRails.application.config.action_text.sanitizer_vendor = Rails::HTML::Sanitizer.best_supported_vendor\n\n###\n# Configure the log level used by the DebugExceptions middleware when logging\n# uncaught exceptions during requests.\n#++\nRails.application.config.action_dispatch.debug_exception_log_level = :error\n\n###\n# Configure the test helpers in Action View, Action Dispatch, and rails-dom-testing to use HTML5\n# parsers.\n#\n# Nokogiri::HTML5 isn't supported on JRuby, so JRuby applications must set this to :html4.\n#\n# In previous versions of Rails, these test helpers always used an HTML4 parser.\n#++\nRails.application.config.dom_testing_default_html_version = :html5\n"
  },
  {
    "path": "config/initializers/non_digest_assets.rb",
    "content": "# frozen_string_literal: true\n\nNonDigestAssets.asset_selectors = [/\\.(?:svg|eot|woff|ttf)$/]\n"
  },
  {
    "path": "config/initializers/permissions_policy.rb",
    "content": "# frozen_string_literal: true\n\n# Be sure to restart your server when you modify this file.\n\n# Define an application-wide HTTP permissions policy. For further\n# information see: https://developers.google.com/web/updates/2018/06/feature-policy\n\n# Rails.application.config.permissions_policy do |policy|\n#   policy.camera      :none\n#   policy.gyroscope   :none\n#   policy.microphone  :none\n#   policy.usb         :none\n#   policy.fullscreen  :self\n#   policy.payment     :self, \"https://secure.example.com\"\n# end\n"
  },
  {
    "path": "config/initializers/rack_attack.rb",
    "content": "# frozen_string_literal: true\n\n# Throttle login attempts\nRack::Attack.throttle(\"logins/ip\", limit: 20, period: 1.hour) do |req|\n  req.ip if req.post? && req.path.start_with?(\"/users/sign_in\")\nend\n\n# Throttle password reset attempts\nRack::Attack.throttle(\"password-reset-requests/ip\", limit: 20, period: 1.hour) do |req|\n  req.ip if req.post? && req.path.start_with?(\"/users/password\")\nend\n\nActiveSupport::Notifications\n  .subscribe(\"rack.attack\") do |_name, _start, _finish, _request_id, req|\n  Rails.logger.info \"Throttled #{req.env[\"rack.attack.match_discriminator\"]}\"\nend\n"
  },
  {
    "path": "config/initializers/recaptcha.rb",
    "content": "# frozen_string_literal: true\n\nRecaptcha.configure do |config|\n  config.site_key = \"YourAPIkeysHere_yyyyyyyyyyyyyyyyy\"\n  config.secret_key = \"YourAPIkeysHere_xxxxxxxxxxxxxxxxx\"\nend\n"
  },
  {
    "path": "config/initializers/session_store.rb",
    "content": "# frozen_string_literal: true\n\n# Be sure to restart your server when you modify this file.\n\nRails.application.config.session_store(:active_record_store,\n                                       key: \"_publify_blog_session\",\n                                       secure: Rails.env.production?)\n"
  },
  {
    "path": "config/initializers/wrap_parameters.rb",
    "content": "# frozen_string_literal: true\n\n# Be sure to restart your server when you modify this file.\n\n# This file contains settings for ActionController::ParamsWrapper which\n# is enabled by default.\n\n# Enable parameter wrapping for JSON. You can disable this by setting :format\n# to an empty array.\nActiveSupport.on_load(:action_controller) do\n  wrap_parameters format: [:json]\nend\n\n# To enable root element in JSON for ActiveRecord objects.\n# ActiveSupport.on_load(:active_record) do\n#   self.include_root_in_json = true\n# end\n"
  },
  {
    "path": "config/locales/ar.yml",
    "content": "---\nar:\n  articles:\n    comment_counter:\n      comments:\n        few: بعض التعليقات\n        many: أكثر من تعليق\n        one: 1 تعليق\n        other: \"%{count} تعليقات\"\n        two: تعليقان\n        zero: لا توجد تعليقات\n    comment_form:\n      comment: تعليق\n      email_address: عنوان البريد الإلكتروني\n      your_website: موقعك\n    meta:\n      published_on_html: تم النشر في %{publish_date_and_time} بواسطة %{by}, علامات\n        %{tags}\n    read:\n      add_me_to_twitter: تابعني على تويتر\n      if_you_liked_this_article_you_can_html: لو أعجبتك هذه المقالة يمكنك %{add_twitter}\n      trackbacks_for: التتبع لـ\n    search:\n      search_results_for: نتائج البحث لـ '%{query}'\n  comments:\n    comment:\n      by: بواسطة\n  layouts:\n    default:\n      archives: أرشيفات\n      statuses: حالات\n  pagination:\n    next: القادم\n    previous: السابق\n"
  },
  {
    "path": "config/locales/da.yml",
    "content": "---\nda:\n  articles:\n    comment_counter:\n      comments:\n        one: 1 kommentar\n        other: \"%{count} kommentarer\"\n        zero: Ingen kommentarer\n    comment_form:\n      comment: Kommenter\n      email_address: Email adresse\n      your_website: Din hjemmeside\n    meta:\n      published_on_html: Udgivet %{publish_date_and_time} af %{by}, tags %{tags}\n    read:\n      add_me_to_twitter: Tilføj mig på Twitter\n      if_you_liked_this_article_you_can_html: Hvis du kan lide denne artikel så %{add_twitter}\n      trackbacks_for: Trackbacks for\n    search:\n      search_results_for: Søgeresultater for '%{query}'\n  comments:\n    comment:\n      by: af\n  layouts:\n    default:\n      archives: Arkiver\n      statuses: Statuser\n  pagination:\n    next: Næste\n    previous: Forrige\n"
  },
  {
    "path": "config/locales/de.yml",
    "content": "---\nde:\n  articles:\n    comment_counter:\n      comments:\n        one: 1 kommentar\n        other: \"%{count} kommentare\"\n        zero: no kommentare\n    comment_form:\n      comment: comment\n      email_address: Email address\n      your_website: Your website\n    meta:\n      published_on_html: Published on %{publish_date_and_time} by %{by}, tags %{tags}\n    read:\n      add_me_to_twitter: add me to Twitter\n      if_you_liked_this_article_you_can_html: If you liked this article you can %{add_twitter}\n      trackbacks_for: Trackbacks for\n    search:\n      search_results_for: Search results for '%{query}'\n  comments:\n    comment:\n      by: bei\n  layouts:\n    default:\n      archives: Archives\n      statuses: Statuses\n  pagination:\n    next: Next\n    previous: Previous\n"
  },
  {
    "path": "config/locales/en.yml",
    "content": "---\nen:\n  articles:\n    comment_counter:\n      comments:\n        one: 1 comment\n        other: \"%{count} comments\"\n        zero: no comments\n    comment_form:\n      comment: comment\n      email_address: Email address\n      your_website: Your website\n    meta:\n      published_on_html: Published on %{publish_date_and_time} by %{by}, tags %{tags}\n    read:\n      add_me_to_twitter: follow me on Twitter\n      if_you_liked_this_article_you_can_html: If you liked this article you can %{add_twitter}\n      trackbacks_for: Trackbacks for\n    search:\n      search_results_for: Search results for '%{query}'\n  comments:\n    comment:\n      by: by\n  layouts:\n    default:\n      archives: Archives\n      statuses: Statuses\n  pagination:\n    next: Next\n    previous: Previous\n"
  },
  {
    "path": "config/locales/es-MX.yml",
    "content": "---\nes-MX:\n  articles:\n    comment_counter:\n      comments:\n        one: 1 Comentario\n        other: \"%{count} Comentarios\"\n        zero: Sin Comentarios\n    comment_form:\n      comment: comentario\n      email_address: Email\n      your_website: Tu sitio web\n    meta:\n      published_on_html: Publicado el %{publish_date_and_time} por %{by}, tags %{tags}\n    read:\n      add_me_to_twitter: agregame en Twitter\n      if_you_liked_this_article_you_can_html: Si le gust&oacute; este art&iacute;culo,\n        usted puede %{add_twitter}\n      trackbacks_for: Trackbacks para\n    search:\n      search_results_for: Search results for '%{query}'\n  comments:\n    comment:\n      by: por\n  layouts:\n    default:\n      archives: Archives\n      statuses: Statuses\n  pagination:\n    next: Next\n    previous: Previous\n"
  },
  {
    "path": "config/locales/fr.yml",
    "content": "---\nfr:\n  articles:\n    comment_counter:\n      comments:\n        one: 1 commentaire\n        other: \"%{count} commentaires\"\n        zero: aucun commentaire\n    comment_form:\n      comment: commentaire\n      email_address: Adresse mail\n      your_website: Votre site\n    meta:\n      published_on_html: Publié le %{publish_date_and_time} par %{by}, tags %{tags}\n    read:\n      add_me_to_twitter: me suivre sur Twitter\n      if_you_liked_this_article_you_can_html: Si vous avez aimé cet article, vous\n        pouvez %{add_twitter}\n      trackbacks_for: Rétroliens pour\n    search:\n      search_results_for: Search results for '%{query}'\n  comments:\n    comment:\n      by: par\n  layouts:\n    default:\n      archives: Archives\n      statuses: Statuts\n  pagination:\n    next: Suivant\n    previous: Previous\n"
  },
  {
    "path": "config/locales/he.yml",
    "content": "---\nhe:\n  articles:\n    comment_counter:\n      comments:\n        one: 1 comment\n        other: \"%{count} comments\"\n        zero: ללא תגובות\n    comment_form:\n      comment: תגובה\n      email_address: Email address\n      your_website: Your website\n    meta:\n      published_on_html: Published on %{publish_date_and_time} by %{by}, tags %{tags}\n    read:\n      add_me_to_twitter: add me to Twitter\n      if_you_liked_this_article_you_can_html: If you liked this article you can %{add_twitter}\n      trackbacks_for: Trackbacks for\n    search:\n      search_results_for: Search results for '%{query}'\n  comments:\n    comment:\n      by: by\n  layouts:\n    default:\n      archives: Archives\n      statuses: Statuses\n  pagination:\n    next: Next\n    previous: Previous\n"
  },
  {
    "path": "config/locales/it.yml",
    "content": "---\nit:\n  articles:\n    comment_counter:\n      comments:\n        one: 1 Commento\n        other: \"%{count} Commenti\"\n        zero: no comments\n    comment_form:\n      comment: comment\n      email_address: Email address\n      your_website: Your website\n    meta:\n      published_on_html: Published on %{publish_date_and_time} by %{by}, tags %{tags}\n    read:\n      add_me_to_twitter: add me to Twitter\n      if_you_liked_this_article_you_can_html: If you liked this article you can %{add_twitter}\n      trackbacks_for: Trackbacks for\n    search:\n      search_results_for: Search results for '%{query}'\n  comments:\n    comment:\n      by: da\n  layouts:\n    default:\n      archives: Archives\n      statuses: Statuses\n  pagination:\n    next: Next\n    previous: Previous\n"
  },
  {
    "path": "config/locales/ja.yml",
    "content": "---\nja:\n  articles:\n    comment_counter:\n      comments:\n        one: 1 comment\n        other: \"%{count} comments\"\n        zero: no comments\n    comment_form:\n      comment: comment\n      email_address: Email address\n      your_website: Your website\n    meta:\n      published_on_html: Published on %{publish_date_and_time} by %{by}, tags %{tags}\n    read:\n      add_me_to_twitter: add me to Twitter\n      if_you_liked_this_article_you_can_html: If you liked this article you can %{add_twitter}\n      trackbacks_for: Trackbacks for\n    search:\n      search_results_for: Search results for '%{query}'\n  comments:\n    comment:\n      by: by\n  layouts:\n    default:\n      archives: Archives\n      statuses: Statuses\n  pagination:\n    next: Next\n    previous: Previous\n"
  },
  {
    "path": "config/locales/lt.yml",
    "content": "---\nlt:\n  articles:\n    comment_counter:\n      comments:\n        few: \"%{count} Komentarai\"\n        one: 1 Komentaras\n        other: \"%{count} Komentarai\"\n        zero: no comments\n    comment_form:\n      comment: comment\n      email_address: Email address\n      your_website: Your website\n    meta:\n      published_on_html: Published on %{publish_date_and_time} by %{by}, tags %{tags}\n    read:\n      add_me_to_twitter: add me to Twitter\n      if_you_liked_this_article_you_can_html: If you liked this article you can %{add_twitter}\n      trackbacks_for: Trackbacks for\n    search:\n      search_results_for: Search results for '%{query}'\n  comments:\n    comment:\n      by: bei\n  layouts:\n    default:\n      archives: Archives\n      statuses: Statuses\n  pagination:\n    next: Next\n    previous: Previous\n"
  },
  {
    "path": "config/locales/nb.yml",
    "content": "---\nnb:\n  articles:\n    comment_counter:\n      comments:\n        one: 1 kommentar\n        other: \"%{count} kommentarer\"\n        zero: ingen kommentarer\n    comment_form:\n      comment: kommentar\n      email_address: Epostadresse\n      your_website: Din hjemmeside\n    meta:\n      published_on_html: Publisert den %{publish_date_and_time} av %{by}, tagger %{tags}\n    read:\n      add_me_to_twitter: legge meg til på Twitter\n      if_you_liked_this_article_you_can_html: Hvis du likte denne artikkelen, kan\n        du %{add_twitter}\n      trackbacks_for: Trackbacks for\n    search:\n      search_results_for: Search results for '%{query}'\n  comments:\n    comment:\n      by: av\n  layouts:\n    default:\n      archives: Archives\n      statuses: Statusoppdateringer\n  pagination:\n    next: Neste\n    previous: Forrige\n"
  },
  {
    "path": "config/locales/nl.yml",
    "content": "---\nnl:\n  articles:\n    comment_counter:\n      comments:\n        one: 1 comment\n        other: \"%{count} comments\"\n        zero: Geen reacties\n    comment_form:\n      comment: reactie\n      email_address: E-mailadres\n      your_website: Je website\n    meta:\n      published_on_html: Published on %{publish_date_and_time} by %{by}, tags %{tags}\n    read:\n      add_me_to_twitter: add me to Twitter\n      if_you_liked_this_article_you_can_html: If you liked this article you can %{add_twitter}\n      trackbacks_for: Trackbacks for\n    search:\n      search_results_for: Search results for '%{query}'\n  comments:\n    comment:\n      by: by\n  layouts:\n    default:\n      archives: Archieven\n      statuses: Statuses\n  pagination:\n    next: Next\n    previous: Previous\n"
  },
  {
    "path": "config/locales/pl.yml",
    "content": "---\npl:\n  articles:\n    comment_counter:\n      comments:\n        few: \"%{count} komentarzy\"\n        many: \"%{count} komentarzy\"\n        one: 1 komentarz\n        other: \"%{count} komentarzy\"\n        zero: brak komentarzy\n    comment_form:\n      comment: komentarz\n      email_address: Adres email\n      your_website: Twoja strona www\n    meta:\n      published_on_html: 'Opublikowano %{publish_date_and_time} przez %{by}, tagi:\n        %{tags}'\n    read:\n      add_me_to_twitter: obserwuj mnie na Twitterze\n      if_you_liked_this_article_you_can_html: Jeżeli podobał Ci się ten wpis,  %{add_twitter}\n      trackbacks_for: Trackbacks for\n    search:\n      search_results_for: Wyniki wyszukiwania dla '%{query}'\n  comments:\n    comment:\n      by: przez\n  layouts:\n    default:\n      archives: Archiwum\n      statuses: Statusy\n  pagination:\n    next: Następne\n    previous: Poprzednie\n"
  },
  {
    "path": "config/locales/pt-BR.yml",
    "content": "---\npt-BR:\n  articles:\n    comment_counter:\n      comments:\n        one: 1 comentário\n        other: \"%{count} comentários\"\n        zero: nenhum comentário\n    comment_form:\n      comment: Comentário\n      email_address: Endereço de e-mail\n      your_website: Seu website\n    meta:\n      published_on_html: Publicado em %{publish_date_and_time} por %{by}, tags %{tags}\n    read:\n      add_me_to_twitter: me adicionar no Twitter\n      if_you_liked_this_article_you_can_html: Se você gostou deste artigo, você pode\n        %{add_twitter}\n      trackbacks_for: Trackbacks para\n    search:\n      search_results_for: Resultados de busca para '%{query}'\n  comments:\n    comment:\n      by: por\n  layouts:\n    default:\n      archives: Arquivos\n      statuses: Status\n  pagination:\n    next: Próxima\n    previous: Anterior\n"
  },
  {
    "path": "config/locales/ro.yml",
    "content": "---\nro:\n  articles:\n    comment_counter:\n      comments:\n        few: \"%{count} comentarii\"\n        one: 1 comentariu\n        other: \"%{count} comentarii\"\n        zero: no comentarii\n    comment_form:\n      comment: comment\n      email_address: Email address\n      your_website: Your website\n    meta:\n      published_on_html: Published on %{publish_date_and_time} by %{by}, tags %{tags}\n    read:\n      add_me_to_twitter: add me to Twitter\n      if_you_liked_this_article_you_can_html: If you liked this article you can %{add_twitter}\n      trackbacks_for: Trackbacks for\n    search:\n      search_results_for: Search results for '%{query}'\n  comments:\n    comment:\n      by: de\n  layouts:\n    default:\n      archives: Archives\n      statuses: Statuses\n  pagination:\n    next: Next\n    previous: Previous\n"
  },
  {
    "path": "config/locales/ru.yml",
    "content": "---\nru:\n  articles:\n    comment_counter:\n      comments:\n        few: 'Комментариев: %{count}'\n        many: 'Комментариев: %{count}'\n        one: 1 комментарий\n        other: 'Комментариев: %{count}'\n        zero: Нет комментариев\n    comment_form:\n      comment: Ответить на пост\n      email_address: Электронная почта\n      your_website: Веб-сайт\n    meta:\n      published_on_html: Опубликовано %{publish_date_and_time} автором %{by} под тегами\n        %{tags}\n    read:\n      add_me_to_twitter: отправить в Twitter\n      if_you_liked_this_article_you_can_html: Если Вам понравилась эта статья Вы можете\n        %{add_twitter}\n      trackbacks_for: Обратные ссылки для\n    search:\n      search_results_for: Результаты поиска для '%{query}'\n  comments:\n    comment:\n      by: от\n  layouts:\n    default:\n      archives: Архивы\n      statuses: Статусы\n  pagination:\n    next: Следующая\n    previous: Предыдущая\n"
  },
  {
    "path": "config/locales/sidebars.ar.yml",
    "content": "---\nar:\n  authors_sidebar:\n    content:\n      authors: مؤلفين\n  notes_sidebar:\n    content:\n      view_on_twitter: شاهد على تويتر\n  popular_sidebar:\n    content:\n      comments: تعليقات\n      nothing_to_show_yet: لا يوجد شئ لعرضه\n  xml_sidebar:\n    content:\n      articles: مقالات\n      feedback: ردود الفعل\n      syndicate: نقابة\n      tag: علامة\n"
  },
  {
    "path": "config/locales/sidebars.da.yml",
    "content": "---\nda:\n  authors_sidebar:\n    content:\n      authors: Authors\n  notes_sidebar:\n    content:\n      view_on_twitter: View on Twitter\n  popular_sidebar:\n    content:\n      comments: Comments\n      nothing_to_show_yet: Nothing to show yet\n  xml_sidebar:\n    content:\n      articles: Articles\n      feedback: Feedback\n      syndicate: Syndicate\n      tag: Tag\n"
  },
  {
    "path": "config/locales/sidebars.de.yml",
    "content": "---\nde:\n  authors_sidebar:\n    content:\n      authors: Authors\n  notes_sidebar:\n    content:\n      view_on_twitter: View on Twitter\n  popular_sidebar:\n    content:\n      comments: Comments\n      nothing_to_show_yet: Nothing to show yet\n  xml_sidebar:\n    content:\n      articles: Articles\n      feedback: Feedback\n      syndicate: Syndicate\n      tag: Tag\n"
  },
  {
    "path": "config/locales/sidebars.en.yml",
    "content": "---\nen:\n  authors_sidebar:\n    content:\n      authors: Authors\n  notes_sidebar:\n    content:\n      view_on_twitter: View on Twitter\n  popular_sidebar:\n    content:\n      comments: Comments\n      nothing_to_show_yet: Nothing to show yet\n  xml_sidebar:\n    content:\n      articles: Articles\n      feedback: Feedback\n      syndicate: Syndicate\n      tag: Tag\n"
  },
  {
    "path": "config/locales/sidebars.es-MX.yml",
    "content": "---\nes-MX:\n  authors_sidebar:\n    content:\n      authors: Authors\n  notes_sidebar:\n    content:\n      view_on_twitter: View on Twitter\n  popular_sidebar:\n    content:\n      comments: Comments\n      nothing_to_show_yet: Nothing to show yet\n  xml_sidebar:\n    content:\n      articles: Articles\n      feedback: Feedback\n      syndicate: Syndicate\n      tag: Tag\n"
  },
  {
    "path": "config/locales/sidebars.fr.yml",
    "content": "---\nfr:\n  authors_sidebar:\n    content:\n      authors: Authors\n  notes_sidebar:\n    content:\n      view_on_twitter: View on Twitter\n  popular_sidebar:\n    content:\n      comments: Comments\n      nothing_to_show_yet: Nothing to show yet\n  xml_sidebar:\n    content:\n      articles: Articles\n      feedback: Feedback\n      syndicate: Syndicate\n      tag: Tag\n"
  },
  {
    "path": "config/locales/sidebars.he.yml",
    "content": "---\nhe:\n  authors_sidebar:\n    content:\n      authors: Authors\n  notes_sidebar:\n    content:\n      view_on_twitter: View on Twitter\n  popular_sidebar:\n    content:\n      comments: Comments\n      nothing_to_show_yet: Nothing to show yet\n  xml_sidebar:\n    content:\n      articles: Articles\n      feedback: Feedback\n      syndicate: Syndicate\n      tag: Tag\n"
  },
  {
    "path": "config/locales/sidebars.it.yml",
    "content": "---\nit:\n  authors_sidebar:\n    content:\n      authors: Authors\n  notes_sidebar:\n    content:\n      view_on_twitter: View on Twitter\n  popular_sidebar:\n    content:\n      comments: Comments\n      nothing_to_show_yet: Nothing to show yet\n  xml_sidebar:\n    content:\n      articles: Articles\n      feedback: Feedback\n      syndicate: Syndicate\n      tag: Tag\n"
  },
  {
    "path": "config/locales/sidebars.ja.yml",
    "content": "---\nja:\n  authors_sidebar:\n    content:\n      authors: Authors\n  notes_sidebar:\n    content:\n      view_on_twitter: View on Twitter\n  popular_sidebar:\n    content:\n      comments: Comments\n      nothing_to_show_yet: Nothing to show yet\n  xml_sidebar:\n    content:\n      articles: Articles\n      feedback: Feedback\n      syndicate: Syndicate\n      tag: Tag\n"
  },
  {
    "path": "config/locales/sidebars.lt.yml",
    "content": "---\nlt:\n  authors_sidebar:\n    content:\n      authors: Authors\n  notes_sidebar:\n    content:\n      view_on_twitter: View on Twitter\n  popular_sidebar:\n    content:\n      comments: Comments\n      nothing_to_show_yet: Nothing to show yet\n  xml_sidebar:\n    content:\n      articles: Articles\n      feedback: Feedback\n      syndicate: Syndicate\n      tag: Tag\n"
  },
  {
    "path": "config/locales/sidebars.nb.yml",
    "content": "---\nnb:\n  authors_sidebar:\n    content:\n      authors: Authors\n  notes_sidebar:\n    content:\n      view_on_twitter: View on Twitter\n  popular_sidebar:\n    content:\n      comments: Comments\n      nothing_to_show_yet: Nothing to show yet\n  xml_sidebar:\n    content:\n      articles: Articles\n      feedback: Feedback\n      syndicate: Syndicate\n      tag: Tag\n"
  },
  {
    "path": "config/locales/sidebars.nl.yml",
    "content": "---\nnl:\n  authors_sidebar:\n    content:\n      authors: Authors\n  notes_sidebar:\n    content:\n      view_on_twitter: View on Twitter\n  popular_sidebar:\n    content:\n      comments: Comments\n      nothing_to_show_yet: Nothing to show yet\n  xml_sidebar:\n    content:\n      articles: Articles\n      feedback: Feedback\n      syndicate: Syndicate\n      tag: Tag\n"
  },
  {
    "path": "config/locales/sidebars.pl.yml",
    "content": "---\npl:\n  authors_sidebar:\n    content:\n      authors: Autorzy\n  notes_sidebar:\n    content:\n      view_on_twitter: Zobacz na Twitterze\n  popular_sidebar:\n    content:\n      comments: Komentarze\n      nothing_to_show_yet: Brak komentarzy\n  xml_sidebar:\n    content:\n      articles: Artykuły\n      feedback: Feedback\n      syndicate: Syndicate\n      tag: Tag\n"
  },
  {
    "path": "config/locales/sidebars.pt-BR.yml",
    "content": "---\npt-BR:\n  authors_sidebar:\n    content:\n      authors: Autores\n  notes_sidebar:\n    content:\n      view_on_twitter: Ver no Twitter\n  popular_sidebar:\n    content:\n      comments: Comentários\n      nothing_to_show_yet: Nada a exibir no momento\n  xml_sidebar:\n    content:\n      articles: Artigos\n      feedback: Feedback\n      syndicate: Sindicato\n      tag: Tag\n"
  },
  {
    "path": "config/locales/sidebars.ro.yml",
    "content": "---\nro:\n  authors_sidebar:\n    content:\n      authors: Authors\n  notes_sidebar:\n    content:\n      view_on_twitter: View on Twitter\n  popular_sidebar:\n    content:\n      comments: Comments\n      nothing_to_show_yet: Nothing to show yet\n  xml_sidebar:\n    content:\n      articles: Articles\n      feedback: Feedback\n      syndicate: Syndicate\n      tag: Tag\n"
  },
  {
    "path": "config/locales/sidebars.ru.yml",
    "content": "---\nru:\n  authors_sidebar:\n    content:\n      authors: Авторы\n  notes_sidebar:\n    content:\n      view_on_twitter: Просмотреть в Twitter\n  popular_sidebar:\n    content:\n      comments: Комментарии\n      nothing_to_show_yet: Пока что тут ничего нет\n  xml_sidebar:\n    content:\n      articles: Статьи\n      feedback: Отзыв\n      syndicate: Синдикат\n      tag: Тег\n"
  },
  {
    "path": "config/locales/sidebars.zh-CN.yml",
    "content": "---\nzh-CN:\n  authors_sidebar:\n    content:\n      authors: Authors\n  notes_sidebar:\n    content:\n      view_on_twitter: View on Twitter\n  popular_sidebar:\n    content:\n      comments: Comments\n      nothing_to_show_yet: Nothing to show yet\n  xml_sidebar:\n    content:\n      articles: Articles\n      feedback: Feedback\n      syndicate: Syndicate\n      tag: Tag\n"
  },
  {
    "path": "config/locales/sidebars.zh-TW.yml",
    "content": "---\nzh-TW:\n  authors_sidebar:\n    content:\n      authors: Authors\n  notes_sidebar:\n    content:\n      view_on_twitter: View on Twitter\n  popular_sidebar:\n    content:\n      comments: Comments\n      nothing_to_show_yet: Nothing to show yet\n  xml_sidebar:\n    content:\n      articles: Articles\n      feedback: Feedback\n      syndicate: Syndicate\n      tag: Tag\n"
  },
  {
    "path": "config/locales/zh-CN.yml",
    "content": "---\nzh-CN:\n  articles:\n    comment_counter:\n      comments:\n        one: 1 comment\n        other: \"%{count} comments\"\n        zero: no comments\n    comment_form:\n      comment: comment\n      email_address: Email address\n      your_website: Your website\n    meta:\n      published_on_html: Published on %{publish_date_and_time} by %{by}, tags %{tags}\n    read:\n      add_me_to_twitter: add me to Twitter\n      if_you_liked_this_article_you_can_html: If you liked this article you can %{add_twitter}\n      trackbacks_for: Trackbacks for\n    search:\n      search_results_for: Search results for '%{query}'\n  comments:\n    comment:\n      by: by\n  layouts:\n    default:\n      archives: Archives\n      statuses: Statuses\n  pagination:\n    next: Next\n    previous: Previous\n"
  },
  {
    "path": "config/locales/zh-TW.yml",
    "content": "---\nzh-TW:\n  articles:\n    comment_counter:\n      comments:\n        one: 1 comment\n        other: \"%{count} comments\"\n        zero: no comments\n    comment_form:\n      comment: comment\n      email_address: Email address\n      your_website: Your website\n    meta:\n      published_on_html: Published on %{publish_date_and_time} by %{by}, tags %{tags}\n    read:\n      add_me_to_twitter: add me to Twitter\n      if_you_liked_this_article_you_can_html: If you liked this article you can %{add_twitter}\n      trackbacks_for: Trackbacks for\n    search:\n      search_results_for: Search results for '%{query}'\n  comments:\n    comment:\n      by: by\n  layouts:\n    default:\n      archives: Archives\n      statuses: Statuses\n  pagination:\n    next: Next\n    previous: Previous\n"
  },
  {
    "path": "config/mail.yml.example",
    "content": "delivery_method: :smtp\nsettings:\n  :address: mail.example.com\n  :port:    25\n  :domain:  example.com\n# :authentication:  :login\n# :user_name: bob\n# :password: bobsyouruncle\nsendmail_settings:\n  :location: /usr/bin/sendmail\n"
  },
  {
    "path": "config/puma.rb",
    "content": "# frozen_string_literal: true\n\n# Puma can serve each request in a thread from an internal thread pool.\n# The `threads` method setting takes two numbers: a minimum and maximum.\n# Any libraries that use thread pools should be configured to match\n# the maximum value specified for Puma. Default is set to 5 threads for minimum\n# and maximum; this matches the default thread size of Active Record.\n#\nmax_threads_count = ENV.fetch(\"RAILS_MAX_THREADS\", 5)\nmin_threads_count = ENV.fetch(\"RAILS_MIN_THREADS\") { max_threads_count }\nthreads min_threads_count, max_threads_count\n\n# Specifies the `port` that Puma will listen on to receive requests; default is 3000.\n#\nport        ENV.fetch(\"PORT\", 3000)\n\n# Specifies the `environment` that Puma will run in.\n#\nenvironment ENV.fetch(\"RAILS_ENV\", \"development\")\n\n# Specifies the `pidfile` that Puma will use.\npidfile ENV.fetch(\"PIDFILE\", \"tmp/pids/server.pid\")\n\n# Specifies the number of `workers` to boot in clustered mode.\n# Workers are forked web server processes. If using threads and workers together\n# the concurrency of the application would be max `threads` * `workers`.\n# Workers do not work on JRuby or Windows (both of which do not support\n# processes).\n#\n# workers ENV.fetch(\"WEB_CONCURRENCY\") { 2 }\n\n# Use the `preload_app!` method when specifying a `workers` number.\n# This directive tells Puma to first boot the application and load code\n# before forking the application. This takes advantage of Copy On Write\n# process behavior so workers use less memory.\n#\n# preload_app!\n\n# Allow puma to be restarted by `rails restart` command.\nplugin :tmp_restart\n"
  },
  {
    "path": "config/routes.rb",
    "content": "# frozen_string_literal: true\n\nRails.application.routes.draw do\n  # For details on the DSL available within this file, see https://guides.rubyonrails.org/routing.html\nend\n"
  },
  {
    "path": "config/secrets.yml",
    "content": "# Be sure to restart your server when you modify this file.\n\n# Your secret key is used for verifying the integrity of signed cookies.\n# If you change this key, all old signed cookies will become invalid!\n\n# Make sure the secret is at least 30 characters and all random,\n# no regular words or you'll be exposed to dictionary attacks.\n# You can use `rails secret` to generate a secure secret key.\n\n# Make sure the secrets in this file are kept private\n# if you're sharing your code publicly.\n\ndevelopment:\n  secret_key_base: 189eafa373f70c3f770798b832dd5e48e3042c03639a6a1dc952c6b88eaed9b418d010874932a5f1b1d1d0453102160190729d1a04c453f9eb3639073c645311\n\ntest:\n  secret_key_base: 81a64773cabdd99b20a666b0d1cbe69b27cd3eb6ea3213740016c8dff97f69d56ac092fb50c9a20b6c64e32b066d4970e4a1dc2d44c87b0dd86b5eea98a0a181\n\n# Do not keep production secrets in the repository,\n# instead read values from the environment.\nproduction:\n  secret_key_base: <%= ENV[\"SECRET_KEY_BASE\"] %>\n"
  },
  {
    "path": "config/spring.rb",
    "content": "# frozen_string_literal: true\n\n%w(\n  .ruby-version\n  .rbenv-vars\n  tmp/restart.txt\n  tmp/caching-dev.txt\n).each { |path| Spring.watch(path) }\n"
  },
  {
    "path": "config/storage.yml",
    "content": "test:\n  service: Disk\n  root: <%= Rails.root.join(\"tmp/storage\") %>\n\nlocal:\n  service: Disk\n  root: <%= Rails.root.join(\"storage\") %>\n\n# Use rails credentials:edit to set the AWS secrets (as aws:access_key_id|secret_access_key)\n# amazon:\n#   service: S3\n#   access_key_id: <%= Rails.application.credentials.dig(:aws, :access_key_id) %>\n#   secret_access_key: <%= Rails.application.credentials.dig(:aws, :secret_access_key) %>\n#   region: us-east-1\n#   bucket: your_own_bucket\n\n# Remember not to checkin your GCS keyfile to a repository\n# google:\n#   service: GCS\n#   project: your_project\n#   credentials: <%= Rails.root.join(\"path/to/gcs.keyfile\") %>\n#   bucket: your_own_bucket\n\n# Use rails credentials:edit to set the Azure Storage secret (as azure_storage:storage_access_key)\n# microsoft:\n#   service: AzureStorage\n#   storage_account_name: your_account_name\n#   storage_access_key: <%= Rails.application.credentials.dig(:azure_storage, :storage_access_key) %>\n#   container: your_container_name\n\n# mirror:\n#   service: Mirror\n#   primary: local\n#   mirrors: [ amazon, google, microsoft ]\n"
  },
  {
    "path": "config.ru",
    "content": "# frozen_string_literal: true\n\n# This file is used by Rack-based servers to start the application.\n\nrequire_relative \"config/environment\"\n\nrun Rails.application\nRails.application.load_server\n"
  },
  {
    "path": "db/converters/README",
    "content": "These are converters for migrating from other blog systems to Publify. In\ngeneral, you're best off using the converter that best-matches your blog\nsystem, and then falling back to the RSS or Feed converter if the others fail.\nThese converters aren't always well tested, so please back up your data before\nconverting, and please file bugs at https://github.com/publify/publify.\n\nAvailable converters:\n\n* feed.rb: Converts from any RSS or Atom feed.  Requires the 'feed_tools' gem.\n* blogger.rb: Converts from an exported Blogger XML.  Requires the 'feedzirra' gem.\n"
  },
  {
    "path": "db/converters/blogger.rb",
    "content": "#!/usr/bin/env ruby\n\n# Blogger converter to publify\n# Shamelessly copied from the RSS/Atom converter by Lennon Day-Reynolds\n\nrequire File.dirname(__FILE__) + '/../../config/environment'\nrequire 'optparse'\nrequire 'feedzirra'\n\nclass BloggerConverter\n  BLOGGER_POST = 'http://schemas.google.com/blogger/2008/kind#post'.freeze\n\n  attr_accessor :options\n\n  def initialize\n    self.options = {}\n    parse_options\n    convert_entries\n  end\n\n  def convert_entries\n    feed = Feedzirra::Feed.fetch_and_parse(options[:url])\n    puts \"Converting #{feed.entries.length} entries...\"\n\n    # TODO: Allow setting the blog to be used.\n    blog = Blog.first\n    ping_store = blog.send_outbound_pings\n    blog.send_outbound_pings = false # pings have to be diabled or the script crashes because too many connections are opened\n    blog.save\n\n    feed.entries.each do |item|\n      create_article item if item.categories.include? BLOGGER_POST\n    end\n\n    blog.send_outbound_pings = ping_store\n    blog.save\n  end\n\n  # FIXME: This is probably broken\n  def create_article(entry)\n    a = Article.new\n    entry_author = create_author entry.author\n    a.set_author entry_author\n    a.title = entry.title\n    a.body = entry.content\n    a.created_at = entry.published\n    a.published_at = entry.published\n    a.text_filter_id = 1\n    a.add_category Category.first\n    a.keywords = entry.categories - [BLOGGER_POST]\n    a.allow_pings = false\n    a.allow_comments = false\n\n    puts \"Converted '#{entry.title}'\" if a.save\n  end\n\n  def create_author(name)\n    unless User.exists? name: name\n      user = User.new\n      para = { 'login' => name,\n               'name'  => name,\n               'nickname' => name,\n               'email' => name + '@fake.com',\n               'password' => 'password',\n               'profile_id' => 2,\n               'notify_via_email' => false,\n               'notify_on_comments' => false,\n               'notify_on_new_articles' => false,\n               'text_filter_id' => 1 }\n      user.attributes = para\n      user.save\n    end\n\n    User.where(name: name).first\n  end\n\n  def parse_options\n    OptionParser.new do |opt|\n      opt.banner = 'Usage: feed.rb [options]'\n\n      opt.on('-u', '--url URL', 'URL of RSS feed to import.') do |u|\n        options[:url] = u\n      end\n\n      opt.on_tail('-h', '--help', 'Show this message.') do\n        puts opt\n        exit\n      end\n\n      opt.parse!(ARGV)\n    end\n\n    unless options.include?(:url)\n      puts 'See feed.rb --help for help.'\n      exit\n    end\n  end\nend\n\nBloggerConverter.new\n"
  },
  {
    "path": "db/converters/feed.rb",
    "content": "#!/usr/bin/env ruby\n\n# RSS 0.2/2.0/Atom converter to publify by Lennon Day-Reynolds <rcoder@gmail.com>\n# Shamelessly copied from RSS-only converter by Chris Lee\n\nrequire File.dirname(__FILE__) + '/../../config/environment'\nrequire 'optparse'\nbegin\n  require 'feed_tools'\nrescue LoadError\n  STDERR.puts <<-EOF.strip_heredoc\n    This converter requires feedtools to be installed.\n    Please run `gem install feedtools` and try again.\nEOF\n  exit 1\nend\n\nclass FeedMigrate\n  attr_accessor :options\n\n  def initialize\n    self.options = {}\n    parse_options\n    convert_entries\n  end\n\n  def convert_entries\n    feed = FeedTools::Feed.open(options[:url])\n    puts \"Converting #{feed.items.length} entries...\"\n    feed.items.each do |item|\n      puts \"Converting '#{item.title}'\"\n      a = Article.new\n      a.author = options[:author]\n      a.title = item.title\n      a.body = item.description\n      a.created_at = item.published\n      a.save\n    end\n  end\n\n  def parse_options\n    OptionParser.new do |opt|\n      opt.banner = 'Usage: feed.rb [options]'\n\n      opt.on('-a', '--author AUTHOR', 'Username of author in publify') do |a|\n        options[:author] = a\n      end\n\n      opt.on('-u', '--url URL', 'URL of RSS feed to import.') do |u|\n        options[:url] = u\n      end\n\n      opt.on_tail('-h', '--help', 'Show this message.') do\n        puts opt\n        exit\n      end\n\n      opt.parse!(ARGV)\n    end\n\n    unless options.include?(:author) && options.include?(:url)\n      puts 'See feed.rb --help for help.'\n      exit\n    end\n  end\nend\n\nFeedMigrate.new\n"
  },
  {
    "path": "db/converters/rss.rb",
    "content": "#!/usr/bin/env ruby\n\n# RSS 0.9/2.0 converter for publify by Chris Lee <clee@kde.org>\n#\n# No need to make a backup of the original blog, really. This takes a URL for a\n# read-only import, so there's not really any chance of it munging the original\n# blog's data, unless somehow an HTTP GET causes your blog server to ignite.\n#\n# Even so, this script is still PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND.\n\nrequire File.dirname(__FILE__) + '/../../config/environment'\nrequire 'optparse'\nrequire 'net/http'\nrequire 'rss/2.0'\n\nclass RSSMigrate\n  attr_accessor :options\n\n  def initialize\n    self.options = {}\n    parse_options\n    convert_entries\n  end\n\n  def convert_entries\n    feed = Net::HTTP.get(URI.parse(options[:url]))\n    rss = RSS::Parser.parse(feed)\n    puts \"Converting #{rss.items.length} entries...\"\n    rss.items.each do |item|\n      puts \"Converting '#{item.title}'\"\n      a = Article.new\n      a.author = options[:author]\n      a.title = item.title\n      a.body = item.description\n      a.created_at = item.pubDate\n      a.save\n    end\n  end\n\n  def parse_options\n    OptionParser.new do |opt|\n      opt.banner = 'Usage: rss.rb [options]'\n\n      opt.on('-a', '--author AUTHOR', 'Username of author in publify') do |a|\n        options[:author] = a\n      end\n\n      opt.on('-u', '--url URL', 'URL of RSS feed to import.') do |u|\n        options[:url] = u\n      end\n\n      opt.on_tail('-h', '--help', 'Show this message.') do\n        puts opt\n        exit\n      end\n\n      opt.parse!(ARGV)\n    end\n\n    unless options.include?(:author) && options.include?(:url)\n      puts 'See rss.rb --help for help.'\n      exit\n    end\n  end\nend\n\nRSSMigrate.new\n"
  },
  {
    "path": "db/migrate/113_initial_schema.publify_core_engine.rb",
    "content": "# frozen_string_literal: true\n\nclass InitialSchema < ActiveRecord::Migration[4.2]\n  def change\n    create_table \"articles_tags\", id: false, force: true do |t|\n      t.integer \"article_id\"\n      t.integer \"tag_id\"\n    end\n\n    create_table \"blogs\", force: true do |t|\n      t.text   \"settings\"\n      t.string \"base_url\"\n    end\n\n    create_table \"categories\", force: true do |t|\n      t.string  \"name\"\n      t.integer \"position\"\n      t.string  \"permalink\"\n      t.text    \"keywords\"\n      t.text    \"description\"\n      t.integer \"parent_id\"\n    end\n\n    add_index \"categories\", [\"permalink\"]\n\n    create_table \"categorizations\", force: true do |t|\n      t.integer \"article_id\"\n      t.integer \"category_id\"\n      t.boolean \"is_primary\"\n    end\n\n    create_table \"contents\", force: true do |t|\n      t.string   \"type\"\n      t.string   \"title\"\n      t.string   \"author\"\n      t.text     \"body\"\n      t.text     \"extended\"\n      t.text     \"excerpt\"\n      t.datetime \"created_at\"\n      t.datetime \"updated_at\"\n      t.integer  \"user_id\"\n      t.string   \"permalink\"\n      t.string   \"guid\"\n      t.integer  \"text_filter_id\"\n      t.text     \"whiteboard\"\n      t.string   \"name\"\n      t.boolean  \"published\", default: false\n      t.boolean  \"allow_pings\"\n      t.boolean  \"allow_comments\"\n      t.datetime \"published_at\"\n      t.string   \"state\"\n      t.integer  \"parent_id\"\n      t.text     \"settings\"\n      t.string   \"post_type\", default: \"read\"\n    end\n\n    add_index \"contents\", [\"published\"]\n    add_index \"contents\", [\"text_filter_id\"]\n\n    create_table \"feedback\", force: true do |t|\n      t.string   \"type\"\n      t.string   \"title\"\n      t.string   \"author\"\n      t.text     \"body\"\n      t.text     \"excerpt\"\n      t.datetime \"created_at\"\n      t.datetime \"updated_at\"\n      t.integer  \"user_id\"\n      t.string   \"guid\"\n      t.integer  \"text_filter_id\"\n      t.text     \"whiteboard\"\n      t.integer  \"article_id\"\n      t.string   \"email\"\n      t.string   \"url\"\n      t.string   \"ip\", limit: 40\n      t.string   \"blog_name\"\n      t.boolean  \"published\", default: false\n      t.datetime \"published_at\"\n      t.string   \"state\"\n      t.boolean  \"status_confirmed\"\n      t.string   \"user_agent\"\n    end\n\n    add_index \"feedback\", [\"article_id\"]\n    add_index \"feedback\", [\"text_filter_id\"]\n\n    create_table \"page_caches\", force: true do |t|\n      t.string \"name\"\n    end\n\n    add_index \"page_caches\", [\"name\"]\n\n    create_table \"pings\", force: true do |t|\n      t.integer  \"article_id\"\n      t.string   \"url\"\n      t.datetime \"created_at\"\n    end\n\n    add_index \"pings\", [\"article_id\"]\n\n    create_table \"post_types\", force: true do |t|\n      t.string \"name\"\n      t.string \"permalink\"\n      t.string \"description\"\n    end\n\n    create_table \"profiles\", force: true do |t|\n      t.string \"label\"\n      t.string \"nicename\"\n      t.text   \"modules\"\n    end\n\n    create_table \"profiles_rights\", id: false, force: true do |t|\n      t.integer \"profile_id\"\n      t.integer \"right_id\"\n    end\n\n    create_table \"redirections\", force: true do |t|\n      t.integer \"content_id\"\n      t.integer \"redirect_id\"\n    end\n\n    create_table \"redirects\", force: true do |t|\n      t.string   \"from_path\"\n      t.string   \"to_path\"\n      t.string   \"origin\"\n      t.datetime \"created_at\"\n      t.datetime \"updated_at\"\n    end\n\n    create_table \"resources\", force: true do |t|\n      t.integer  \"size\"\n      t.string   \"upload\"\n      t.string   \"mime\"\n      t.datetime \"created_at\"\n      t.datetime \"updated_at\"\n      t.integer  \"article_id\"\n      t.boolean  \"itunes_metadata\"\n      t.string   \"itunes_author\"\n      t.string   \"itunes_subtitle\"\n      t.integer  \"itunes_duration\"\n      t.text     \"itunes_summary\"\n      t.string   \"itunes_keywords\"\n      t.string   \"itunes_category\"\n      t.boolean  \"itunes_explicit\"\n    end\n\n    create_table \"sidebars\", force: true do |t|\n      t.integer \"active_position\"\n      t.text    \"config\"\n      t.integer \"staged_position\"\n      t.string  \"type\"\n    end\n\n    create_table \"sitealizer\", force: true do |t|\n      t.string   \"path\"\n      t.string   \"ip\"\n      t.string   \"referer\"\n      t.string   \"language\"\n      t.string   \"user_agent\"\n      t.datetime \"created_at\"\n      t.date     \"created_on\"\n    end\n\n    create_table \"tags\", force: true do |t|\n      t.string   \"name\"\n      t.datetime \"created_at\"\n      t.datetime \"updated_at\"\n      t.string   \"display_name\"\n    end\n\n    create_table \"text_filters\", force: true do |t|\n      t.string \"name\"\n      t.string \"description\"\n      t.string \"markup\"\n      t.text   \"filters\"\n      t.text   \"params\"\n    end\n\n    create_table \"triggers\", force: true do |t|\n      t.integer  \"pending_item_id\"\n      t.string   \"pending_item_type\"\n      t.datetime \"due_at\"\n      t.string   \"trigger_method\"\n    end\n\n    create_table \"users\", force: true do |t|\n      t.string   \"login\"\n      t.string   \"password\"\n      t.text     \"email\"\n      t.text     \"name\"\n      t.boolean  \"notify_via_email\"\n      t.boolean  \"notify_on_new_articles\"\n      t.boolean  \"notify_on_comments\"\n      t.integer  \"profile_id\"\n      t.string   \"remember_token\"\n      t.datetime \"remember_token_expires_at\"\n      t.string   \"text_filter_id\",            default: \"1\"\n      t.string   \"state\",                     default: \"active\"\n      t.datetime \"last_connection\"\n      t.text     \"settings\"\n      t.integer  \"resource_id\"\n    end\n  end\nend\n"
  },
  {
    "path": "db/migrate/114_fixes_buggy_articles_and_notes.publify_core_engine.rb",
    "content": "# frozen_string_literal: true\n\nclass FixesBuggyArticlesAndNotes < ActiveRecord::Migration[4.2]\n  class Content < ActiveRecord::Base\n  end\n\n  class Article < Content\n    def set_permalink\n      return if state == \"draft\" || permalink.present?\n\n      self.permalink = title.to_permalink\n    end\n  end\n\n  class Note < Content\n    def set_permalink\n      self.permalink = \"#{id}-#{body.to_permalink[0..79]}\" if permalink.blank?\n      save\n    end\n\n    def create_guid\n      return true if guid.present?\n\n      self.guid = UUIDTools::UUID.random_create.to_s\n    end\n  end\n\n  class Page < Content\n    def set_permalink\n      self.name = title.to_permalink if name.blank?\n    end\n  end\n\n  def self.up\n    say \"Fixing contents permalinks, this may take some time\"\n\n    contents = Content.where(\"permalink is ? or permalink = ?\", nil, \"\")\n    contents.each do |c|\n      c.set_permalink\n      c.save\n    end\n\n    say \"Fixes empty notes GUID\"\n    notes = Note.where(\"guid is ? or guid = ?\", nil, \"\")\n    notes.each do |n|\n      n.create_guid\n      n.save\n    end\n  end\n\n  def self.down\n    say \"Nothing to do here\"\n  end\nend\n"
  },
  {
    "path": "db/migrate/115_drops_categories_for_tags.publify_core_engine.rb",
    "content": "# frozen_string_literal: true\n\nclass DropsCategoriesForTags < ActiveRecord::Migration[4.2]\n  class Categorization < ActiveRecord::Base\n    belongs_to :article\n    belongs_to :category\n  end\n\n  class Category < ActiveRecord::Base\n    has_many :categorizations\n    has_many :articles, through: :categorizations\n  end\n\n  def up\n    # First, we migrate categories into tags\n    Category.find_each do |cat|\n      # Does a tag with the same permalink exist?\n      tag = Tag.find_or_create_by(name: cat.permalink) do |tg|\n        tg.display_name = cat.name\n      end\n\n      Redirect.create(from_path: \"category/#{cat.permalink}\",\n                      to_path: File.join(Blog.first.base_url, \"tag\", tag.name))\n      cat.articles.each do |article|\n        article.tags << tag\n        article.save\n      end\n    end\n\n    drop_table :categorizations\n    drop_table :categories\n  end\n\n  def down; end\nend\n"
  },
  {
    "path": "db/migrate/20150207131657_add_missing_indexes.publify_core_engine.rb",
    "content": "# frozen_string_literal: true\n\nclass AddMissingIndexes < ActiveRecord::Migration[4.2]\n  def change\n    add_index :feedback, [:id, :type]\n    add_index :feedback, :user_id\n    add_index :sidebars, [:id, :type]\n    add_index :contents, :user_id\n    add_index :contents, [:id, :type]\n    add_index :articles_tags, :tag_id\n    add_index :articles_tags, :article_id\n    add_index :profiles_rights, :profile_id\n    add_index :users, :profile_id\n    add_index :users, :text_filter_id\n    add_index :users, :resource_id\n    add_index :triggers, [:pending_item_id, :pending_item_type]\n    add_index :redirections, :content_id\n    add_index :redirections, :redirect_id\n    add_index :resources, :article_id\n  end\nend\n"
  },
  {
    "path": "db/migrate/20150807134129_simplify_redirect_relations.publify_core_engine.rb",
    "content": "# frozen_string_literal: true\n\nclass SimplifyRedirectRelations < ActiveRecord::Migration[4.2]\n  class Redirect < ActiveRecord::Base; end\n\n  class Redirection < ActiveRecord::Base; end\n\n  def up\n    add_column :redirects, :content_id, :integer\n    Redirect.find_each do |redirect|\n      redirections = Redirection.where(redirect_id: redirect.id)\n      if redirections.many?\n        raise \"Expected zero or one redirections, found #{redirections.count}\"\n      end\n\n      redirection = redirections.first\n      next unless redirection\n\n      redirect.content_id = redirection.content_id\n      redirect.save!\n    end\n    remove_column :redirects, :origin\n    drop_table :redirections\n  end\n\n  def down\n    create_table :redirections do |t|\n      t.integer :content_id\n      t.integer :redirect_id\n    end\n\n    add_index :redirections, [:content_id]\n    add_index :redirections, [:redirect_id]\n\n    add_column :redirects, :origin, :string\n\n    Redirect.find_each do |redirect|\n      next unless redirect.content_id\n\n      Redirection.create(redirect_id: redirect.id, content_id: redirect.content_id)\n    end\n    remove_column :redirects, :content_id\n  end\nend\n"
  },
  {
    "path": "db/migrate/20150808052637_add_blog_ids.publify_core_engine.rb",
    "content": "# frozen_string_literal: true\n\nclass AddBlogIds < ActiveRecord::Migration[4.2]\n  class Blog < ActiveRecord::Base; end\n\n  class Content < ActiveRecord::Base; end\n\n  class Sidebar < ActiveRecord::Base; end\n\n  def up\n    add_column :contents, :blog_id, :integer\n    add_column :sidebars, :blog_id, :integer\n\n    if Content.any? || Sidebar.any?\n      default_blog_id = Blog.order(:id).first.id\n\n      Content.update_all(\"blog_id = #{default_blog_id}\")\n      Sidebar.update_all(\"blog_id = #{default_blog_id}\")\n    end\n\n    change_column :sidebars, :blog_id, :integer, null: false\n  end\n\n  def down\n    if adapter_name == \"PostgreSQL\"\n      indexes(:contents).each do |index|\n        remove_index(:contents, name: index.name) if index.name.include?(\"blog_id\")\n      end\n    else\n      begin\n        remove_index :contents, :blog_id\n      rescue\n        nil\n      end\n    end\n    remove_column :contents, :blog_id\n    remove_column :sidebars, :blog_id\n  end\nend\n"
  },
  {
    "path": "db/migrate/20150808191127_add_blog_id_to_redirects.publify_core_engine.rb",
    "content": "# frozen_string_literal: true\n\nclass AddBlogIdToRedirects < ActiveRecord::Migration[4.2]\n  class Redirect < ActiveRecord::Base; end\n\n  def up\n    add_column :redirects, :blog_id, :integer\n    if Redirect.any?\n      default_blog_id = Blog.order(:id).first.id\n      Redirect.update_all(\"blog_id = #{default_blog_id}\")\n    end\n  end\n\n  def down\n    remove_column :redirects, :blog_id\n  end\nend\n"
  },
  {
    "path": "db/migrate/20150810094754_add_blog_id_to_tags.publify_core_engine.rb",
    "content": "# frozen_string_literal: true\n\nclass AddBlogIdToTags < ActiveRecord::Migration[4.2]\n  class Tag < ActiveRecord::Base; end\n\n  def up\n    add_column :tags, :blog_id, :integer\n    if Tag.any?\n      default_blog_id = Blog.order(:id).first.id\n      Tag.update_all(\"blog_id = #{default_blog_id}\")\n    end\n  end\n\n  def down\n    remove_column :tags, :blog_id\n  end\nend\n"
  },
  {
    "path": "db/migrate/20160108111120_add_devise_to_users.publify_core_engine.rb",
    "content": "# frozen_string_literal: true\n\nclass AddDeviseToUsers < ActiveRecord::Migration[4.2]\n  def self.up\n    ## Database authenticatable\n    change_column :users, :email, :string, null: false, default: \"\"\n    rename_column :users, :password, :encrypted_password\n    change_column :users, :encrypted_password, :string, null: false, default: \"\"\n\n    change_table(:users) do |t|\n      ## Recoverable\n      t.string   :reset_password_token\n      t.datetime :reset_password_sent_at\n\n      ## Rememberable\n      t.datetime :remember_created_at\n\n      ## Trackable\n      t.integer  :sign_in_count, default: 0, null: false\n      t.datetime :current_sign_in_at\n      t.datetime :last_sign_in_at\n      t.string   :current_sign_in_ip\n      t.string   :last_sign_in_ip\n\n      # Timestamps were not included in our original model.\n      t.timestamps\n    end\n\n    add_index :users, :email,                unique: true\n    add_index :users, :reset_password_token, unique: true\n  end\n\n  def self.down\n    remove_index :users, :email\n    remove_index :users, :reset_password_token\n\n    remove_column :users, :created_at\n    remove_column :users, :updated_at\n\n    remove_column :users, :sign_in_count\n    remove_column :users, :current_sign_in_at\n    remove_column :users, :last_sign_in_at\n    remove_column :users, :current_sign_in_ip\n    remove_column :users, :last_sign_in_ip\n\n    remove_column :users, :remember_created_at\n\n    remove_column :users, :reset_password_token\n    remove_column :users, :reset_password_sent_at\n\n    change_column :users, :encrypted_password, :string, null: true, default: nil\n    rename_column :users, :encrypted_password, :password\n    change_column :users, :email, :text, null: true, default: nil\n  end\nend\n"
  },
  {
    "path": "db/migrate/20160108184201_move_last_connection_to_last_sign_in_at.publify_core_engine.rb",
    "content": "# frozen_string_literal: true\n\nclass MoveLastConnectionToLastSignInAt < ActiveRecord::Migration[4.2]\n  class User < ActiveRecord::Base\n  end\n\n  def up\n    User.find_each do |user|\n      user.update_attribute(:last_sign_in_at, user.last_connection)\n    end\n  end\n\n  def down\n    User.find_each do |user|\n      user.update_attribute(:last_connection, user.last_sign_in_at)\n    end\n  end\nend\n"
  },
  {
    "path": "db/migrate/20160110094906_remove_profiles_rights.publify_core_engine.rb",
    "content": "# frozen_string_literal: true\n\nclass RemoveProfilesRights < ActiveRecord::Migration[4.2]\n  def up\n    drop_table :profiles_rights\n  end\n\n  def down\n    create_table :profiles_rights, id: false do |t|\n      t.integer :profile_id\n      t.integer :right_id\n    end\n\n    add_index :profiles_rights, [:profile_id]\n  end\nend\n"
  },
  {
    "path": "db/migrate/20160605103918_replace_profile_id_with_string.publify_core_engine.rb",
    "content": "# frozen_string_literal: true\n\nclass ReplaceProfileIdWithString < ActiveRecord::Migration[4.2]\n  class Profile < ActiveRecord::Base\n  end\n\n  class User < ActiveRecord::Base\n  end\n\n  def up\n    add_column :users, :profile, :string\n\n    User.reset_column_information\n    User.find_each do |user|\n      user.update_attribute(:profile, Profile.find(user.profile_id).label)\n    end\n\n    remove_column :users, :profile_id\n  end\n\n  def down\n    add_column :users, :profile_id, :integer\n\n    User.reset_column_information\n    User.find_each do |user|\n      user.update_attribute(:profile_id, Profile.find_by(label: user.profile).id)\n    end\n\n    remove_column :users, :profile\n  end\nend\n"
  },
  {
    "path": "db/migrate/20160605154632_remove_profiles.publify_core_engine.rb",
    "content": "# frozen_string_literal: true\n\nclass RemoveProfiles < ActiveRecord::Migration[4.2]\n  class Profile < ActiveRecord::Base\n    serialize :modules, coder: YAML\n  end\n\n  def up\n    drop_table :profiles\n  end\n\n  def down\n    create_table :profiles do |t|\n      t.string :label\n      t.string :nicename\n      t.text   :modules\n    end\n\n    Profile.create!(label: \"admin\", nicename: \"Publify administrator\",\n                    modules: [:dashboard, :articles, :notes, :pages, :feedback,\n                              :media, :themes, :sidebar, :profile, :users,\n                              :settings, :seo])\n    Profile.create!(label: \"publisher\", nicename: \"Blog publisher\",\n                    modules: [:dashboard, :articles, :notes, :pages, :feedback,\n                              :media, :profile])\n    Profile.create!(label: \"contributor\", nicename: \"Contributor\",\n                    modules: [:dashboard, :profile])\n  end\nend\n"
  },
  {
    "path": "db/migrate/20160701061851_demand_blog_id_on_contents.publify_core_engine.rb",
    "content": "# frozen_string_literal: true\n\nclass DemandBlogIdOnContents < ActiveRecord::Migration[4.2]\n  def up\n    change_column :contents, :blog_id, :integer, null: false\n  end\n\n  def down\n    change_column :contents, :blog_id, :integer, null: true\n  end\nend\n"
  },
  {
    "path": "db/migrate/20160701062604_add_blog_id_to_resources.publify_core_engine.rb",
    "content": "# frozen_string_literal: true\n\nclass AddBlogIdToResources < ActiveRecord::Migration[4.2]\n  class Blog < ActiveRecord::Base; end\n\n  class Content < ActiveRecord::Base; end\n\n  class Resource < ActiveRecord::Base; end\n\n  def up\n    add_column :resources, :blog_id, :integer\n\n    if Resource.any?\n      default_blog_id = Blog.order(:id).first.id\n      Resource.find_each do |resource|\n        content_id = resource.article_id\n        blog_id = if content_id\n                    Content.find(content_id).blog_id\n                  else\n                    default_blog_id\n                  end\n        resource.update_column(:blog_id, blog_id)\n      end\n    end\n\n    change_column :resources, :blog_id, :integer, null: false\n  end\n\n  def down\n    remove_column :resources, :blog_id\n  end\nend\n"
  },
  {
    "path": "db/migrate/20161030121548_add_sessions_table.rb",
    "content": "# frozen_string_literal: true\n\nclass AddSessionsTable < ActiveRecord::Migration[4.2]\n  def change\n    create_table :sessions do |t|\n      t.string :session_id, null: false\n      t.text :data\n      t.timestamps null: false\n    end\n\n    add_index :sessions, :session_id, unique: true\n    add_index :sessions, :updated_at\n  end\nend\n"
  },
  {
    "path": "db/migrate/20170528093428_move_resources_to_content.publify_core_engine.rb",
    "content": "# frozen_string_literal: true\n\n# This migration comes from publify_core_engine (originally 20170528093024)\nclass MoveResourcesToContent < ActiveRecord::Migration[5.0]\n  def change\n    rename_column :resources, :article_id, :content_id\n  end\nend\n"
  },
  {
    "path": "db/migrate/20170528120220_move_tags_to_content.publify_core_engine.rb",
    "content": "# frozen_string_literal: true\n\n# This migration comes from publify_core_engine (originally 20170528094923)\nclass MoveTagsToContent < ActiveRecord::Migration[5.0]\n  def change\n    rename_column :articles_tags, :article_id, :content_id\n    rename_table :articles_tags, :contents_tags\n  end\nend\n"
  },
  {
    "path": "db/migrate/20170530063901_remove_separate_published_flag.publify_core_engine.rb",
    "content": "# frozen_string_literal: true\n\n# This migration comes from publify_core_engine (originally 20170528201606)\nclass RemoveSeparatePublishedFlag < ActiveRecord::Migration[5.0]\n  def change\n    remove_column :contents, :published, :boolean, default: false\n  end\nend\n"
  },
  {
    "path": "db/migrate/20170605103539_remove_extra_state_columns_from_feedback.publify_core_engine.rb",
    "content": "# frozen_string_literal: true\n\n# This migration comes from publify_core_engine (originally 20170605071626)\nclass RemoveExtraStateColumnsFromFeedback < ActiveRecord::Migration[5.0]\n  def change\n    remove_column :feedback, :published, :boolean, default: false\n    remove_column :feedback, :status_confirmed, :boolean\n  end\nend\n"
  },
  {
    "path": "db/migrate/20170702105518_remove_published_at_from_feedback.publify_core_engine.rb",
    "content": "# frozen_string_literal: true\n\n# This migration comes from publify_core_engine (originally 20170702105201)\nclass RemovePublishedAtFromFeedback < ActiveRecord::Migration[5.0]\n  def change\n    remove_column :feedback, :published_at, :datetime\n  end\nend\n"
  },
  {
    "path": "db/migrate/20190210121314_add_text_filter_name_fields.publify_core_engine.rb",
    "content": "# frozen_string_literal: true\n\n# This migration comes from publify_core_engine (originally 20190208151235)\nclass AddTextFilterNameFields < ActiveRecord::Migration[5.2]\n  def change\n    add_column :contents, :text_filter_name, :string\n    add_column :feedback, :text_filter_name, :string\n    add_column :users, :text_filter_name, :string\n  end\nend\n"
  },
  {
    "path": "db/migrate/20190210121315_move_text_filter_to_name.publify_core_engine.rb",
    "content": "# frozen_string_literal: true\n\n# This migration comes from publify_core_engine (originally 20190208152646)\nclass MoveTextFilterToName < ActiveRecord::Migration[5.2]\n  class Content < ActiveRecord::Base\n    self.inheritance_column = :bogus\n\n    belongs_to :text_filter, optional: true\n  end\n\n  class Feedback < ActiveRecord::Base\n    self.table_name = \"feedback\"\n    self.inheritance_column = :bogus\n\n    belongs_to :text_filter, optional: true\n  end\n\n  class User < ActiveRecord::Base\n    belongs_to :text_filter, optional: true\n  end\n\n  class TextFilter < ActiveRecord::Base\n    serialize :filters, Array, coder: YAML\n    serialize :params, Hash, coder: YAML\n  end\n\n  def up\n    Content.find_each do |content|\n      filter = content.text_filter\n      filter_name = filter&.name || \"none\"\n      content.update!(text_filter_name: filter_name, text_filter_id: nil)\n    end\n\n    Feedback.find_each do |feedback|\n      filter = feedback.text_filter\n      filter_name = filter&.name || \"none\"\n      feedback.update!(text_filter_name: filter_name, text_filter_id: nil)\n    end\n\n    User.find_each do |user|\n      filter = user.text_filter\n      filter_name = filter&.name || \"none\"\n      user.update!(text_filter_name: filter_name, text_filter_id: nil)\n    end\n\n    TextFilter.destroy_all\n  end\n\n  def down\n    TextFilter\n      .create_with(description: \"None\", markup: \"none\", filters: [], params: {})\n      .find_or_create_by!(name: \"none\")\n    TextFilter\n      .create_with(description: \"Markdown\", markup: \"markdown\", filters: [], params: {})\n      .find_or_create_by!(name: \"markdown\")\n    TextFilter\n      .create_with(description: \"SmartyPants\", markup: \"none\",\n                   filters: [:smartypants], params: {})\n      .find_or_create_by!(name: \"smartypants\")\n    TextFilter\n      .create_with(description: \"Markdown with SmartyPants\", markup: \"markdown\",\n                   filters: [:smartypants], params: {})\n      .find_or_create_by!(name: \"markdown smartypants\")\n    TextFilter\n      .create_with(description: \"Textile\", markup: \"textile\", filters: [], params: {})\n      .find_or_create_by!(name: \"textile\")\n\n    Content.find_each do |content|\n      filter_name = content.text_filter_name\n      next unless filter_name\n\n      filter = TextFilter.find(name: filter_name)\n      raise \"Filter #{filter_name} not found\" unless filter\n\n      content.update!(text_filter: filter)\n    end\n\n    Feedback.find_each do |feedback|\n      filter_name = feedback.text_filter_name\n      next unless filter_name\n\n      filter = TextFilter.find(name: filter_name)\n      raise \"Filter #{filter_name} not found\" unless filter\n\n      feedback.update!(text_filter: filter)\n    end\n\n    User.find_each do |user|\n      filter_name = user.text_filter_name\n      next unless filter_name\n\n      filter = TextFilter.find(name: filter_name)\n      raise \"Filter #{filter_name} not found\" unless filter\n\n      user.update!(text_filter: filter)\n    end\n  end\nend\n"
  },
  {
    "path": "db/migrate/20190210121316_remove_text_filter_ids.publify_core_engine.rb",
    "content": "# frozen_string_literal: true\n\n# This migration comes from publify_core_engine (originally 20190209155717)\nclass RemoveTextFilterIds < ActiveRecord::Migration[5.2]\n  def up\n    remove_column :contents, :text_filter_id\n    remove_column :feedback, :text_filter_id\n    remove_column :users, :text_filter_id\n  end\n\n  def down\n    add_column :contents, :text_filter_id, :integer\n    add_column :feedback, :text_filter_id, :integer\n    add_column :users, :text_filter_id, :string, default: \"1\"\n\n    add_index :contents, [:text_filter_id]\n    add_index :feedback, [:text_filter_id]\n    add_index :users, [:text_filter_id]\n  end\nend\n"
  },
  {
    "path": "db/migrate/20190210121317_remove_text_filters.publify_core_engine.rb",
    "content": "# frozen_string_literal: true\n\n# This migration comes from publify_core_engine (originally 20190209160610)\nclass RemoveTextFilters < ActiveRecord::Migration[5.2]\n  def up\n    drop_table :text_filters\n  end\n\n  def down\n    create_table :text_filters do |t|\n      t.string :name\n      t.string :description\n      t.string :markup\n      t.text :filters\n      t.text :params\n    end\n  end\nend\n"
  },
  {
    "path": "db/migrate/20200413141133_add_unique_indexes.publify_core_engine.rb",
    "content": "# frozen_string_literal: true\n\n# This migration comes from publify_core_engine (originally 20200413140440)\n\nclass AddUniqueIndexes < ActiveRecord::Migration[5.2]\n  def change\n    add_index :post_types, :name, unique: true\n    add_index :redirects, :from_path, unique: true\n    add_index :tags, [:blog_id, :name], unique: true\n    add_index :users, :login, unique: true\n  end\nend\n"
  },
  {
    "path": "db/migrate/20221007091118_remove_table_sitealizer.publify_core_engine.rb",
    "content": "# frozen_string_literal: true\n\n# This migration comes from publify_core_engine (originally 20221007091049)\nclass RemoveTableSitealizer < ActiveRecord::Migration[6.1]\n  def up\n    drop_table :sitealizer\n  end\n\n  def down\n    create_table :sitealizer do |t|\n      t.string :path\n      t.string :ip\n      t.string :referer\n      t.string :language\n      t.string :user_agent\n      t.datetime :created_at\n      t.date :created_on\n    end\n  end\nend\n"
  },
  {
    "path": "db/migrate/20221010170801_remove_page_caches_table.publify_core_engine.rb",
    "content": "# frozen_string_literal: true\n\n# This migration comes from publify_core_engine (originally 20221010092846)\nclass RemovePageCachesTable < ActiveRecord::Migration[6.1]\n  def up\n    drop_table :page_caches\n  end\n\n  def down\n    create_table :page_caches do |t|\n      t.string :name\n    end\n\n    add_index :page_caches, :name\n  end\nend\n"
  },
  {
    "path": "db/migrate/20221012164027_remove_itunes_fields_from_resources.publify_core_engine.rb",
    "content": "# frozen_string_literal: true\n\n# This migration comes from publify_core_engine (originally 20221012163214)\nclass RemoveItunesFieldsFromResources < ActiveRecord::Migration[6.1]\n  def change\n    remove_column :resources, :itunes_metadata, :boolean\n    remove_column :resources, :itunes_author, :string\n    remove_column :resources, :itunes_subtitle, :string\n    remove_column :resources, :itunes_duration, :integer\n    remove_column :resources, :itunes_summary, :text\n    remove_column :resources, :itunes_keywords, :string\n    remove_column :resources, :itunes_category, :string\n    remove_column :resources, :itunes_explicit, :boolean\n  end\nend\n"
  },
  {
    "path": "db/schema.rb",
    "content": "# This file is auto-generated from the current state of the database. Instead\n# of editing this file, please use the migrations feature of Active Record to\n# incrementally modify your database, and then regenerate this schema definition.\n#\n# This file is the source Rails uses to define your schema when running `bin/rails\n# db:schema:load`. When creating a new database, `bin/rails db:schema:load` tends to\n# be faster and is potentially less error prone than running all of your\n# migrations from scratch. Old migrations may fail to apply correctly if those\n# migrations use external dependencies or application code.\n#\n# It's strongly recommended that you check this file into your version control system.\n\nActiveRecord::Schema[7.1].define(version: 2022_10_12_164027) do\n  # These are extensions that must be enabled in order to support this database\n  enable_extension \"plpgsql\"\n\n  create_table \"blogs\", id: :serial, force: :cascade do |t|\n    t.text \"settings\"\n    t.string \"base_url\"\n  end\n\n  create_table \"contents\", id: :serial, force: :cascade do |t|\n    t.string \"type\"\n    t.string \"title\"\n    t.string \"author\"\n    t.text \"body\"\n    t.text \"extended\"\n    t.text \"excerpt\"\n    t.datetime \"created_at\", precision: nil\n    t.datetime \"updated_at\", precision: nil\n    t.integer \"user_id\"\n    t.string \"permalink\"\n    t.string \"guid\"\n    t.text \"whiteboard\"\n    t.string \"name\"\n    t.boolean \"allow_pings\"\n    t.boolean \"allow_comments\"\n    t.datetime \"published_at\", precision: nil\n    t.string \"state\"\n    t.integer \"parent_id\"\n    t.text \"settings\"\n    t.string \"post_type\", default: \"read\"\n    t.integer \"blog_id\", null: false\n    t.string \"text_filter_name\"\n    t.index [\"id\", \"type\"], name: \"index_contents_on_id_and_type\"\n    t.index [\"user_id\"], name: \"index_contents_on_user_id\"\n  end\n\n  create_table \"contents_tags\", id: false, force: :cascade do |t|\n    t.integer \"content_id\"\n    t.integer \"tag_id\"\n    t.index [\"content_id\"], name: \"index_contents_tags_on_content_id\"\n    t.index [\"tag_id\"], name: \"index_contents_tags_on_tag_id\"\n  end\n\n  create_table \"feedback\", id: :serial, force: :cascade do |t|\n    t.string \"type\"\n    t.string \"title\"\n    t.string \"author\"\n    t.text \"body\"\n    t.text \"excerpt\"\n    t.datetime \"created_at\", precision: nil\n    t.datetime \"updated_at\", precision: nil\n    t.integer \"user_id\"\n    t.string \"guid\"\n    t.text \"whiteboard\"\n    t.integer \"article_id\"\n    t.string \"email\"\n    t.string \"url\"\n    t.string \"ip\", limit: 40\n    t.string \"blog_name\"\n    t.string \"state\"\n    t.string \"user_agent\"\n    t.string \"text_filter_name\"\n    t.index [\"article_id\"], name: \"index_feedback_on_article_id\"\n    t.index [\"id\", \"type\"], name: \"index_feedback_on_id_and_type\"\n    t.index [\"user_id\"], name: \"index_feedback_on_user_id\"\n  end\n\n  create_table \"pings\", id: :serial, force: :cascade do |t|\n    t.integer \"article_id\"\n    t.string \"url\"\n    t.datetime \"created_at\", precision: nil\n    t.index [\"article_id\"], name: \"index_pings_on_article_id\"\n  end\n\n  create_table \"post_types\", id: :serial, force: :cascade do |t|\n    t.string \"name\"\n    t.string \"permalink\"\n    t.string \"description\"\n    t.index [\"name\"], name: \"index_post_types_on_name\", unique: true\n  end\n\n  create_table \"redirects\", id: :serial, force: :cascade do |t|\n    t.string \"from_path\"\n    t.string \"to_path\"\n    t.datetime \"created_at\", precision: nil\n    t.datetime \"updated_at\", precision: nil\n    t.integer \"content_id\"\n    t.integer \"blog_id\"\n    t.index [\"from_path\"], name: \"index_redirects_on_from_path\", unique: true\n  end\n\n  create_table \"resources\", id: :serial, force: :cascade do |t|\n    t.integer \"size\"\n    t.string \"upload\"\n    t.string \"mime\"\n    t.datetime \"created_at\", precision: nil\n    t.datetime \"updated_at\", precision: nil\n    t.integer \"content_id\"\n    t.integer \"blog_id\", null: false\n    t.index [\"content_id\"], name: \"index_resources_on_content_id\"\n  end\n\n  create_table \"sessions\", id: :serial, force: :cascade do |t|\n    t.string \"session_id\", null: false\n    t.text \"data\"\n    t.datetime \"created_at\", precision: nil, null: false\n    t.datetime \"updated_at\", precision: nil, null: false\n    t.index [\"session_id\"], name: \"index_sessions_on_session_id\", unique: true\n    t.index [\"updated_at\"], name: \"index_sessions_on_updated_at\"\n  end\n\n  create_table \"sidebars\", id: :serial, force: :cascade do |t|\n    t.integer \"active_position\"\n    t.text \"config\"\n    t.integer \"staged_position\"\n    t.string \"type\"\n    t.integer \"blog_id\", null: false\n    t.index [\"id\", \"type\"], name: \"index_sidebars_on_id_and_type\"\n  end\n\n  create_table \"tags\", id: :serial, force: :cascade do |t|\n    t.string \"name\"\n    t.datetime \"created_at\", precision: nil\n    t.datetime \"updated_at\", precision: nil\n    t.string \"display_name\"\n    t.integer \"blog_id\"\n    t.index [\"blog_id\", \"name\"], name: \"index_tags_on_blog_id_and_name\", unique: true\n  end\n\n  create_table \"triggers\", id: :serial, force: :cascade do |t|\n    t.integer \"pending_item_id\"\n    t.string \"pending_item_type\"\n    t.datetime \"due_at\", precision: nil\n    t.string \"trigger_method\"\n    t.index [\"pending_item_id\", \"pending_item_type\"], name: \"index_triggers_on_pending_item_id_and_pending_item_type\"\n  end\n\n  create_table \"users\", id: :serial, force: :cascade do |t|\n    t.string \"login\"\n    t.string \"encrypted_password\", default: \"\", null: false\n    t.string \"email\", default: \"\", null: false\n    t.text \"name\"\n    t.boolean \"notify_via_email\"\n    t.boolean \"notify_on_new_articles\"\n    t.boolean \"notify_on_comments\"\n    t.string \"remember_token\"\n    t.datetime \"remember_token_expires_at\", precision: nil\n    t.string \"state\", default: \"active\"\n    t.datetime \"last_connection\", precision: nil\n    t.text \"settings\"\n    t.integer \"resource_id\"\n    t.string \"reset_password_token\"\n    t.datetime \"reset_password_sent_at\", precision: nil\n    t.datetime \"remember_created_at\", precision: nil\n    t.integer \"sign_in_count\", default: 0, null: false\n    t.datetime \"current_sign_in_at\", precision: nil\n    t.datetime \"last_sign_in_at\", precision: nil\n    t.string \"current_sign_in_ip\"\n    t.string \"last_sign_in_ip\"\n    t.datetime \"created_at\", precision: nil\n    t.datetime \"updated_at\", precision: nil\n    t.string \"profile\"\n    t.string \"text_filter_name\"\n    t.index [\"email\"], name: \"index_users_on_email\", unique: true\n    t.index [\"login\"], name: \"index_users_on_login\", unique: true\n    t.index [\"reset_password_token\"], name: \"index_users_on_reset_password_token\", unique: true\n    t.index [\"resource_id\"], name: \"index_users_on_resource_id\"\n  end\n\nend\n"
  },
  {
    "path": "db/seeds.rb",
    "content": "# frozen_string_literal: true\n\nPublifyCore::Engine.load_seed\n"
  },
  {
    "path": "doc/CACHE.SETUP.README",
    "content": "To fully profit from Publify static caching capabilities, you need to add the\nfollowing rewrite rules to either your .htaccess or your virtualhost after\ndeclaring the document root.\n\n== Rewrite Rules For Apache\n\n=== If Publify is installed at your URL root.\n  \n  RewriteEngine On\n\n  RewriteCond %{DOCUMENT_ROOT}/cache/index.html -f\n  RewriteRule ^/$ /cache/index.html [PT]\n\n  RewriteCond %{DOCUMENT_ROOT}/cache/%{REQUEST_FILENAME} -f\n  RewriteRule ^/(.*)$ /cache/$1 [PT]\n\n  RewriteCond %{DOCUMENT_ROOT}/cache/%{REQUEST_FILENAME}.html -f\n  RewriteRule ^/(.*)$ /cache/$1.html [PT]\n\n=== If Publify is installed in a sub-URL, e.g., /blog:\n\n  # Note that 'blog' appears twice in the rewritten URL.\n\n  RewriteEngine On\n\n  RewriteCond %{DOCUMENT_ROOT}/blog/cache/blog.html -f\n  RewriteRule ^/blog$ /blog/cache/blog.html [PT]\n\n  RewriteCond %{DOCUMENT_ROOT}/blog/cache/%{REQUEST_FILENAME} -f\n  RewriteRule ^/blog/(.*)$ /blog/cache/blog/$1 [PT]\n\n  RewriteCond %{DOCUMENT_ROOT}/blog/cache/%{REQUEST_FILENAME}.html -f\n  RewriteRule ^/blog/(.*)$ /blog/cache/blog/$1.html [PT]\n\n== Rewrite Rules For Nginx\n\n  if (-f $request_filename) {\n    break;\n  }\n\n  if (-f $document_root/cache/index.html) {\n    rewrite ^/$ /cache/index.html break;\n  }\n\n  if (-f $document_root/cache$uri) {\n    rewrite (.*) /cache$1 break;\n    break;\n  }\n\n  if (-f $document_root/cache$uri.html) {\n    rewrite (.*) /cache$1.html break;\n    break;\n  }\n"
  },
  {
    "path": "doc/dependency_decisions.yml",
    "content": "---\n- - :permit\n  - MIT\n  - :who: \n    :why: \n    :versions: []\n    :when: 2017-07-22 20:10:47.517185110 Z\n- - :permit\n  - New BSD\n  - :who: \n    :why: \n    :versions: []\n    :when: 2017-07-22 20:10:58.423002290 Z\n- - :permit\n  - ruby\n  - :who: \n    :why: \n    :versions: []\n    :when: 2017-07-28 12:17:13.166276946 Z\n- - :permit\n  - Apache 2.0\n  - :who: \n    :why: \n    :versions: []\n    :when: 2017-07-28 12:17:23.516443145 Z\n- - :permit\n  - Simplified BSD\n  - :who: \n    :why: \n    :versions: []\n    :when: 2017-07-28 12:17:39.295508085 Z\n- - :approve\n  - easy_translate\n  - :who: \n    :why: Licensed under the MIT License\n    :versions:\n    - 0.5.0\n    :when: 2017-07-28 12:37:43.703529091 Z\n- - :approve\n  - bluecloth\n  - :who: \n    :why: \n    :versions: []\n    :when: 2018-08-31 11:04:41.169889983 Z\n- - :approve\n  - unf\n  - :who: \n    :why: \n    :versions: []\n    :when: 2018-08-31 11:04:56.051894107 Z\n- - :permit\n  - ISC\n  - :who: \n    :why: \n    :versions: []\n    :when: 2018-08-31 11:05:29.553665934 Z\n- - :permit\n  - WTFPL\n  - :who: \n    :why: \n    :versions: []\n    :when: 2020-09-13 15:15:06.072195607 Z\n"
  },
  {
    "path": "lib/generators/sidebar/USAGE",
    "content": "Description:\n    Generate Sidebar plugin for Typo\n\nExample:\n    rails generate sidebar ThingSidebar\n\n    This will create:\n        lib/thing_sidebar/lib/thing_sidebar.rb\n        lib/thing_sidebar/app/views/thing_sidebar/_content.html.erb\n        spec/models/thing_sidebar_spec.rb\n"
  },
  {
    "path": "lib/generators/sidebar/sidebar_generator.rb",
    "content": "# frozen_string_literal: true\n\nclass SidebarGenerator < Rails::Generators::NamedBase\n  source_root File.expand_path(\"templates\", __dir__)\n\n  def copy_stuff\n    template \"sidebar.rb.erb\", \"#{plugin_path}/lib/#{file_name}.rb\"\n    template \"_content.html.erb.erb\",\n             \"#{plugin_path}/app/views/#{file_name}/_content.html.erb\"\n    template \"model_spec.rb.erb\", \"spec/models/#{file_name}_spec.rb\"\n  end\n\n  private\n\n  def plugin_path\n    @plugin_path ||= \"lib/#{file_name}\"\n  end\nend\n"
  },
  {
    "path": "lib/generators/sidebar/templates/_content.html.erb.erb",
    "content": "<h3 class='sidebar-title'><%= class_name %></h3>\n<div class='<%= file_name.sub(/_sidebar/, '') %>'-body>\n<p>Replace this text with the real sidebar view code</p>\n<p>You should be able to access <code>request</code>,\n  <code>controller</code>, <code>params</code> etc,\n  as well as local variables set from the sidebar settings. So if you've done\n  <code>setting :title, 'Whatever'</code>, you can use &lt;%= title %&gt;\n  to get at its value. The current sidebar object is accessible as\n  <code>sidebar</code>.</p>\n</div>\n"
  },
  {
    "path": "lib/generators/sidebar/templates/model_spec.rb.erb",
    "content": "require 'rails_helper'\n\nRSpec.describe <%= class_name %> do\n  it 'is available' do\n    expect(SidebarRegistry.available_sidebars).to include(<%= class_name %>)\n  end\nend\n"
  },
  {
    "path": "lib/generators/sidebar/templates/sidebar.rb.erb",
    "content": "class <%= class_name %> < Sidebar\n  # display_name \"<%= class_name.underscore.humanize %>\" # Default\n  description \"Describe your sidebar here\"\n\n  # Check the other sidebars for the sort of thing you can do with setting\n  # declarations\n\n  def parse_request(contents, params)\n    # contents is a list of the items being rendered on the current page\n    # params is the params hash for the current request\n\n    # Take a look at (eg) the amazon sidebar for examples of what gets done here\n    # If your sidebar doesn't depend on the request or the contents, you don't\n    # need to do anything here.\n  end\nend\n"
  },
  {
    "path": "lib/publify_app/textfilter/flickr.rb",
    "content": "# frozen_string_literal: true\n\nclass PublifyApp\n  class Textfilter\n    class Flickr < TextFilterPlugin::MacroPost\n      plugin_display_name \"Flickr\"\n      plugin_description \"Automatically generate image tags for Flickr images\"\n\n      def self.help_text\n        <<~TXT\n          You can use `<publify:flickr>` to display images from\n          [Flickr](http://flickr.com). Example:\n\n              <publify:flickr img=\"31367273\" size=\"small\"/>\n\n          will produce an `<img>` tag showing image number 31367273 from\n          Flickr. This image will be linked to the Flickr page for this image,\n          so you can zoom in and see larger versions. It will also have a\n          comment block attached if a description has been attached to the\n          picture in Flickr.\n\n          This macro takes a number of parameters:\n\n          * **img** The Flickr image ID of the picture that you wish to use.\n            This shows up in the URL whenever you're viewing a picture in\n            Flickr; for example, the image ID for\n            <http://flickr.com/photos/scottlaird/31367273> is 31367273.\n          * **size** The image size that you'd like to display.  Options are:\n            * square (75x75)\n            * thumbnail (maximum size 100 pixels)\n            * small (maximum size 240 pixels)\n            * medium (maximum size 500 pixels)\n            * large (maximum size 1024 pixels)\n            * original\n          * **style** This is passed through to the enclosing `<div>` that this\n            macro generates. To float the flickr image on the right, use\n            `style=\"float:right\"`.\n          * **caption** The caption displayed below the image. By default, this\n            is Flickr's description of the image. to disable, use `caption=\"\"`.\n          * **title** The tooltip title associated with the image. Defaults to\n            Flickr's image title.\n          * **alt** The alt text associated with the image. By default, this is\n            the same as the title.\n        TXT\n      end\n\n      def self.macrofilter(attrib, _text = \"\")\n        img = attrib[\"img\"]\n        size = attrib[\"size\"] || \"square\"\n        style = attrib[\"style\"]\n        caption = attrib[\"caption\"]\n        title = attrib[\"title\"]\n        alt = attrib[\"alt\"]\n\n        begin\n          flickrimage = flickr.photos.getInfo(photo_id: img)\n          sizes = flickr.photos.getSizes(photo_id: img)\n\n          details =\n            sizes.find { |s| s[\"label\"].casecmp(size.downcase).zero? } || sizes.first\n          width = details[\"width\"]\n          height = details[\"height\"]\n          # use protocol-relative URL after getting the source address\n          # so not to break HTTPS support\n          imageurl = details[\"source\"].sub(/^https?:/, \"\")\n          imagelink = flickrimage.urls.find { |u| u.type == \"photopage\" }.to_s\n\n          description = flickrimage.description\n          caption ||= sanitize(CGI.unescapeHTML(description)) if description.present?\n          title ||= flickrimage.title\n          alt ||= title\n\n          captioncode = if caption.blank?\n                          \"\"\n                        else\n                          \"<p class=\\\"caption\\\" style=\\\"width:#{width}px\\\">#{caption}</p>\"\n                        end\n\n          \"<div style=\\\"#{style}\\\" class=\\\"flickrplugin\\\"><a href=\\\"#{imagelink}\\\">\" \\\n            \"<img src=\\\"#{imageurl}\\\" width=\\\"#{width}\\\" height=\\\"#{height}\\\"\" \\\n            \" alt=\\\"#{alt}\\\" title=\\\"#{title}\\\"/></a>#{captioncode}</div>\"\n        rescue StandardError => e\n          logger.info e.message\n          \"<div class='broken_flickr_link'>`#{img}' could not be displayed because:\" \\\n            \" <br />#{CGI.escapeHTML(e.message)}</div>\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "lib/publify_app/textfilter/htmlfilter.rb",
    "content": "# frozen_string_literal: true\n\nclass PublifyApp\n  class Textfilter\n    class Htmlfilter < TextFilterPlugin\n      plugin_display_name \"HTML Filter\"\n      plugin_description \"Strip HTML tags\"\n\n      def self.filtertext(text)\n        text.to_s.gsub(\"<\", \"&lt;\").gsub(\">\", \"&gt;\")\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "lib/publify_app/textfilter/lightbox.rb",
    "content": "# frozen_string_literal: true\n\nclass PublifyApp\n  class Textfilter\n    class Lightbox < TextFilterPlugin::MacroPost\n      plugin_display_name \"Lightbox\"\n      plugin_description \"Automatically generate tags for images displayed in a lightbox\"\n\n      def self.help_text\n        <<~TXT\n          You can use `<publify:lightbox>` to display images from [Flickr](http://flickr.com)\n          or a provided URL which, when clicked, will be shown in a lightbox using Lokesh Dhakar's\n          [Lightbox](http://www.huddletogether.com/projects/lightbox/) Javascript\n\n          Example:\n\n              <publify:lightbox img=\"31367273\" thumbsize=\"thumbnail\" displaysize=\"original\"/>\n              <publify:lightbox src=\"/files/myimage.png\" thumbsrc=\"/files/myimage-thumb.png\"/>\n\n          The first will produce an `<img>` tag showing image number 31367273\n          from Flickr using the thumbnail image size.  The image will be linked\n          to the original image file from Flickr.  When the link is clicked,\n          the larger picture will be overlaid on top of the existing page\n          instead of taking you over to the Flickr site.\n          The second will do the same but use the `src` URL as the large\n          picture and the `thumbsrc` URL as the thumbnail image. To understand\n          what this looks like, have a peek at Lokesh Dhakar's\n          [examples](http://www.huddletogether.com/projects/lightbox/).\n          It will also have a comment block attached if a description has been\n          attached to the picture in Flickr or the caption attribute is used.\n\n          For theme writers, the link is enclosed in a div tag with a \"lightboxplugin\"\n          class.  Because this filter requires javascript and css include files, it\n          will only work with themes using the `<%= page_header %>` convenience function\n          in their layouts. As of this writing only Azure does this.\n\n          This macro takes a number of parameters:\n\n          Flickr attributes:\n\n          * **img** The Flickr image ID of the picture that you wish to use.\n            This shows up in the URL whenever you're viewing a picture in Flickr;\n            for example, the image ID for\n            <http://flickr.com/photos/scottlaird/31367273> is 31367273.\n          * **thumbsize** The image size that you'd like to display. Typically\n            you would use square, thumbnail or small. Options are:\n            * square (75x75)\n            * thumbnail (maximum size 100 pixels)\n            * small (maximum size 240 pixels)\n            * medium (maximum size 500 pixels)\n            * large (maximum size 1024 pixels)\n            * original\n          * **displaysize** The image size for the lightbox overlay shown when\n            the user clicks the thumbnail.  Options are the same as for\n            thumbsize, but typically you would use medium or large.  If your\n            image files are quite large on Flickr you probably want to avoid\n            using original.\n\n          Direct URL attributes:\n\n          * **src** The URL to the picture you wish to use.\n          * **thumbsrc** The URL to the thumbnail you would like to use. If\n            this is not provided, the original picture will be used with the\n            width and height properties of the `<img>` tag set to 100x100.\n\n          Common attributes:\n\n          * **style** This is passed through to the enclosing `<div>` that this\n            macro generates. To float the image on the right, use\n            `style=\"float:right\"`.\n          * **caption** The caption displayed below the image. By default,\n            this is Flickr's description of the image. to disable, use\n            `caption=\"\"`.\n          * **title** The tooltip title associated with the image. Defaults to\n            Flickr's image title.\n          * **alt** The alt text associated with the image. By default, this is\n            the same as the title.\n          * **set** Add image to a set\n          * **class** adds an existing CSS class\n        TXT\n      end\n\n      def self.macrofilter(attrib, _text = \"\")\n        # FIXME: style is not used\n        # style = attrib['style']\n        caption = attrib[\"caption\"]\n        title = attrib[\"title\"]\n        alt = attrib[\"alt\"]\n        theclass = attrib[\"class\"]\n        set = attrib[\"set\"]\n        thumburl = \"\"\n        displayurl = \"\"\n\n        img = attrib[\"img\"]\n        if img\n          thumbsize = attrib[\"thumbsize\"] || \"square\"\n          displaysize = attrib[\"displaysize\"] || \"original\"\n\n          flickrimage = flickr.photos.getInfo(photo_id: img)\n          sizes = flickr.photos.getSizes(photo_id: img)\n\n          thumbdetails =\n            sizes.find { |s| s[\"label\"].casecmp(thumbsize.downcase).zero? } || sizes.first\n          displaydetails =\n            sizes.find { |s| s[\"label\"].casecmp(displaysize.downcase).zero? } || sizes.first\n\n          width = thumbdetails[\"width\"]\n          height = thumbdetails[\"height\"]\n\n          # use protocol-relative URL after getting the source address\n          # so not to break HTTPS support\n          thumburl = thumbdetails[\"source\"].sub(/^https?:/, \"\")\n          displayurl = displaydetails[\"source\"].sub(/^https?:/, \"\")\n\n          caption ||= flickrimage.description\n          title ||= flickrimage.title\n          alt ||= title\n        else\n          thumburl = attrib[\"thumbsrc\"] unless attrib[\"thumbsrc\"].nil?\n          displayurl = attrib[\"src\"] unless attrib[\"src\"].nil?\n\n          if thumburl.empty?\n            thumburl = displayurl\n            width = 100\n            height = 100\n          else\n            width = height = nil\n          end\n        end\n\n        rel = set.blank? ? \"lightbox\" : \"lightbox[#{set}]\"\n\n        captioncode = if caption.blank?\n                        \"\"\n                      else\n                        \"<p class=\\\"caption\\\" style=\\\"width:#{width}px\\\">#{caption}</p>\"\n                      end\n\n        img_attrs = %(src=\"#{thumburl}\")\n        img_attrs << %( class=\"#{theclass}\") if theclass\n        img_attrs << %( width=\"#{width}\") if width\n        img_attrs << %( height=\"#{height}\") if height\n        img_attrs << %( alt=\"#{alt}\" title=\"#{title}\")\n        \"<a href=\\\"#{displayurl}\\\" data-toggle=\\\"#{rel}\\\" title=\\\"#{title}\\\">\" \\\n          \"<img #{img_attrs}/></a>#{captioncode}\"\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "lib/publify_plugins/avatar_plugin.rb",
    "content": "# frozen_string_literal: true\n\nrequire \"publify_plugins\"\n\nmodule PublifyPlugins\n  class AvatarPlugin < Base\n    def self.kind\n      :avatar\n    end\n\n    def self.get_avatar(_options = {})\n      raise NotImplementedError\n    end\n\n    def self.name\n      raise NotImplementedError\n    end\n  end\nend\n"
  },
  {
    "path": "lib/publify_plugins/gravatar.rb",
    "content": "# frozen_string_literal: true\n\nrequire \"publify_plugins\"\nrequire \"publify_plugins/avatar_plugin\"\n\n# PublifyAvatarGravatar\nmodule PublifyPlugins\n  class Gravatar < AvatarPlugin\n    extend ActionView::Helpers::TagHelper\n\n    @description = \"Provide user avatar image throught the http://gravatar.com service.\"\n\n    class << self\n      def get_avatar(options = {})\n        email = options.delete(:email) || \"\"\n        gravatar_tag(email, options)\n      end\n\n      def name\n        \"Gravatar\"\n      end\n\n      private\n\n      # Generate the image tag for a commenters gravatar based on their email address\n      # Valid options are described at http://www.gravatar.com/implement.php\n      def gravatar_tag(email, options = {})\n        opts = {}\n        opts[:gravatar_id] = Digest::MD5.hexdigest(email.strip)\n        opts[:default] = CGI.escape(options[:default]) if options.include?(:default)\n        opts[:size] = options[:size] || 48\n        klass = options[:class] || \"avatar gravatar\"\n\n        url = +\"https://www.gravatar.com/avatar.php?\"\n        url << opts.map { |key, value| \"#{key}=#{value}\" }.sort.join(\"&\")\n        tag.img(src: url, class: klass, alt: \"Gravatar\")\n      end\n    end\n  end\nend\n\nPublifyPlugins::Keeper.register(PublifyPlugins::Gravatar)\n"
  },
  {
    "path": "lib/tasks/i18n.rake",
    "content": "# frozen_string_literal: true\n\nrequire \"English\"\n\nnamespace :i18n do\n  desc \"Check translation health\"\n  task :health do\n    `bin/i18n-tasks health`\n    abort(\"Translation problems found\") unless $CHILD_STATUS.success?\n  end\nend\n\ntask lint: \"i18n:health\"\n"
  },
  {
    "path": "lib/tasks/rubocop.rake",
    "content": "# frozen_string_literal: true\n\nbegin\n  require \"rubocop/rake_task\"\n\n  RuboCop::RakeTask.new do |task|\n    task.options << \"--display-cop-names\"\n  end\n\n  task lint: :rubocop\n\n  desc \"Regenerate RuboCop to-do file\"\n  task \"rubocop:regenerate_todos\" do\n    sh \"rubocop --regenerate-todo\"\n  end\nrescue LoadError\n  # No rubocop available\n  nil\nend\n"
  },
  {
    "path": "log/.keep",
    "content": ""
  },
  {
    "path": "public/404.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n  <title>The page you were looking for doesn't exist (404)</title>\n  <meta name=\"viewport\" content=\"width=device-width,initial-scale=1\">\n  <style>\n  body {\n    background-color: #EFEFEF;\n    color: #2E2F30;\n    text-align: center;\n    font-family: arial, sans-serif;\n    margin: 0;\n  }\n\n  div.dialog {\n    width: 95%;\n    max-width: 33em;\n    margin: 4em auto 0;\n  }\n\n  div.dialog > div {\n    border: 1px solid #CCC;\n    border-right-color: #999;\n    border-left-color: #999;\n    border-bottom-color: #BBB;\n    border-top: #B00100 solid 4px;\n    border-top-left-radius: 9px;\n    border-top-right-radius: 9px;\n    background-color: white;\n    padding: 7px 12% 0;\n    box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);\n  }\n\n  h1 {\n    font-size: 100%;\n    color: #730E15;\n    line-height: 1.5em;\n  }\n\n  div.dialog > p {\n    margin: 0 0 1em;\n    padding: 1em;\n    background-color: #F7F7F7;\n    border: 1px solid #CCC;\n    border-right-color: #999;\n    border-left-color: #999;\n    border-bottom-color: #999;\n    border-bottom-left-radius: 4px;\n    border-bottom-right-radius: 4px;\n    border-top-color: #DADADA;\n    color: #666;\n    box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);\n  }\n  </style>\n</head>\n\n<body>\n  <!-- This file lives in public/404.html -->\n  <div class=\"dialog\">\n    <div>\n      <h1>The page you were looking for doesn't exist.</h1>\n      <p>You may have mistyped the address or the page may have moved.</p>\n    </div>\n    <p>If you are the application owner check the logs for more information.</p>\n  </div>\n</body>\n</html>\n"
  },
  {
    "path": "public/422.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n  <title>The change you wanted was rejected (422)</title>\n  <meta name=\"viewport\" content=\"width=device-width,initial-scale=1\">\n  <style>\n  body {\n    background-color: #EFEFEF;\n    color: #2E2F30;\n    text-align: center;\n    font-family: arial, sans-serif;\n    margin: 0;\n  }\n\n  div.dialog {\n    width: 95%;\n    max-width: 33em;\n    margin: 4em auto 0;\n  }\n\n  div.dialog > div {\n    border: 1px solid #CCC;\n    border-right-color: #999;\n    border-left-color: #999;\n    border-bottom-color: #BBB;\n    border-top: #B00100 solid 4px;\n    border-top-left-radius: 9px;\n    border-top-right-radius: 9px;\n    background-color: white;\n    padding: 7px 12% 0;\n    box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);\n  }\n\n  h1 {\n    font-size: 100%;\n    color: #730E15;\n    line-height: 1.5em;\n  }\n\n  div.dialog > p {\n    margin: 0 0 1em;\n    padding: 1em;\n    background-color: #F7F7F7;\n    border: 1px solid #CCC;\n    border-right-color: #999;\n    border-left-color: #999;\n    border-bottom-color: #999;\n    border-bottom-left-radius: 4px;\n    border-bottom-right-radius: 4px;\n    border-top-color: #DADADA;\n    color: #666;\n    box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);\n  }\n  </style>\n</head>\n\n<body>\n  <!-- This file lives in public/422.html -->\n  <div class=\"dialog\">\n    <div>\n      <h1>The change you wanted was rejected.</h1>\n      <p>Maybe you tried to change something you didn't have access to.</p>\n    </div>\n    <p>If you are the application owner check the logs for more information.</p>\n  </div>\n</body>\n</html>\n"
  },
  {
    "path": "public/500.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n  <title>We're sorry, but something went wrong (500)</title>\n  <meta name=\"viewport\" content=\"width=device-width,initial-scale=1\">\n  <style>\n  body {\n    background-color: #EFEFEF;\n    color: #2E2F30;\n    text-align: center;\n    font-family: arial, sans-serif;\n    margin: 0;\n  }\n\n  div.dialog {\n    width: 95%;\n    max-width: 33em;\n    margin: 4em auto 0;\n  }\n\n  div.dialog > div {\n    border: 1px solid #CCC;\n    border-right-color: #999;\n    border-left-color: #999;\n    border-bottom-color: #BBB;\n    border-top: #B00100 solid 4px;\n    border-top-left-radius: 9px;\n    border-top-right-radius: 9px;\n    background-color: white;\n    padding: 7px 12% 0;\n    box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);\n  }\n\n  h1 {\n    font-size: 100%;\n    color: #730E15;\n    line-height: 1.5em;\n  }\n\n  div.dialog > p {\n    margin: 0 0 1em;\n    padding: 1em;\n    background-color: #F7F7F7;\n    border: 1px solid #CCC;\n    border-right-color: #999;\n    border-left-color: #999;\n    border-bottom-color: #999;\n    border-bottom-left-radius: 4px;\n    border-bottom-right-radius: 4px;\n    border-top-color: #DADADA;\n    color: #666;\n    box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);\n  }\n  </style>\n</head>\n\n<body>\n  <!-- This file lives in public/500.html -->\n  <div class=\"dialog\">\n    <div>\n      <h1>We're sorry, but something went wrong.</h1>\n    </div>\n    <p>If you are the application owner check the logs for more information.</p>\n  </div>\n</body>\n</html>\n"
  },
  {
    "path": "spec/controllers/articles_controller_spec.rb",
    "content": "# frozen_string_literal: true\n\nrequire \"rails_helper\"\n\n# Test article rendering for installed themes\nRSpec.describe ArticlesController, type: :controller do\n  render_views\n\n  with_each_theme do |theme, _view_path|\n    context \"with theme #{theme}\" do\n      let!(:blog) { create(:blog, theme: theme) }\n\n      describe \"#redirect\" do\n        let(:article) { create(:article) }\n        let(:from_param) { article.permalink_url.sub(%r{#{blog.base_url}/}, \"\") }\n\n        it \"successfully renders an article\" do\n          get :redirect, params: { from: from_param }\n          expect(response).to be_successful\n        end\n\n        context \"when the article has an excerpt\" do\n          let(:article) { create(:article, excerpt: \"foo\", body: \"bar\") }\n\n          it \"does not render a continue reading link\" do\n            get :redirect, params: { from: from_param }\n\n            aggregate_failures do\n              expect(response.body).to have_text \"bar\"\n              expect(response.body).not_to have_text \"foo\"\n              expect(response.body)\n                .not_to have_text I18n.t!(\"articles.article_excerpt.continue_reading\")\n            end\n          end\n        end\n\n        describe \"accessing an article\" do\n          let!(:article) { create(:article) }\n\n          before do\n            get :redirect, params: { from: from_param }\n          end\n\n          it \"has good rss feed link\" do\n            expect(response.body)\n              .to have_css(\"head>link[href=\\\"#{article.permalink_url}.rss\\\"]\",\n                           visible: :all)\n          end\n\n          it \"has good atom feed link\" do\n            expect(response.body)\n              .to have_css(\"head>link[href=\\\"#{article.permalink_url}.atom\\\"]\",\n                           visible: :all)\n          end\n\n          it \"has a canonical url\" do\n            expect(response.body)\n              .to have_css(\"head>link[href='#{article.permalink_url}']\",\n                           visible: :all)\n          end\n\n          it \"has a good title\" do\n            expect(response.body)\n              .to have_css(\"title\", text: \"A big article | test blog\",\n                                    visible: :all)\n          end\n        end\n\n        describe \"theme rendering\" do\n          let!(:article) { create(:article) }\n\n          it \"renders without errors when no comments or trackbacks are present\" do\n            get :redirect, params: { from: from_param }\n            expect(response).to be_successful\n          end\n\n          it \"renders without errors when recaptcha is enabled\" do\n            Recaptcha.configure do |config|\n              config.site_key = \"YourAPIkeysHere_yyyyyyyyyyyyyyyyy\"\n              config.secret_key = \"YourAPIkeysHere_xxxxxxxxxxxxxxxxx\"\n            end\n            blog.use_recaptcha = true\n            blog.save!\n            get :redirect, params: { from: from_param }\n            expect(response).to be_successful\n          end\n\n          it \"renders without errors when comments and trackbacks are present\" do\n            create(:trackback, article: article)\n            create(:comment, article: article)\n            get :redirect, params: { from: from_param }\n            expect(response).to be_successful\n          end\n        end\n\n        context \"when the article is password protected\" do\n          let(:article) do\n            create(:article, title: \"Secretive\", body: \"protected foobar\",\n                             password: \"password\")\n          end\n\n          it \"shows a password form for the article\" do\n            get :redirect, params: { from: from_param }\n            expect(response.body).to have_field \"article_password\"\n          end\n\n          it \"does not include the article body anywhere\" do\n            get :redirect, params: { from: from_param }\n            expect(response.body).not_to include article.body\n          end\n        end\n      end\n\n      describe \"#index\" do\n        let!(:user) { create(:user) }\n\n        context \"without any parameters\" do\n          let!(:article) { create(:article) }\n          let!(:note) { create(:note) }\n\n          before do\n            get :index\n          end\n\n          it \"has good link feed rss\" do\n            expect(response.body)\n              .to have_css('head>link[href=\"http://test.host/articles.rss\"]',\n                           visible: :all)\n          end\n\n          it \"has good link feed atom\" do\n            expect(response.body)\n              .to have_css('head>link[href=\"http://test.host/articles.atom\"]',\n                           visible: :all)\n          end\n\n          it \"has a canonical url\" do\n            expect(response.body)\n              .to have_css(\"head>link[href='#{blog.base_url}/']\", visible: :all)\n          end\n\n          it \"has good title\" do\n            expect(response.body)\n              .to have_css(\"title\", text: \"test blog | test subtitle\", visible: :all)\n          end\n        end\n\n        context \"when an article has an excerpt\" do\n          let!(:article) { create(:article, excerpt: \"foo\", body: \"bar\") }\n\n          it \"renders a continue reading link\" do\n            get :index\n\n            aggregate_failures do\n              expect(response.body).not_to have_text \"bar\"\n              expect(response.body).to have_text \"foo\"\n              expect(response.body)\n                .to have_text I18n.t!(\"articles.article_excerpt.continue_reading\")\n            end\n          end\n        end\n\n        context \"when requesting archives for a month\" do\n          before do\n            create(:article, published_at: Time.utc(2004, 4, 23))\n            get \"index\", params: { year: 2004, month: 4 }\n          end\n\n          it \"has a canonical url\" do\n            expect(response.body)\n              .to have_css(\"head>link[href='#{blog.base_url}/2004/4']\",\n                           visible: :all)\n          end\n\n          it \"has a good title\" do\n            expect(response.body)\n              .to have_css(\"title\", text: \"Archives for test blog\", visible: :all)\n          end\n        end\n      end\n\n      describe \"#search\", \"with a markdown formatted article\" do\n        let!(:user) { create(:user) }\n\n        before do\n          create(:article,\n                 body: <<~MARKDOWN,\n                   in markdown format\n\n                    * we\n                    * use\n                   [ok](http://blog.ok.com) to define a link\n                 MARKDOWN\n                 text_filter_name: \"markdown\")\n          create(:article, body: \"xyz\")\n          get :search, params: { q: \"a\" }\n        end\n\n        it \"renders content with markdown interpreted and html tags removed\" do\n          expect(response.body)\n            .to have_css(\n              \"div\", text: /in markdown format\\s+we\\s+use\\s+ok to define a link/)\n        end\n      end\n\n      describe \"#search\" do\n        render_views\n\n        let!(:blog) { create(:blog) }\n        let!(:user) { create(:user) }\n        let!(:matching_article) { create(:article, body: \"public foobar\") }\n        let!(:not_matching_article) { create(:article, body: \"barbaz\") }\n        let!(:protected_article) do\n          create(:article, body: \"protected foobar\", password: \"secret!\")\n        end\n\n        it \"renders result with only matching articles\" do\n          get :search, params: { q: \"oba\" }\n\n          aggregate_failures do\n            expect(response).to render_template(:search)\n            expect(assigns[:articles])\n              .to contain_exactly matching_article, protected_article\n            expect(response.body).to have_text \"public foobar\"\n            expect(response.body).not_to have_text \"protected foobar\"\n          end\n        end\n\n        it \"has good rss feed link\" do\n          get :search, params: { q: \"oba\" }\n\n          expect(response.body)\n            .to have_css('head>link[href=\"http://test.host/search/oba.rss\"]',\n                         visible: :all)\n        end\n\n        it \"has good atom feed link\" do\n          get :search, params: { q: \"oba\" }\n\n          expect(response.body)\n            .to have_css('head>link[href=\"http://test.host/search/oba.atom\"]',\n                         visible: :all)\n        end\n\n        it \"has a canonical url\" do\n          get :search, params: { q: \"oba\" }\n\n          expect(response.body)\n            .to have_css(\"head>link[href='#{blog.base_url}/search/oba']\",\n                         visible: :all)\n        end\n\n        it \"has a good title\" do\n          get :search, params: { q: \"oba\" }\n\n          expect(response.body)\n            .to have_css(\"title\", text: \"Results for oba | test blog\",\n                                  visible: :all)\n        end\n\n        it \"renders feed rss by search\" do\n          get \"search\", params: { q: \"oba\", format: \"rss\" }\n          aggregate_failures do\n            expect(response).to be_successful\n            expect(response).to render_template(\"index_rss_feed\", layout: false)\n            expect(response.body).to have_text \"public foobar\"\n            expect(response.body).not_to have_text \"protected foobar\"\n          end\n        end\n\n        it \"renders feed atom by search\" do\n          get \"search\", params: { q: \"oba\", format: \"atom\" }\n          aggregate_failures do\n            expect(response).to be_successful\n            expect(response).to render_template(\"index_atom_feed\", layout: false)\n            expect(response.body).to have_text \"public foobar\"\n            expect(response.body).not_to have_text \"protected foobar\"\n          end\n        end\n\n        it \"search with empty result\" do\n          get \"search\", params: { q: \"abcdefghijklmnopqrstuvwxyz\" }\n          expect(response).to render_template(\"articles/error\", layout: false)\n          expect(assigns[:articles]).to eq []\n        end\n      end\n\n      describe \"#livesearch\" do\n        before do\n          create(:article, body: \"hello world and im herer\")\n          create(:article, title: \"hello\", body: \"worldwide\")\n          create(:article)\n          get :live_search, params: { q: \"hello world\" }\n        end\n\n        it \"does not have h3 tag\" do\n          expect(response.body).to have_css(\"h3\")\n        end\n      end\n\n      describe \"#archives\" do\n        context \"with several articles\" do\n          let!(:articles) { create_list(:article, 3) }\n\n          before do\n            get \"archives\"\n          end\n\n          it \"has the correct self-link and title\" do\n            expect(response.body)\n              .to have_css(\"head>link[href='#{blog.base_url}/archives']\",\n                           visible: :all)\n              .and have_css(\"title\", text: \"Archives for test blog\", visible: :all)\n          end\n\n          it \"shows the current month only once\" do\n            expect(response.body)\n              .to have_css(\"h3\", count: 1)\n              .and have_text I18n.l(articles.first.published_at,\n                                    format: :letters_month_with_year)\n          end\n        end\n\n        context \"with an article with tags\" do\n          it \"renders correctly\" do\n            create(:article, keywords: \"foo, bar\")\n            get \"archives\"\n\n            expect(response.body).to have_text \"foo\"\n            expect(response.body).to have_text \"bar\"\n          end\n        end\n      end\n\n      describe \"#preview\" do\n        context \"with logged user\" do\n          let(:admin) { create(:user, :as_admin) }\n          let(:article) { create(:article, user: admin) }\n\n          before do\n            sign_in admin\n          end\n\n          it \"renders the regular read template\" do\n            get :preview, params: { id: article.id }\n            expect(response).to render_template(\"articles/read\")\n          end\n\n          context \"when the article has an excerpt\" do\n            let(:article) { create(:article, excerpt: \"foo\", body: \"bar\", user: admin) }\n\n            it \"does not render a continue reading link\" do\n              get :preview, params: { id: article.id }\n\n              aggregate_failures do\n                expect(response.body).to have_text \"bar\"\n                expect(response.body).not_to have_text \"foo\"\n                expect(response.body)\n                  .not_to have_text I18n.t!(\"articles.article_excerpt.continue_reading\")\n              end\n            end\n          end\n        end\n      end\n\n      describe \"#check_password\" do\n        let!(:article) { create(:article, password: \"password\") }\n\n        it \"shows article when given correct password\" do\n          post :check_password, xhr: true,\n                                params: { article: { id: article.id,\n                                                     password: article.password } }\n          expect(response.body).not_to have_field \"article_password\"\n        end\n\n        it \"shows password form when given incorrect password\" do\n          post :check_password, xhr: true,\n                                params: { article: { id: article.id,\n                                                     password: \"wrong password\" } }\n          expect(response.body).to have_field \"article_password\"\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "spec/controllers/feedback_controller_spec.rb",
    "content": "# frozen_string_literal: true\n\nrequire \"rails_helper\"\n\nRSpec.describe FeedbackController, type: :controller do\n  render_views\n\n  describe \"index\" do\n    let!(:items) do\n      [\n        create(:comment, state: :presumed_ham),\n        create(:comment),\n        create(:trackback, title: \"some\"),\n        create(:trackback, title: \"items\")\n      ]\n    end\n\n    let!(:spammy_items) do\n      [\n        create(:spam_comment),\n        create(:trackback, state: \"spam\")\n      ]\n    end\n\n    context \"with atom format\" do\n      before { get \"index\", params: { format: \"atom\" } }\n\n      it \"renders a valid atom feed with 4 items\" do\n        assert_atom10 response.body, 4\n      end\n\n      it \"renders each item with the correct template\" do\n        expect(response)\n          .to render_template(partial: \"shared/_atom_item_comment\", count: 2)\n          .and render_template(partial: \"shared/_atom_item_trackback\", count: 2)\n      end\n    end\n\n    context \"with rss format\" do\n      before { get \"index\", params: { format: \"rss\" } }\n\n      it \"renders a valid rss feed with 4 items\" do\n        assert_rss20 response.body, 4\n      end\n\n      it \"renders each item with the correct template\" do\n        expect(response)\n          .to render_template(partial: \"shared/_rss_item_comment\", count: 2)\n          .and render_template(partial: \"shared/_rss_item_trackback\", count: 2)\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "spec/controllers/tags_controller_spec.rb",
    "content": "# frozen_string_literal: true\n\nrequire \"rails_helper\"\n\nRSpec.describe TagsController, type: :controller do\n  render_views\n\n  let(:blog) { create(:blog) }\n\n  with_each_theme do |theme, _view_path|\n    context \"with theme #{theme}\" do\n      before do\n        blog.theme = theme\n        blog.save\n      end\n\n      describe \"#index\" do\n        before do\n          @tag = create(:tag)\n          @tag.contents << create(:article)\n        end\n\n        it \"lists tags\" do\n          get \"index\"\n          expect(response.body).to have_text @tag.name\n        end\n      end\n\n      describe \"#show\" do\n        let(:parsed_body) { Capybara.string(response.body) }\n        let(:article) { create(:article) }\n\n        before do\n          create(:tag, name: \"foo\", contents: [article])\n          get \"show\", params: { id: \"foo\" }\n        end\n\n        it \"has good rss feed link in head\" do\n          rss_link = parsed_body\n            .find \"head>link[href='http://test.host/tag/foo.rss']\", visible: false\n          aggregate_failures do\n            expect(rss_link[\"rel\"]).to eq \"alternate\"\n            expect(rss_link[\"type\"]).to eq \"application/rss+xml\"\n            expect(rss_link[\"title\"]).to eq \"RSS\"\n          end\n        end\n\n        it \"has good atom feed link in head\" do\n          atom_link = parsed_body\n            .find \"head>link[href='http://test.host/tag/foo.atom']\", visible: false\n          aggregate_failures do\n            expect(atom_link[\"rel\"]).to eq \"alternate\"\n            expect(atom_link[\"type\"]).to eq \"application/atom+xml\"\n            expect(atom_link[\"title\"]).to eq \"Atom\"\n          end\n        end\n\n        it \"has a canonical URL\" do\n          expect(response.body)\n            .to have_css(\"head>link[href='#{blog.base_url}/tag/foo']\", visible: :all)\n        end\n\n        context \"with a password protected article\" do\n          let(:article) { create(:article, password: \"password\") }\n\n          it \"article in tag should be password protected\" do\n            get \"show\", params: { id: \"foo\" }\n            assert_select('input[id=\"article_password\"]')\n          end\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "spec/controllers/xml_controller_spec.rb",
    "content": "# frozen_string_literal: true\n\nrequire \"rails_helper\"\n\nRSpec.describe XmlController, type: :controller do\n  render_views\n\n  before do\n    create(:blog, base_url: \"http://myblog.net\")\n  end\n\n  describe \"#sitemap\" do\n    before do\n      tag = create(:tag)\n      article = create(:article)\n      article.tags = [tag]\n    end\n\n    it \"returns a valid XML response\" do\n      get :sitemap, format: :googlesitemap\n      assert_xml @response.body\n    end\n  end\nend\n"
  },
  {
    "path": "spec/features/switch_theme_spec.rb",
    "content": "# frozen_string_literal: true\n\nrequire \"rails_helper\"\n\nRSpec.feature \"Changing themes\", type: :feature do\n  let(:admin) { create(:user, :as_admin) }\n  let(:blog) { Blog.first }\n\n  before do\n    load Rails.root.join(\"db/seeds.rb\")\n    Blog.first.update blog_name: \"Awesome!\", base_url: \"http://www.example.com/\"\n  end\n\n  scenario \"switching themes by clicking links in the themes admin\" do\n    sign_in admin\n    visit \"/admin/themes\"\n\n    expect(page).to have_text \"plain - Active theme\"\n\n    click_link_or_button \"Use this theme\"\n\n    expect(page).to have_text \"bootstrap-2 - Active theme\"\n  end\nend\n"
  },
  {
    "path": "spec/lib/publify_plugins/gravatar_spec.rb",
    "content": "# frozen_string_literal: true\n\nrequire \"rails_helper\"\n\nRSpec.describe PublifyPlugins::Gravatar do\n  describe \".get_avatar\" do\n    let(:email) { \"foo@bar.baz\" }\n    let(:digest) { Digest::MD5.hexdigest(email) }\n    let(:gravatar_tag) { described_class.get_avatar(email: email) }\n\n    it \"returns an html safe string\" do\n      expect(gravatar_tag).to be_html_safe\n    end\n\n    it \"returns image tag with the correct URL\" do\n      doc = Nokogiri.parse gravatar_tag\n      element = doc.root\n      aggregate_failures do\n        expect(element.name).to eq \"img\"\n        expect(element.attr(\"src\"))\n          .to eq \"https://www.gravatar.com/avatar.php?gravatar_id=#{digest}&size=48\"\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "spec/lib/publify_textfilter_flickr_spec.rb",
    "content": "# frozen_string_literal: true\n\nrequire \"rails_helper\"\n\nRSpec.describe \"the Flickr text filter plugin\", type: :model do\n  let(:flickr_photos) { double \"flickr_photos\" }\n  let(:flickr_photo_info_url) do\n    double(\"flickr_photo_info_url\",\n           type: \"photopage\",\n           to_s: \"http://www.flickr.com/users/scottlaird/31366117\")\n  end\n  let(:flickr_photo_info) do\n    double(\"flickr_photo_info\",\n           description: \"This is Matz, Ruby's creator\",\n           title: \"Matz\",\n           urls: [flickr_photo_info_url])\n  end\n  let(:flickr_photo_sizes) do\n    [\n      {\n        \"url\" => \"http://www.flickr.com/photo_zoom.gne?id=31366117&size=sq\",\n        \"height\" => \"75\",\n        \"source\" => \"http://photos23.flickr.com/31366117_b1a791d68e_s.jpg\",\n        \"label\" => \"Square\",\n        \"width\" => \"75\"\n      },\n      {\n        \"url\" => \"http://www.flickr.com/photo_zoom.gne?id=31366117&size=t\",\n        \"height\" => \"100\",\n        \"source\" => \"http://photos23.flickr.com/31366117_b1a791d68e_t.jpg\",\n        \"label\" => \"Thumbnail\", \"width\" => \"67\"\n      },\n      {\n        \"url\" => \"http://www.flickr.com/photo_zoom.gne?id=31366117&size=s\",\n        \"height\" => \"240\",\n        \"source\" => \"http://photos23.flickr.com/31366117_b1a791d68e_m.jpg\",\n        \"label\" => \"Small\",\n        \"width\" => \"160\"\n      },\n      {\n        \"url\" => \"http://www.flickr.com/photo_zoom.gne?id=31366117&size=m\",\n        \"height\" => \"500\",\n        \"source\" => \"http://photos23.flickr.com/31366117_b1a791d68e.jpg\",\n        \"label\" => \"Medium\",\n        \"width\" => \"333\"\n      },\n      {\n        \"url\" => \"http://www.flickr.com/photo_zoom.gne?id=31366117&size=l\",\n        \"height\" => \"1024\",\n        \"source\" => \"http://photos23.flickr.com/31366117_b1a791d68e_b.jpg\",\n        \"label\" => \"Large\",\n        \"width\" => \"683\"\n      },\n      {\n        \"url\" => \"http://www.flickr.com/photo_zoom.gne?id=31366117&size=o\",\n        \"height\" => \"1536\",\n        \"source\" => \"http://photos23.flickr.com/31366117_b1a791d68e_o.jpg\",\n        \"label\" => \"Original\",\n        \"width\" => \"1024\"\n      }\n    ]\n  end\n\n  before do\n    allow(flickr).to receive(:photos).and_return flickr_photos\n    allow(flickr_photos).to receive(:getInfo).and_raise \"Photo not found\"\n    allow(flickr_photos).to receive(:getInfo).with(photo_id: \"31366117\")\n      .and_return flickr_photo_info\n    allow(flickr_photos).to receive(:getSizes).and_return flickr_photo_sizes\n  end\n\n  context \"when combined the plain text filter\" do\n    let(:filter) { TextFilter.none }\n\n    it \"shows with default settings\" do\n      result = filter\n        .filter_text('<publify:flickr img=\"31366117\" size=\"Square\" style=\"float:left\"/>')\n      expect(result).to eq '<div style=\"float:left\" class=\"flickrplugin\">' \\\n                           '<a href=\"http://www.flickr.com/users/scottlaird/31366117\">' \\\n                           '<img src=\"//photos23.flickr.com/31366117_b1a791d68e_s.jpg\"' \\\n                           ' width=\"75\" height=\"75\" alt=\"Matz\" title=\"Matz\"/></a>' \\\n                           \"<p class=\\\"caption\\\" style=\\\"width:75px\\\">This is Matz,\" \\\n                           \" Ruby's creator</p></div>\"\n    end\n\n    it \"uses default image size\" do\n      result = filter.filter_text('<publify:flickr img=\"31366117\"/>')\n      expect(result).to eq '<div style=\"\" class=\"flickrplugin\">' \\\n                           '<a href=\"http://www.flickr.com/users/scottlaird/31366117\">' \\\n                           '<img src=\"//photos23.flickr.com/31366117_b1a791d68e_s.jpg\"' \\\n                           ' width=\"75\" height=\"75\" alt=\"Matz\" title=\"Matz\"/></a>' \\\n                           \"<p class=\\\"caption\\\" style=\\\"width:75px\\\">This is Matz,\" \\\n                           \" Ruby's creator</p></div>\"\n    end\n\n    it \"uses caption\" do\n      result = filter.filter_text('<publify:flickr img=\"31366117\" caption=\"\"/>')\n      expect(result).to eq '<div style=\"\" class=\"flickrplugin\">' \\\n                           '<a href=\"http://www.flickr.com/users/scottlaird/31366117\">' \\\n                           '<img src=\"//photos23.flickr.com/31366117_b1a791d68e_s.jpg\"' \\\n                           ' width=\"75\" height=\"75\" alt=\"Matz\" title=\"Matz\"/></a></div>'\n    end\n\n    it \"broken_flickr_link\" do\n      result = filter.filter_text('<publify:flickr img=\"notaflickrid\" />')\n      expect(result).to eq \"<div class='broken_flickr_link'>\" \\\n                           \"`notaflickrid' could not be displayed because: <br />\" \\\n                           \"Photo not found</div>\"\n    end\n  end\n\n  context \"when combined with markdown\" do\n    let(:filter) { TextFilter.markdown }\n\n    it \"correctly interprets the macro\" do\n      result = filter\n        .filter_text('<publify:flickr img=\"31366117\" size=\"Square\" style=\"float:left\"/>')\n      expect(result).to eq '<div style=\"float:left\" class=\"flickrplugin\">' \\\n                           '<a href=\"http://www.flickr.com/users/scottlaird/31366117\">' \\\n                           '<img src=\"//photos23.flickr.com/31366117_b1a791d68e_s.jpg\"' \\\n                           ' width=\"75\" height=\"75\" alt=\"Matz\" title=\"Matz\"/></a>' \\\n                           \"<p class=\\\"caption\\\" style=\\\"width:75px\\\">This is Matz,\" \\\n                           \" Ruby's creator</p></div>\"\n    end\n  end\nend\n"
  },
  {
    "path": "spec/lib/publify_textfilter_lightbox_spec.rb",
    "content": "# frozen_string_literal: true\n\nrequire \"rails_helper\"\n\nRSpec.describe \"the Lightbox text filter plugin\", type: :model do\n  let(:flickr_photos) { double \"flickr_photos\" }\n  let(:flickr_photo_info_url) do\n    double(\"flickr_photo_info_url\",\n           type: \"photopage\",\n           to_s: \"http://www.flickr.com/users/scottlaird/31366117\")\n  end\n  let(:flickr_photo_info) do\n    double(\"flickr_photo_info\",\n           description: \"This is Matz, Ruby's creator\",\n           title: \"Matz\",\n           urls: [flickr_photo_info_url])\n  end\n  let(:flickr_photo_sizes) do\n    [\n      {\n        \"url\" => \"http://www.flickr.com/photo_zoom.gne?id=31366117&size=sq\",\n        \"height\" => \"75\",\n        \"source\" => \"http://photos23.flickr.com/31366117_b1a791d68e_s.jpg\",\n        \"label\" => \"Square\",\n        \"width\" => \"75\"\n      },\n      {\n        \"url\" => \"http://www.flickr.com/photo_zoom.gne?id=31366117&size=t\",\n        \"height\" => \"100\",\n        \"source\" => \"http://photos23.flickr.com/31366117_b1a791d68e_t.jpg\",\n        \"label\" => \"Thumbnail\", \"width\" => \"67\"\n      },\n      {\n        \"url\" => \"http://www.flickr.com/photo_zoom.gne?id=31366117&size=s\",\n        \"height\" => \"240\",\n        \"source\" => \"http://photos23.flickr.com/31366117_b1a791d68e_m.jpg\",\n        \"label\" => \"Small\",\n        \"width\" => \"160\"\n      },\n      {\n        \"url\" => \"http://www.flickr.com/photo_zoom.gne?id=31366117&size=m\",\n        \"height\" => \"500\",\n        \"source\" => \"http://photos23.flickr.com/31366117_b1a791d68e.jpg\",\n        \"label\" => \"Medium\",\n        \"width\" => \"333\"\n      },\n      {\n        \"url\" => \"http://www.flickr.com/photo_zoom.gne?id=31366117&size=l\",\n        \"height\" => \"1024\",\n        \"source\" => \"http://photos23.flickr.com/31366117_b1a791d68e_b.jpg\",\n        \"label\" => \"Large\",\n        \"width\" => \"683\"\n      },\n      {\n        \"url\" => \"http://www.flickr.com/photo_zoom.gne?id=31366117&size=o\",\n        \"height\" => \"1536\",\n        \"source\" => \"http://photos23.flickr.com/31366117_b1a791d68e_o.jpg\",\n        \"label\" => \"Original\",\n        \"width\" => \"1024\"\n      }\n    ]\n  end\n\n  before do\n    allow(flickr).to receive(:photos).and_return flickr_photos\n    allow(flickr_photos).to receive(:getInfo).and_raise \"Photo not found\"\n    allow(flickr_photos).to receive(:getInfo).with(photo_id: \"31366117\")\n      .and_return flickr_photo_info\n    allow(flickr_photos).to receive(:getSizes).and_return flickr_photo_sizes\n  end\n\n  context \"when combined the plain text filter\" do\n    let(:filter) { TextFilter.none }\n\n    it \"uses the given thumb image size\" do\n      result = filter\n        .filter_text('<publify:lightbox img=\"31366117\" thumbsize=\"Thumbnail\"' \\\n                     ' displaysize=\"Large\" style=\"float:left\"/>')\n      expect(result)\n        .to eq '<a href=\"//photos23.flickr.com/31366117_b1a791d68e_b.jpg\"' \\\n               ' data-toggle=\"lightbox\" title=\"Matz\">' \\\n               '<img src=\"//photos23.flickr.com/31366117_b1a791d68e_t.jpg\"' \\\n               ' width=\"67\" height=\"100\" alt=\"Matz\" title=\"Matz\"/></a>' \\\n               \"<p class=\\\"caption\\\" style=\\\"width:67px\\\">This is Matz, Ruby's creator</p>\"\n    end\n\n    it \"uses default thumb image size if none is given\" do\n      result = filter\n        .filter_text('<publify:lightbox img=\"31366117\" displaysize=\"Large\"/>')\n      expect(result)\n        .to eq '<a href=\"//photos23.flickr.com/31366117_b1a791d68e_b.jpg\"' \\\n               ' data-toggle=\"lightbox\" title=\"Matz\">' \\\n               '<img src=\"//photos23.flickr.com/31366117_b1a791d68e_s.jpg\"' \\\n               ' width=\"75\" height=\"75\" alt=\"Matz\" title=\"Matz\"/></a>' \\\n               \"<p class=\\\"caption\\\" style=\\\"width:75px\\\">This is Matz, Ruby's creator</p>\"\n    end\n\n    it \"uses default display image size if none is given\" do\n      result = filter.filter_text('<publify:lightbox img=\"31366117\"/>')\n      expect(result)\n        .to eq '<a href=\"//photos23.flickr.com/31366117_b1a791d68e_o.jpg\"' \\\n               ' data-toggle=\"lightbox\" title=\"Matz\">' \\\n               '<img src=\"//photos23.flickr.com/31366117_b1a791d68e_s.jpg\"' \\\n               ' width=\"75\" height=\"75\" alt=\"Matz\" title=\"Matz\"/></a>' \\\n               \"<p class=\\\"caption\\\" style=\\\"width:75px\\\">This is Matz, Ruby's creator</p>\"\n    end\n\n    it \"works with caption\" do\n      result = filter.filter_text('<publify:lightbox img=\"31366117\" caption=\"\"/>')\n      expect(result)\n        .to eq '<a href=\"//photos23.flickr.com/31366117_b1a791d68e_o.jpg\"' \\\n               ' data-toggle=\"lightbox\" title=\"Matz\">' \\\n               '<img src=\"//photos23.flickr.com/31366117_b1a791d68e_s.jpg\"' \\\n               ' width=\"75\" height=\"75\" alt=\"Matz\" title=\"Matz\"/></a>'\n    end\n  end\nend\n"
  },
  {
    "path": "spec/lib/text_filter_plugin_spec.rb",
    "content": "# frozen_string_literal: true\n\nrequire \"rails_helper\"\n\nRSpec.describe TextFilterPlugin do\n  describe \".available_filters\" do\n    subject { described_class.available_filters }\n\n    it \"lists usable filters\" do\n      expect(described_class.available_filters).to contain_exactly(\n        PublifyCore::TextFilter::None,\n        PublifyCore::TextFilter::Markdown,\n        PublifyCore::TextFilter::Smartypants,\n        PublifyCore::TextFilter::MarkdownSmartquotes,\n        PublifyApp::Textfilter::Htmlfilter,\n        PublifyApp::Textfilter::Flickr,\n        PublifyApp::Textfilter::Code,\n        PublifyApp::Textfilter::Lightbox)\n    end\n  end\n\n  describe \".macro_filters\" do\n    subject { described_class.macro_filters }\n\n    it \"lists the macro filters\" do\n      expect(described_class.macro_filters).to contain_exactly(\n        PublifyApp::Textfilter::Flickr,\n        PublifyApp::Textfilter::Code,\n        PublifyApp::Textfilter::Lightbox)\n    end\n  end\nend\n"
  },
  {
    "path": "spec/models/authors_sidebar_spec.rb",
    "content": "# frozen_string_literal: true\n\nrequire \"rails_helper\"\n\nRSpec.describe AuthorsSidebar do\n  let(:sidebar) { described_class.new }\n\n  it \"is included in the list of available sidebars\" do\n    expect(SidebarRegistry.available_sidebars).to include(described_class)\n  end\n\n  describe \"#authors\" do\n    let!(:authors) { create_list(:user, 2) }\n\n    it \"returns a list of users\" do\n      expect(sidebar.authors).to match_array authors\n    end\n  end\nend\n"
  },
  {
    "path": "spec/models/notes_sidebar_spec.rb",
    "content": "# frozen_string_literal: true\n\nrequire \"rails_helper\"\n\nRSpec.describe NotesSidebar do\n  it \"is available\" do\n    expect(SidebarRegistry.available_sidebars).to include(described_class)\n  end\nend\n"
  },
  {
    "path": "spec/models/popular_sidebar_spec.rb",
    "content": "# frozen_string_literal: true\n\nrequire \"rails_helper\"\n\nRSpec.describe PopularSidebar do\n  it \"is available\" do\n    expect(SidebarRegistry.available_sidebars).to include(described_class)\n  end\nend\n"
  },
  {
    "path": "spec/models/sidebar_registry_spec.rb",
    "content": "# frozen_string_literal: true\n\nrequire \"rails_helper\"\n\nRSpec.describe SidebarRegistry do\n  describe \"#available_sidebars\" do\n    it \"finds at least the standard sidebars\" do\n      expect(described_class.available_sidebars)\n        .to include(AmazonSidebar,\n                    ArchivesSidebar,\n                    AuthorsSidebar,\n                    LivesearchSidebar,\n                    MetaSidebar,\n                    NotesSidebar,\n                    PageSidebar,\n                    PopularSidebar,\n                    SearchSidebar,\n                    StaticSidebar,\n                    TagSidebar,\n                    XmlSidebar)\n    end\n  end\nend\n"
  },
  {
    "path": "spec/models/xml_sidebar_spec.rb",
    "content": "# frozen_string_literal: true\n\nrequire \"rails_helper\"\n\nRSpec.describe XmlSidebar do\n  it \"is available\" do\n    expect(SidebarRegistry.available_sidebars).to include(described_class)\n  end\nend\n"
  },
  {
    "path": "spec/rails_helper.rb",
    "content": "# frozen_string_literal: true\n\n# This file is copied to spec/ when you run 'rails generate rspec:install'\nrequire \"spec_helper\"\nENV[\"RAILS_ENV\"] ||= \"test\"\nrequire File.expand_path(\"../config/environment\", __dir__)\n# Prevent database truncation if the environment is production\nabort(\"The Rails environment is running in production mode!\") if Rails.env.production?\nrequire \"rspec/rails\"\n# Add additional requires below this line. Rails is not loaded until this point!\nrequire \"factory_bot\"\nrequire \"publify_core/testing_support/feed_assertions\"\n\nrequire \"publify_core/testing_support/factories/articles\"\nrequire \"publify_core/testing_support/factories/blogs\"\nrequire \"publify_core/testing_support/factories/comments\"\nrequire \"publify_core/testing_support/factories/contents\"\nrequire \"publify_core/testing_support/factories/notes\"\nrequire \"publify_core/testing_support/factories/pages\"\nrequire \"publify_core/testing_support/factories/post_types\"\nrequire \"publify_core/testing_support/factories/redirects\"\nrequire \"publify_core/testing_support/factories/resources\"\nrequire \"publify_core/testing_support/factories/sequences\"\nrequire \"publify_core/testing_support/factories/sidebars\"\nrequire \"publify_core/testing_support/factories/tags\"\nrequire \"publify_core/testing_support/factories/trackbacks\"\nrequire \"publify_core/testing_support/factories/users\"\n\n# Requires supporting ruby files with custom matchers and macros, etc, in\n# spec/support/ and its subdirectories. Files matching `spec/**/*_spec.rb` are\n# run as spec files by default. This means that files in spec/support that end\n# in _spec.rb will both be required and run as specs, causing the specs to be\n# run twice. It is recommended that you do not name files matching this glob to\n# end with _spec.rb. You can configure this pattern with the --pattern\n# option on the command line or in ~/.rspec, .rspec or `.rspec-local`.\n#\n# The following line is provided for convenience purposes. It has the downside\n# of increasing the boot-up time by auto-requiring all files in the support\n# directory. Alternatively, in the individual `*_spec.rb` files, manually\n# require only the support files necessary.\n\nRails.root.glob(\"spec/support/**/*.rb\").each { |f| require f }\n\n# Checks for pending migrations and applies them before tests are run.\n# If you are not using ActiveRecord, you can remove this line.\nActiveRecord::Migration.maintain_test_schema!\n\nclass ActionView::TestCase::TestController\n  include Rails.application.routes.url_helpers\nend\n\nRSpec.configure do |config|\n  # Remove this line if you're not using ActiveRecord or ActiveRecord fixtures\n  config.fixture_path = Rails.root.join(\"spec/fixtures\")\n\n  # If you're not using ActiveRecord, or you'd prefer not to run each of your\n  # examples within a transaction, remove the following line or assign false\n  # instead of true.\n  config.use_transactional_fixtures = true\n\n  # You can uncomment this line to turn off ActiveRecord support entirely.\n  # config.use_active_record = false\n\n  # RSpec Rails can automatically mix in different behaviours to your tests\n  # based on their file location, for example enabling you to call `get` and\n  # `post` in specs under `spec/controllers`.\n  #\n  # You can disable this behaviour by removing the line below, and instead\n  # explicitly tag your specs with their type, e.g.:\n  #\n  #     RSpec.describe UsersController, type: :controller do\n  #       # ...\n  #     end\n  #\n  # The different available types are documented in the features, such as in\n  # https://relishapp.com/rspec/rspec-rails/docs\n  # config.infer_spec_type_from_file_location!\n\n  # Filter lines from Rails gems in backtraces.\n  config.filter_rails_from_backtrace!\n  # arbitrary gems may also be filtered via:\n  # config.filter_gems_from_backtrace(\"gem name\")\n\n  # shortcuts for factory_bot to use: create / build / build_stubbed\n  config.include FactoryBot::Syntax::Methods\n\n  # Test helpers needed for Devise\n  config.include Devise::Test::ControllerHelpers, type: :controller\n  config.include Devise::Test::IntegrationHelpers, type: :feature\n\n  # Test helpers to check feed contents\n  config.include PublifyCore::TestingSupport::FeedAssertions, type: :controller\n\n  config.after :each, type: :controller do\n    if response.media_type == \"text/html\" && response.body =~ /(&lt;[a-z]+)/\n      raise \"Double escaped HTML in text (#{Regexp.last_match(1)})\"\n    end\n  end\n\n  config.include FactoryBot::Syntax::Methods\nend\n\n# Test installed themes\ndef with_each_theme\n  Theme.find_all.each do |theme|\n    theme_dir = theme.path\n    view_path = \"#{theme_dir}/views\"\n    helper_file = \"#{theme_dir}/helpers/theme_helper.rb\"\n    require helper_file if File.exist?(helper_file)\n    yield theme.name, view_path\n  end\nend\n"
  },
  {
    "path": "spec/spec_helper.rb",
    "content": "# frozen_string_literal: true\n\n# This file was generated by the `rails generate rspec:install` command. Conventionally, all\n# specs live under a `spec` directory, which RSpec adds to the `$LOAD_PATH`.\n# The generated `.rspec` file contains `--require spec_helper` which will cause\n# this file to always be loaded, without a need to explicitly require it in any\n# files.\n#\n# Given that it is always loaded, you are encouraged to keep this file as\n# light-weight as possible. Requiring heavyweight dependencies from this file\n# will add to the boot time of your test suite on EVERY test run, even for an\n# individual file that may not need all of that loaded. Instead, consider making\n# a separate helper file that requires the additional dependencies and performs\n# the additional setup, and require it from the spec files that actually need\n# it.\n#\n# The `.rspec` file also contains a few flags that are not defaults but that\n# users commonly want.\n#\n# See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration\n\nrequire \"simplecov\"\nSimpleCov.start \"rails\"\n\nRSpec.configure do |config|\n  # rspec-expectations config goes here. You can use an alternate\n  # assertion/expectation library such as wrong or the stdlib/minitest\n  # assertions if you prefer.\n  config.expect_with :rspec do |expectations|\n    # This option will default to `true` in RSpec 4. It makes the `description`\n    # and `failure_message` of custom matchers include text for helper methods\n    # defined using `chain`, e.g.:\n    #     be_bigger_than(2).and_smaller_than(4).description\n    #     # => \"be bigger than 2 and smaller than 4\"\n    # ...rather than:\n    #     # => \"be bigger than 2\"\n    expectations.include_chain_clauses_in_custom_matcher_descriptions = true\n  end\n\n  # rspec-mocks config goes here. You can use an alternate test double\n  # library (such as bogus or mocha) by changing the `mock_with` option here.\n  config.mock_with :rspec do |mocks|\n    # Prevents you from mocking or stubbing a method that does not exist on\n    # a real object. This is generally recommended, and will default to\n    # `true` in RSpec 4.\n    mocks.verify_partial_doubles = true\n  end\n\n  # This option will default to `:apply_to_host_groups` in RSpec 4 (and will\n  # have no way to turn it off -- the option exists only for backwards\n  # compatibility in RSpec 3). It causes shared context metadata to be\n  # inherited by the metadata hash of host groups and examples, rather than\n  # triggering implicit auto-inclusion in groups with matching metadata.\n  config.shared_context_metadata_behavior = :apply_to_host_groups\n\n  # This allows you to limit a spec run to individual examples or groups\n  # you care about by tagging them with `:focus` metadata. When nothing\n  # is tagged with `:focus`, all examples get run. RSpec also provides\n  # aliases for `it`, `describe`, and `context` that include `:focus`\n  # metadata: `fit`, `fdescribe` and `fcontext`, respectively.\n  config.filter_run_when_matching :focus\n\n  # Allows RSpec to persist some state between runs in order to support\n  # the `--only-failures` and `--next-failure` CLI options. We recommend\n  # you configure your source control system to ignore this file.\n  config.example_status_persistence_file_path = \"spec/examples.txt\"\n\n  # Limits the available syntax to the non-monkey patched syntax that is\n  # recommended. For more details, see:\n  #   - http://rspec.info/blog/2012/06/rspecs-new-expectation-syntax/\n  #   - http://www.teaisaweso.me/blog/2013/05/27/rspecs-new-message-expectation-syntax/\n  #   - http://rspec.info/blog/2014/05/notable-changes-in-rspec-3/#zero-monkey-patching-mode\n  config.disable_monkey_patching!\n\n  # Allows RSpec to persist some state between runs in order to support\n  # the `--only-failures` and `--next-failure` CLI options. We recommend\n  # you configure your source control system to ignore this file.\n  config.example_status_persistence_file_path = \"spec/examples.txt\"\n\n  # Many RSpec users commonly either run the entire suite or an individual\n  # file, and it's useful to allow more verbose output when running an\n  # individual spec file.\n  if config.files_to_run.one?\n    # Use the documentation formatter for detailed output,\n    # unless a formatter has already been configured\n    # (e.g. via a command-line flag).\n    config.default_formatter = \"doc\"\n  end\n\n  # Print the 10 slowest examples and example groups at the\n  # end of the spec run, to help surface which specs are running\n  # particularly slow.\n  config.profile_examples = 10\n\n  # Run specs in random order to surface order dependencies. If you find an\n  # order dependency and want to debug it, you can fix the order by providing\n  # the seed, which is printed after each run.\n  #     --seed 1234\n  config.order = :random\n\n  # Seed global randomization in this process using the `--seed` CLI option.\n  # Setting this allows you to use `--seed` to deterministically reproduce\n  # test failures related to randomization by passing the same `--seed` value\n  # as the one that triggered the failure.\n  Kernel.srand config.seed\nend\n"
  },
  {
    "path": "spec/views/comments/html_sanitization_spec.rb",
    "content": "# frozen_string_literal: true\n\nrequire \"rails_helper\"\n\nRSpec.describe \"comments/_comment.html.erb\", type: :view do\n  shared_examples_for \"CommentSanitization\" do\n    let(:blog) { build_stubbed(:blog) }\n    let(:article) do\n      build_stubbed(:article, created_at: Time.zone.now,\n                              published_at: Time.zone.now, blog: blog)\n    end\n    let(:base_options) do\n      {\n        body: \"test foo <script>do_evil();</script>\",\n        author: \"Bob\",\n        article: article,\n        created_at: Time.zone.now\n      }\n    end\n\n    before do\n      blog.plugin_avatar = \"\"\n      blog.lang = \"en_US\"\n\n      @comment = Comment.new base_options.merge(comment_options)\n\n      allow(@comment).to receive(:id).and_return(1)\n      assign(:comment, @comment)\n    end\n\n    with_each_theme do |theme, _view_path|\n      context \"with theme #{theme}\" do\n        before do\n          blog.theme = theme\n        end\n\n        [\"\", \"markdown\", \"smartypants\", \"markdown smartypants\"].each do |value|\n          it \"sanitizes content rendered with the #{value} textfilter\" do\n            blog.comment_text_filter = value\n\n            ActiveSupport::Deprecation.silence do\n              render partial: \"comments/comment\", locals: { comment: @comment }\n            end\n            expect(rendered).to have_css(\".content\")\n            expect(rendered).to have_css(\".author\")\n\n            expect(rendered).not_to have_css(\".content script\")\n            expect(rendered).not_to have_css(\".content a:not([rel=nofollow])\")\n            # No links with javascript\n            expect(rendered).not_to have_css(\".content a[onclick]\")\n            expect(rendered).not_to have_css('.content a[href^=\"javascript:\"]')\n\n            expect(rendered).not_to have_css(\".author script\")\n            expect(rendered).not_to have_css(\".author a:not([rel=nofollow])\")\n            # No links with javascript\n            expect(rendered).not_to have_css(\".author a[onclick]\")\n            expect(rendered).not_to have_css('.author a[href^=\"javascript:\"]')\n          end\n        end\n      end\n    end\n  end\n\n  describe \"First dodgy comment\", type: :view do\n    it_behaves_like \"CommentSanitization\"\n\n    def comment_options\n      { body: \"test foo <script>do_evil();</script>\" }\n    end\n  end\n\n  describe \"Second dodgy comment\", type: :view do\n    it_behaves_like \"CommentSanitization\"\n\n    def comment_options\n      { body: \"link to [spammy goodness](http://spammer.example.com)\" }\n    end\n  end\n\n  describe \"Dodgy comment #3\", type: :view do\n    it_behaves_like \"CommentSanitization\"\n\n    def comment_options\n      { body: 'link to <a href=\"spammer.com\">spammy goodness</a>' }\n    end\n  end\n\n  describe \"Extra Dodgy comment\", type: :view do\n    it_behaves_like \"CommentSanitization\"\n\n    def comment_options\n      { body: '<a href=\"http://spam.org\">spam</a>',\n        author: '<a href=\"http://spamme.com>spamme</a>',\n        email: '<a href=\"http://itsallspam.com/\">its all spam</a>' }\n    end\n  end\n\n  describe \"XSS with script tag\", type: :view do\n    it_behaves_like \"CommentSanitization\"\n\n    def comment_options\n      { body: 'Have you ever <script lang=\"javascript\">alert(\"foo\");</script>' \\\n              \" been hacked?\" }\n    end\n  end\n\n  describe \"XSS with onclick attribute\", type: :view do\n    it_behaves_like \"CommentSanitization\"\n    def comment_options\n      { body: %(<a href=\"#\" onclick=\"javascript\">bad link</a>) }\n    end\n  end\n\n  describe \"XSS with javascript url\", type: :view do\n    it_behaves_like \"CommentSanitization\"\n\n    def comment_options\n      { body: %(<a href=\"javascript:bad\">bad link</a>) }\n    end\n  end\n\n  describe \"Comment with bare http URL\", type: :view do\n    it_behaves_like \"CommentSanitization\"\n\n    def comment_options\n      { body: %(http://www.example.com) }\n    end\n  end\n\n  describe \"Comment with bare email address\", type: :view do\n    it_behaves_like \"CommentSanitization\"\n\n    def comment_options\n      { body: %(foo@example.com) }\n    end\n  end\n\n  shared_examples_for \"CommentSanitizationWithDofollow\" do\n    let(:blog) { create(:blog) }\n    let(:article) do\n      create(:article, created_at: Time.zone.now, published_at: Time.zone.now, blog: blog)\n    end\n    let(:base_options) do\n      {\n        body: \"test foo <script>do_evil();</script>\",\n        author: \"Bob\",\n        article: article,\n        created_at: Time.zone.now\n      }\n    end\n\n    before do\n      blog.plugin_avatar = \"\"\n      blog.lang = \"en_US\"\n      blog.dofollowify = true\n      blog.save\n\n      @comment = Comment.new base_options.merge(comment_options)\n\n      allow(@comment).to receive(:id).and_return(1)\n      assign(:comment, @comment)\n    end\n\n    with_each_theme do |theme, _view_path|\n      context \"with theme #{theme}\" do\n        before do\n          blog.theme = theme\n        end\n\n        [\"\", \"markdown\", \"smartypants\", \"markdown smartypants\"].each do |value|\n          it \"sanitizes content rendered with the #{value} textfilter\" do\n            blog.comment_text_filter = value\n\n            ActiveSupport::Deprecation.silence do\n              render partial: \"comments/comment\", locals: { comment: @comment }\n            end\n            expect(rendered).to have_css(\".content\")\n            expect(rendered).to have_css(\".author\")\n\n            expect(rendered).not_to have_css(\".content script\")\n            expect(rendered).not_to have_css(\".content a[rel=nofollow]\")\n            # No links with javascript\n            expect(rendered).not_to have_css(\".content a[onclick]\")\n            expect(rendered).not_to have_css('.content a[href^=\"javascript:\"]')\n\n            expect(rendered).not_to have_css(\".author script\")\n            expect(rendered).not_to have_css(\".author a[rel=nofollow]\")\n            # No links with javascript\n            expect(rendered).not_to have_css(\".author a[onclick]\")\n            expect(rendered).not_to have_css('.author a[href^=\"javascript:\"]')\n          end\n        end\n      end\n    end\n  end\n\n  describe \"First dodgy comment with dofollow\", type: :view do\n    it_behaves_like \"CommentSanitizationWithDofollow\"\n\n    def comment_options\n      { body: \"test foo <script>do_evil();</script>\" }\n    end\n  end\n\n  describe \"Second dodgy comment with dofollow\", type: :view do\n    it_behaves_like \"CommentSanitizationWithDofollow\"\n\n    def comment_options\n      { body: \"link to [spammy goodness](http://spammer.example.com)\" }\n    end\n  end\n\n  describe \"Dodgy comment #3 with dofollow\", type: :view do\n    it_behaves_like \"CommentSanitizationWithDofollow\"\n\n    def comment_options\n      { body: 'link to <a href=\"spammer.com\">spammy goodness</a>' }\n    end\n  end\n\n  describe \"Extra Dodgy comment with dofollow\", type: :view do\n    it_behaves_like \"CommentSanitizationWithDofollow\"\n\n    def comment_options\n      { body: '<a href=\"http://spam.org\">spam</a>',\n        author: '<a href=\"http://spamme.com>spamme</a>',\n        email: '<a href=\"http://itsallspam.com/\">its all spam</a>' }\n    end\n  end\n\n  describe \"XSS with script tag and dofollow\", type: :view do\n    it_behaves_like \"CommentSanitizationWithDofollow\"\n\n    def comment_options\n      { body: 'Have you ever <script lang=\"javascript\">alert(\"foo\");</script>' \\\n              \" been hacked?\" }\n    end\n  end\n\n  describe \"XSS with onclick attribute and dofollow\", type: :view do\n    it_behaves_like \"CommentSanitizationWithDofollow\"\n    def comment_options\n      { body: %(<a href=\"#\" onclick=\"javascript\">bad link</a>) }\n    end\n  end\n\n  describe \"XSS with javascript url and dofollow\", type: :view do\n    it_behaves_like \"CommentSanitizationWithDofollow\"\n\n    def comment_options\n      { body: %(<a href=\"javascript:bad\">bad link</a>) }\n    end\n  end\n\n  describe \"Comment with bare http URL with dofollow\", type: :view do\n    it_behaves_like \"CommentSanitizationWithDofollow\"\n\n    def comment_options\n      { body: %(http://www.example.com) }\n    end\n  end\n\n  describe \"Comment with bare email address with dofollow\", type: :view do\n    it_behaves_like \"CommentSanitizationWithDofollow\"\n\n    def comment_options\n      { body: %(foo@example.com) }\n    end\n  end\nend\n"
  },
  {
    "path": "spec/views/layouts/default_spec.rb",
    "content": "# frozen_string_literal: true\n\nrequire \"rails_helper\"\n\nRSpec.describe \"layouts/default.html.erb\", type: :view do\n  with_each_theme do |theme, view_path|\n    describe \"with theme #{theme}\" do\n      before do\n        assign(:keywords, %w(foo bar))\n        assign(:auto_discovery_url_atom, \"\")\n        assign(:auto_discovery_url_rss, \"\")\n        controller.prepend_view_path view_path if theme\n      end\n\n      it \"has keyword meta tag when use_meta_keyword set to true\" do\n        create(:blog, use_meta_keyword: true)\n        render\n        expect(rendered).to have_css('head>meta[name=\"keywords\"]', visible: :all)\n      end\n\n      it \"does not have keyword meta tag when use_meta_keyword set to false\" do\n        create(:blog, use_meta_keyword: false)\n        render\n        expect(rendered).not_to have_css('head>meta[name=\"keywords\"]', visible: :all)\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "spec/views/xml_sidebar/_content.html.erb_spec.rb",
    "content": "# frozen_string_literal: true\n\nrequire \"rails_helper\"\n\nRSpec.describe \"xml_sidebar/_content.html.erb\", type: :view do\n  let(:sidebar) { XmlSidebar.new }\n\n  context \"by default\" do\n    before do\n      render partial: sidebar.content_partial, locals: sidebar.to_locals_hash\n    end\n\n    it \"renders a link to the articles feed\" do\n      expect(rendered).to have_css(\"a[href='#{articles_feed_path(format: \"atom\")}']\")\n    end\n\n    it \"renders a link to the feedback feed\" do\n      expect(rendered).to have_css(\"a[href='#{feedback_index_path(format: \"atom\")}']\")\n    end\n  end\n\n  context \"on an article page\" do\n    before do\n      allow(controller).to receive_messages(controller_name: \"articles\",\n                                            action_name: \"redirect\")\n      @article = create(:article)\n      render partial: sidebar.content_partial, locals: sidebar.to_locals_hash\n    end\n\n    it \"renders a link to the article comments feed\" do\n      expect(rendered).to have_css(\"a[href='#{@article.feed_url(\"atom\")}']\")\n    end\n  end\n\n  context \"on a tags page\" do\n    before do\n      sidebar.tag_feeds = true\n      allow(controller).to receive_messages(controller_name: \"tags\", action_name: \"show\")\n      @tag = create(:tag)\n      @auto_discovery_url_atom = \"foofoo\"\n      render partial: sidebar.content_partial, locals: sidebar.to_locals_hash\n    end\n\n    it \"renders a link to the tag feed\" do\n      expect(rendered).to have_css(\"a[href='#{@tag.feed_url(\"atom\")}']\")\n    end\n  end\nend\n"
  },
  {
    "path": "themes/bootstrap-2/about.markdown",
    "content": "#### Bootstrap theme for Publify\n\nBootstrap 2 is a theme designed for the [Publify][1] blogging engine by [Frédéric\nde Villamil][2] using [Bootstrap][3] as a framework for other\ntheme development. It was released under the MIT Licence. Any other\nmaterial such as sample photos used by the default themes are the\nproperty of their creator and licenced under the Creative Commons No\nCommercial Share Alike licence.\n\n##### Background Credits\n* [Startup Stock Photos][4]\n\nPlease view the README.md for theme customization.\n\n[1]: http://publify.github.io/\n[2]: http://t37.net/\n[3]: http://getbootstrap.com/\n[4]: http://startupstockphotos.com/\n"
  },
  {
    "path": "themes/bootstrap-2/javascripts/bootstrap.js",
    "content": "/*!\n * Bootstrap v3.2.0 (http://getbootstrap.com)\n * Copyright 2011-2014 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n\nif (typeof jQuery === 'undefined') { throw new Error('Bootstrap\\'s JavaScript requires jQuery') }\n\n/* ========================================================================\n * Bootstrap: transition.js v3.2.0\n * http://getbootstrap.com/javascript/#transitions\n * ========================================================================\n * Copyright 2011-2014 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // CSS TRANSITION SUPPORT (Shoutout: http://www.modernizr.com/)\n  // ============================================================\n\n  function transitionEnd() {\n    var el = document.createElement('bootstrap')\n\n    var transEndEventNames = {\n      WebkitTransition : 'webkitTransitionEnd',\n      MozTransition    : 'transitionend',\n      OTransition      : 'oTransitionEnd otransitionend',\n      transition       : 'transitionend'\n    }\n\n    for (var name in transEndEventNames) {\n      if (el.style[name] !== undefined) {\n        return { end: transEndEventNames[name] }\n      }\n    }\n\n    return false // explicit for ie8 (  ._.)\n  }\n\n  // http://blog.alexmaccaw.com/css-transitions\n  $.fn.emulateTransitionEnd = function (duration) {\n    var called = false\n    var $el = this\n    $(this).one('bsTransitionEnd', function () { called = true })\n    var callback = function () { if (!called) $($el).trigger($.support.transition.end) }\n    setTimeout(callback, duration)\n    return this\n  }\n\n  $(function () {\n    $.support.transition = transitionEnd()\n\n    if (!$.support.transition) return\n\n    $.event.special.bsTransitionEnd = {\n      bindType: $.support.transition.end,\n      delegateType: $.support.transition.end,\n      handle: function (e) {\n        if ($(e.target).is(this)) return e.handleObj.handler.apply(this, arguments)\n      }\n    }\n  })\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: alert.js v3.2.0\n * http://getbootstrap.com/javascript/#alerts\n * ========================================================================\n * Copyright 2011-2014 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // ALERT CLASS DEFINITION\n  // ======================\n\n  var dismiss = '[data-dismiss=\"alert\"]'\n  var Alert   = function (el) {\n    $(el).on('click', dismiss, this.close)\n  }\n\n  Alert.VERSION = '3.2.0'\n\n  Alert.prototype.close = function (e) {\n    var $this    = $(this)\n    var selector = $this.attr('data-target')\n\n    if (!selector) {\n      selector = $this.attr('href')\n      selector = selector && selector.replace(/.*(?=#[^\\s]*$)/, '') // strip for ie7\n    }\n\n    var $parent = $(selector)\n\n    if (e) e.preventDefault()\n\n    if (!$parent.length) {\n      $parent = $this.hasClass('alert') ? $this : $this.parent()\n    }\n\n    $parent.trigger(e = $.Event('close.bs.alert'))\n\n    if (e.isDefaultPrevented()) return\n\n    $parent.removeClass('in')\n\n    function removeElement() {\n      // detach from parent, fire event then clean up data\n      $parent.detach().trigger('closed.bs.alert').remove()\n    }\n\n    $.support.transition && $parent.hasClass('fade') ?\n      $parent\n        .one('bsTransitionEnd', removeElement)\n        .emulateTransitionEnd(150) :\n      removeElement()\n  }\n\n\n  // ALERT PLUGIN DEFINITION\n  // =======================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this = $(this)\n      var data  = $this.data('bs.alert')\n\n      if (!data) $this.data('bs.alert', (data = new Alert(this)))\n      if (typeof option == 'string') data[option].call($this)\n    })\n  }\n\n  var old = $.fn.alert\n\n  $.fn.alert             = Plugin\n  $.fn.alert.Constructor = Alert\n\n\n  // ALERT NO CONFLICT\n  // =================\n\n  $.fn.alert.noConflict = function () {\n    $.fn.alert = old\n    return this\n  }\n\n\n  // ALERT DATA-API\n  // ==============\n\n  $(document).on('click.bs.alert.data-api', dismiss, Alert.prototype.close)\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: button.js v3.2.0\n * http://getbootstrap.com/javascript/#buttons\n * ========================================================================\n * Copyright 2011-2014 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // BUTTON PUBLIC CLASS DEFINITION\n  // ==============================\n\n  var Button = function (element, options) {\n    this.$element  = $(element)\n    this.options   = $.extend({}, Button.DEFAULTS, options)\n    this.isLoading = false\n  }\n\n  Button.VERSION  = '3.2.0'\n\n  Button.DEFAULTS = {\n    loadingText: 'loading...'\n  }\n\n  Button.prototype.setState = function (state) {\n    var d    = 'disabled'\n    var $el  = this.$element\n    var val  = $el.is('input') ? 'val' : 'html'\n    var data = $el.data()\n\n    state = state + 'Text'\n\n    if (data.resetText == null) $el.data('resetText', $el[val]())\n\n    $el[val](data[state] == null ? this.options[state] : data[state])\n\n    // push to event loop to allow forms to submit\n    setTimeout($.proxy(function () {\n      if (state == 'loadingText') {\n        this.isLoading = true\n        $el.addClass(d).attr(d, d)\n      } else if (this.isLoading) {\n        this.isLoading = false\n        $el.removeClass(d).removeAttr(d)\n      }\n    }, this), 0)\n  }\n\n  Button.prototype.toggle = function () {\n    var changed = true\n    var $parent = this.$element.closest('[data-toggle=\"buttons\"]')\n\n    if ($parent.length) {\n      var $input = this.$element.find('input')\n      if ($input.prop('type') == 'radio') {\n        if ($input.prop('checked') && this.$element.hasClass('active')) changed = false\n        else $parent.find('.active').removeClass('active')\n      }\n      if (changed) $input.prop('checked', !this.$element.hasClass('active')).trigger('change')\n    }\n\n    if (changed) this.$element.toggleClass('active')\n  }\n\n\n  // BUTTON PLUGIN DEFINITION\n  // ========================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.button')\n      var options = typeof option == 'object' && option\n\n      if (!data) $this.data('bs.button', (data = new Button(this, options)))\n\n      if (option == 'toggle') data.toggle()\n      else if (option) data.setState(option)\n    })\n  }\n\n  var old = $.fn.button\n\n  $.fn.button             = Plugin\n  $.fn.button.Constructor = Button\n\n\n  // BUTTON NO CONFLICT\n  // ==================\n\n  $.fn.button.noConflict = function () {\n    $.fn.button = old\n    return this\n  }\n\n\n  // BUTTON DATA-API\n  // ===============\n\n  $(document).on('click.bs.button.data-api', '[data-toggle^=\"button\"]', function (e) {\n    var $btn = $(e.target)\n    if (!$btn.hasClass('btn')) $btn = $btn.closest('.btn')\n    Plugin.call($btn, 'toggle')\n    e.preventDefault()\n  })\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: carousel.js v3.2.0\n * http://getbootstrap.com/javascript/#carousel\n * ========================================================================\n * Copyright 2011-2014 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // CAROUSEL CLASS DEFINITION\n  // =========================\n\n  var Carousel = function (element, options) {\n    this.$element    = $(element).on('keydown.bs.carousel', $.proxy(this.keydown, this))\n    this.$indicators = this.$element.find('.carousel-indicators')\n    this.options     = options\n    this.paused      =\n    this.sliding     =\n    this.interval    =\n    this.$active     =\n    this.$items      = null\n\n    this.options.pause == 'hover' && this.$element\n      .on('mouseenter.bs.carousel', $.proxy(this.pause, this))\n      .on('mouseleave.bs.carousel', $.proxy(this.cycle, this))\n  }\n\n  Carousel.VERSION  = '3.2.0'\n\n  Carousel.DEFAULTS = {\n    interval: 5000,\n    pause: 'hover',\n    wrap: true\n  }\n\n  Carousel.prototype.keydown = function (e) {\n    switch (e.which) {\n      case 37: this.prev(); break\n      case 39: this.next(); break\n      default: return\n    }\n\n    e.preventDefault()\n  }\n\n  Carousel.prototype.cycle = function (e) {\n    e || (this.paused = false)\n\n    this.interval && clearInterval(this.interval)\n\n    this.options.interval\n      && !this.paused\n      && (this.interval = setInterval($.proxy(this.next, this), this.options.interval))\n\n    return this\n  }\n\n  Carousel.prototype.getItemIndex = function (item) {\n    this.$items = item.parent().children('.item')\n    return this.$items.index(item || this.$active)\n  }\n\n  Carousel.prototype.to = function (pos) {\n    var that        = this\n    var activeIndex = this.getItemIndex(this.$active = this.$element.find('.item.active'))\n\n    if (pos > (this.$items.length - 1) || pos < 0) return\n\n    if (this.sliding)       return this.$element.one('slid.bs.carousel', function () { that.to(pos) }) // yes, \"slid\"\n    if (activeIndex == pos) return this.pause().cycle()\n\n    return this.slide(pos > activeIndex ? 'next' : 'prev', $(this.$items[pos]))\n  }\n\n  Carousel.prototype.pause = function (e) {\n    e || (this.paused = true)\n\n    if (this.$element.find('.next, .prev').length && $.support.transition) {\n      this.$element.trigger($.support.transition.end)\n      this.cycle(true)\n    }\n\n    this.interval = clearInterval(this.interval)\n\n    return this\n  }\n\n  Carousel.prototype.next = function () {\n    if (this.sliding) return\n    return this.slide('next')\n  }\n\n  Carousel.prototype.prev = function () {\n    if (this.sliding) return\n    return this.slide('prev')\n  }\n\n  Carousel.prototype.slide = function (type, next) {\n    var $active   = this.$element.find('.item.active')\n    var $next     = next || $active[type]()\n    var isCycling = this.interval\n    var direction = type == 'next' ? 'left' : 'right'\n    var fallback  = type == 'next' ? 'first' : 'last'\n    var that      = this\n\n    if (!$next.length) {\n      if (!this.options.wrap) return\n      $next = this.$element.find('.item')[fallback]()\n    }\n\n    if ($next.hasClass('active')) return (this.sliding = false)\n\n    var relatedTarget = $next[0]\n    var slideEvent = $.Event('slide.bs.carousel', {\n      relatedTarget: relatedTarget,\n      direction: direction\n    })\n    this.$element.trigger(slideEvent)\n    if (slideEvent.isDefaultPrevented()) return\n\n    this.sliding = true\n\n    isCycling && this.pause()\n\n    if (this.$indicators.length) {\n      this.$indicators.find('.active').removeClass('active')\n      var $nextIndicator = $(this.$indicators.children()[this.getItemIndex($next)])\n      $nextIndicator && $nextIndicator.addClass('active')\n    }\n\n    var slidEvent = $.Event('slid.bs.carousel', { relatedTarget: relatedTarget, direction: direction }) // yes, \"slid\"\n    if ($.support.transition && this.$element.hasClass('slide')) {\n      $next.addClass(type)\n      $next[0].offsetWidth // force reflow\n      $active.addClass(direction)\n      $next.addClass(direction)\n      $active\n        .one('bsTransitionEnd', function () {\n          $next.removeClass([type, direction].join(' ')).addClass('active')\n          $active.removeClass(['active', direction].join(' '))\n          that.sliding = false\n          setTimeout(function () {\n            that.$element.trigger(slidEvent)\n          }, 0)\n        })\n        .emulateTransitionEnd($active.css('transition-duration').slice(0, -1) * 1000)\n    } else {\n      $active.removeClass('active')\n      $next.addClass('active')\n      this.sliding = false\n      this.$element.trigger(slidEvent)\n    }\n\n    isCycling && this.cycle()\n\n    return this\n  }\n\n\n  // CAROUSEL PLUGIN DEFINITION\n  // ==========================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.carousel')\n      var options = $.extend({}, Carousel.DEFAULTS, $this.data(), typeof option == 'object' && option)\n      var action  = typeof option == 'string' ? option : options.slide\n\n      if (!data) $this.data('bs.carousel', (data = new Carousel(this, options)))\n      if (typeof option == 'number') data.to(option)\n      else if (action) data[action]()\n      else if (options.interval) data.pause().cycle()\n    })\n  }\n\n  var old = $.fn.carousel\n\n  $.fn.carousel             = Plugin\n  $.fn.carousel.Constructor = Carousel\n\n\n  // CAROUSEL NO CONFLICT\n  // ====================\n\n  $.fn.carousel.noConflict = function () {\n    $.fn.carousel = old\n    return this\n  }\n\n\n  // CAROUSEL DATA-API\n  // =================\n\n  $(document).on('click.bs.carousel.data-api', '[data-slide], [data-slide-to]', function (e) {\n    var href\n    var $this   = $(this)\n    var $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\\s]+$)/, '')) // strip for ie7\n    if (!$target.hasClass('carousel')) return\n    var options = $.extend({}, $target.data(), $this.data())\n    var slideIndex = $this.attr('data-slide-to')\n    if (slideIndex) options.interval = false\n\n    Plugin.call($target, options)\n\n    if (slideIndex) {\n      $target.data('bs.carousel').to(slideIndex)\n    }\n\n    e.preventDefault()\n  })\n\n  $(window).on('load', function () {\n    $('[data-ride=\"carousel\"]').each(function () {\n      var $carousel = $(this)\n      Plugin.call($carousel, $carousel.data())\n    })\n  })\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: collapse.js v3.2.0\n * http://getbootstrap.com/javascript/#collapse\n * ========================================================================\n * Copyright 2011-2014 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // COLLAPSE PUBLIC CLASS DEFINITION\n  // ================================\n\n  var Collapse = function (element, options) {\n    this.$element      = $(element)\n    this.options       = $.extend({}, Collapse.DEFAULTS, options)\n    this.transitioning = null\n\n    if (this.options.parent) this.$parent = $(this.options.parent)\n    if (this.options.toggle) this.toggle()\n  }\n\n  Collapse.VERSION  = '3.2.0'\n\n  Collapse.DEFAULTS = {\n    toggle: true\n  }\n\n  Collapse.prototype.dimension = function () {\n    var hasWidth = this.$element.hasClass('width')\n    return hasWidth ? 'width' : 'height'\n  }\n\n  Collapse.prototype.show = function () {\n    if (this.transitioning || this.$element.hasClass('in')) return\n\n    var startEvent = $.Event('show.bs.collapse')\n    this.$element.trigger(startEvent)\n    if (startEvent.isDefaultPrevented()) return\n\n    var actives = this.$parent && this.$parent.find('> .panel > .in')\n\n    if (actives && actives.length) {\n      var hasData = actives.data('bs.collapse')\n      if (hasData && hasData.transitioning) return\n      Plugin.call(actives, 'hide')\n      hasData || actives.data('bs.collapse', null)\n    }\n\n    var dimension = this.dimension()\n\n    this.$element\n      .removeClass('collapse')\n      .addClass('collapsing')[dimension](0)\n\n    this.transitioning = 1\n\n    var complete = function () {\n      this.$element\n        .removeClass('collapsing')\n        .addClass('collapse in')[dimension]('')\n      this.transitioning = 0\n      this.$element\n        .trigger('shown.bs.collapse')\n    }\n\n    if (!$.support.transition) return complete.call(this)\n\n    var scrollSize = $.camelCase(['scroll', dimension].join('-'))\n\n    this.$element\n      .one('bsTransitionEnd', $.proxy(complete, this))\n      .emulateTransitionEnd(350)[dimension](this.$element[0][scrollSize])\n  }\n\n  Collapse.prototype.hide = function () {\n    if (this.transitioning || !this.$element.hasClass('in')) return\n\n    var startEvent = $.Event('hide.bs.collapse')\n    this.$element.trigger(startEvent)\n    if (startEvent.isDefaultPrevented()) return\n\n    var dimension = this.dimension()\n\n    this.$element[dimension](this.$element[dimension]())[0].offsetHeight\n\n    this.$element\n      .addClass('collapsing')\n      .removeClass('collapse')\n      .removeClass('in')\n\n    this.transitioning = 1\n\n    var complete = function () {\n      this.transitioning = 0\n      this.$element\n        .trigger('hidden.bs.collapse')\n        .removeClass('collapsing')\n        .addClass('collapse')\n    }\n\n    if (!$.support.transition) return complete.call(this)\n\n    this.$element\n      [dimension](0)\n      .one('bsTransitionEnd', $.proxy(complete, this))\n      .emulateTransitionEnd(350)\n  }\n\n  Collapse.prototype.toggle = function () {\n    this[this.$element.hasClass('in') ? 'hide' : 'show']()\n  }\n\n\n  // COLLAPSE PLUGIN DEFINITION\n  // ==========================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.collapse')\n      var options = $.extend({}, Collapse.DEFAULTS, $this.data(), typeof option == 'object' && option)\n\n      if (!data && options.toggle && option == 'show') option = !option\n      if (!data) $this.data('bs.collapse', (data = new Collapse(this, options)))\n      if (typeof option == 'string') data[option]()\n    })\n  }\n\n  var old = $.fn.collapse\n\n  $.fn.collapse             = Plugin\n  $.fn.collapse.Constructor = Collapse\n\n\n  // COLLAPSE NO CONFLICT\n  // ====================\n\n  $.fn.collapse.noConflict = function () {\n    $.fn.collapse = old\n    return this\n  }\n\n\n  // COLLAPSE DATA-API\n  // =================\n\n  $(document).on('click.bs.collapse.data-api', '[data-toggle=\"collapse\"]', function (e) {\n    var href\n    var $this   = $(this)\n    var target  = $this.attr('data-target')\n        || e.preventDefault()\n        || (href = $this.attr('href')) && href.replace(/.*(?=#[^\\s]+$)/, '') // strip for ie7\n    var $target = $(target)\n    var data    = $target.data('bs.collapse')\n    var option  = data ? 'toggle' : $this.data()\n    var parent  = $this.attr('data-parent')\n    var $parent = parent && $(parent)\n\n    if (!data || !data.transitioning) {\n      if ($parent) $parent.find('[data-toggle=\"collapse\"][data-parent=\"' + parent + '\"]').not($this).addClass('collapsed')\n      $this[$target.hasClass('in') ? 'addClass' : 'removeClass']('collapsed')\n    }\n\n    Plugin.call($target, option)\n  })\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: dropdown.js v3.2.0\n * http://getbootstrap.com/javascript/#dropdowns\n * ========================================================================\n * Copyright 2011-2014 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // DROPDOWN CLASS DEFINITION\n  // =========================\n\n  var backdrop = '.dropdown-backdrop'\n  var toggle   = '[data-toggle=\"dropdown\"]'\n  var Dropdown = function (element) {\n    $(element).on('click.bs.dropdown', this.toggle)\n  }\n\n  Dropdown.VERSION = '3.2.0'\n\n  Dropdown.prototype.toggle = function (e) {\n    var $this = $(this)\n\n    if ($this.is('.disabled, :disabled')) return\n\n    var $parent  = getParent($this)\n    var isActive = $parent.hasClass('open')\n\n    clearMenus()\n\n    if (!isActive) {\n      if ('ontouchstart' in document.documentElement && !$parent.closest('.navbar-nav').length) {\n        // if mobile we use a backdrop because click events don't delegate\n        $('<div class=\"dropdown-backdrop\"/>').insertAfter($(this)).on('click', clearMenus)\n      }\n\n      var relatedTarget = { relatedTarget: this }\n      $parent.trigger(e = $.Event('show.bs.dropdown', relatedTarget))\n\n      if (e.isDefaultPrevented()) return\n\n      $this.trigger('focus')\n\n      $parent\n        .toggleClass('open')\n        .trigger('shown.bs.dropdown', relatedTarget)\n    }\n\n    return false\n  }\n\n  Dropdown.prototype.keydown = function (e) {\n    if (!/(38|40|27)/.test(e.keyCode)) return\n\n    var $this = $(this)\n\n    e.preventDefault()\n    e.stopPropagation()\n\n    if ($this.is('.disabled, :disabled')) return\n\n    var $parent  = getParent($this)\n    var isActive = $parent.hasClass('open')\n\n    if (!isActive || (isActive && e.keyCode == 27)) {\n      if (e.which == 27) $parent.find(toggle).trigger('focus')\n      return $this.trigger('click')\n    }\n\n    var desc = ' li:not(.divider):visible a'\n    var $items = $parent.find('[role=\"menu\"]' + desc + ', [role=\"listbox\"]' + desc)\n\n    if (!$items.length) return\n\n    var index = $items.index($items.filter(':focus'))\n\n    if (e.keyCode == 38 && index > 0)                 index--                        // up\n    if (e.keyCode == 40 && index < $items.length - 1) index++                        // down\n    if (!~index)                                      index = 0\n\n    $items.eq(index).trigger('focus')\n  }\n\n  function clearMenus(e) {\n    if (e && e.which === 3) return\n    $(backdrop).remove()\n    $(toggle).each(function () {\n      var $parent = getParent($(this))\n      var relatedTarget = { relatedTarget: this }\n      if (!$parent.hasClass('open')) return\n      $parent.trigger(e = $.Event('hide.bs.dropdown', relatedTarget))\n      if (e.isDefaultPrevented()) return\n      $parent.removeClass('open').trigger('hidden.bs.dropdown', relatedTarget)\n    })\n  }\n\n  function getParent($this) {\n    var selector = $this.attr('data-target')\n\n    if (!selector) {\n      selector = $this.attr('href')\n      selector = selector && /#[A-Za-z]/.test(selector) && selector.replace(/.*(?=#[^\\s]*$)/, '') // strip for ie7\n    }\n\n    var $parent = selector && $(selector)\n\n    return $parent && $parent.length ? $parent : $this.parent()\n  }\n\n\n  // DROPDOWN PLUGIN DEFINITION\n  // ==========================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this = $(this)\n      var data  = $this.data('bs.dropdown')\n\n      if (!data) $this.data('bs.dropdown', (data = new Dropdown(this)))\n      if (typeof option == 'string') data[option].call($this)\n    })\n  }\n\n  var old = $.fn.dropdown\n\n  $.fn.dropdown             = Plugin\n  $.fn.dropdown.Constructor = Dropdown\n\n\n  // DROPDOWN NO CONFLICT\n  // ====================\n\n  $.fn.dropdown.noConflict = function () {\n    $.fn.dropdown = old\n    return this\n  }\n\n\n  // APPLY TO STANDARD DROPDOWN ELEMENTS\n  // ===================================\n\n  $(document)\n    .on('click.bs.dropdown.data-api', clearMenus)\n    .on('click.bs.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() })\n    .on('click.bs.dropdown.data-api', toggle, Dropdown.prototype.toggle)\n    .on('keydown.bs.dropdown.data-api', toggle + ', [role=\"menu\"], [role=\"listbox\"]', Dropdown.prototype.keydown)\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: modal.js v3.2.0\n * http://getbootstrap.com/javascript/#modals\n * ========================================================================\n * Copyright 2011-2014 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // MODAL CLASS DEFINITION\n  // ======================\n\n  var Modal = function (element, options) {\n    this.options        = options\n    this.$body          = $(document.body)\n    this.$element       = $(element)\n    this.$backdrop      =\n    this.isShown        = null\n    this.scrollbarWidth = 0\n\n    if (this.options.remote) {\n      this.$element\n        .find('.modal-content')\n        .load(this.options.remote, $.proxy(function () {\n          this.$element.trigger('loaded.bs.modal')\n        }, this))\n    }\n  }\n\n  Modal.VERSION  = '3.2.0'\n\n  Modal.DEFAULTS = {\n    backdrop: true,\n    keyboard: true,\n    show: true\n  }\n\n  Modal.prototype.toggle = function (_relatedTarget) {\n    return this.isShown ? this.hide() : this.show(_relatedTarget)\n  }\n\n  Modal.prototype.show = function (_relatedTarget) {\n    var that = this\n    var e    = $.Event('show.bs.modal', { relatedTarget: _relatedTarget })\n\n    this.$element.trigger(e)\n\n    if (this.isShown || e.isDefaultPrevented()) return\n\n    this.isShown = true\n\n    this.checkScrollbar()\n    this.$body.addClass('modal-open')\n\n    this.setScrollbar()\n    this.escape()\n\n    this.$element.on('click.dismiss.bs.modal', '[data-dismiss=\"modal\"]', $.proxy(this.hide, this))\n\n    this.backdrop(function () {\n      var transition = $.support.transition && that.$element.hasClass('fade')\n\n      if (!that.$element.parent().length) {\n        that.$element.appendTo(that.$body) // don't move modals dom position\n      }\n\n      that.$element\n        .show()\n        .scrollTop(0)\n\n      if (transition) {\n        that.$element[0].offsetWidth // force reflow\n      }\n\n      that.$element\n        .addClass('in')\n        .attr('aria-hidden', false)\n\n      that.enforceFocus()\n\n      var e = $.Event('shown.bs.modal', { relatedTarget: _relatedTarget })\n\n      transition ?\n        that.$element.find('.modal-dialog') // wait for modal to slide in\n          .one('bsTransitionEnd', function () {\n            that.$element.trigger('focus').trigger(e)\n          })\n          .emulateTransitionEnd(300) :\n        that.$element.trigger('focus').trigger(e)\n    })\n  }\n\n  Modal.prototype.hide = function (e) {\n    if (e) e.preventDefault()\n\n    e = $.Event('hide.bs.modal')\n\n    this.$element.trigger(e)\n\n    if (!this.isShown || e.isDefaultPrevented()) return\n\n    this.isShown = false\n\n    this.$body.removeClass('modal-open')\n\n    this.resetScrollbar()\n    this.escape()\n\n    $(document).off('focusin.bs.modal')\n\n    this.$element\n      .removeClass('in')\n      .attr('aria-hidden', true)\n      .off('click.dismiss.bs.modal')\n\n    $.support.transition && this.$element.hasClass('fade') ?\n      this.$element\n        .one('bsTransitionEnd', $.proxy(this.hideModal, this))\n        .emulateTransitionEnd(300) :\n      this.hideModal()\n  }\n\n  Modal.prototype.enforceFocus = function () {\n    $(document)\n      .off('focusin.bs.modal') // guard against infinite focus loop\n      .on('focusin.bs.modal', $.proxy(function (e) {\n        if (this.$element[0] !== e.target && !this.$element.has(e.target).length) {\n          this.$element.trigger('focus')\n        }\n      }, this))\n  }\n\n  Modal.prototype.escape = function () {\n    if (this.isShown && this.options.keyboard) {\n      this.$element.on('keyup.dismiss.bs.modal', $.proxy(function (e) {\n        e.which == 27 && this.hide()\n      }, this))\n    } else if (!this.isShown) {\n      this.$element.off('keyup.dismiss.bs.modal')\n    }\n  }\n\n  Modal.prototype.hideModal = function () {\n    var that = this\n    this.$element.hide()\n    this.backdrop(function () {\n      that.$element.trigger('hidden.bs.modal')\n    })\n  }\n\n  Modal.prototype.removeBackdrop = function () {\n    this.$backdrop && this.$backdrop.remove()\n    this.$backdrop = null\n  }\n\n  Modal.prototype.backdrop = function (callback) {\n    var that = this\n    var animate = this.$element.hasClass('fade') ? 'fade' : ''\n\n    if (this.isShown && this.options.backdrop) {\n      var doAnimate = $.support.transition && animate\n\n      this.$backdrop = $('<div class=\"modal-backdrop ' + animate + '\" />')\n        .appendTo(this.$body)\n\n      this.$element.on('click.dismiss.bs.modal', $.proxy(function (e) {\n        if (e.target !== e.currentTarget) return\n        this.options.backdrop == 'static'\n          ? this.$element[0].focus.call(this.$element[0])\n          : this.hide.call(this)\n      }, this))\n\n      if (doAnimate) this.$backdrop[0].offsetWidth // force reflow\n\n      this.$backdrop.addClass('in')\n\n      if (!callback) return\n\n      doAnimate ?\n        this.$backdrop\n          .one('bsTransitionEnd', callback)\n          .emulateTransitionEnd(150) :\n        callback()\n\n    } else if (!this.isShown && this.$backdrop) {\n      this.$backdrop.removeClass('in')\n\n      var callbackRemove = function () {\n        that.removeBackdrop()\n        callback && callback()\n      }\n      $.support.transition && this.$element.hasClass('fade') ?\n        this.$backdrop\n          .one('bsTransitionEnd', callbackRemove)\n          .emulateTransitionEnd(150) :\n        callbackRemove()\n\n    } else if (callback) {\n      callback()\n    }\n  }\n\n  Modal.prototype.checkScrollbar = function () {\n    if (document.body.clientWidth >= window.innerWidth) return\n    this.scrollbarWidth = this.scrollbarWidth || this.measureScrollbar()\n  }\n\n  Modal.prototype.setScrollbar = function () {\n    var bodyPad = parseInt((this.$body.css('padding-right') || 0), 10)\n    if (this.scrollbarWidth) this.$body.css('padding-right', bodyPad + this.scrollbarWidth)\n  }\n\n  Modal.prototype.resetScrollbar = function () {\n    this.$body.css('padding-right', '')\n  }\n\n  Modal.prototype.measureScrollbar = function () { // thx walsh\n    var scrollDiv = document.createElement('div')\n    scrollDiv.className = 'modal-scrollbar-measure'\n    this.$body.append(scrollDiv)\n    var scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth\n    this.$body[0].removeChild(scrollDiv)\n    return scrollbarWidth\n  }\n\n\n  // MODAL PLUGIN DEFINITION\n  // =======================\n\n  function Plugin(option, _relatedTarget) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.modal')\n      var options = $.extend({}, Modal.DEFAULTS, $this.data(), typeof option == 'object' && option)\n\n      if (!data) $this.data('bs.modal', (data = new Modal(this, options)))\n      if (typeof option == 'string') data[option](_relatedTarget)\n      else if (options.show) data.show(_relatedTarget)\n    })\n  }\n\n  var old = $.fn.modal\n\n  $.fn.modal             = Plugin\n  $.fn.modal.Constructor = Modal\n\n\n  // MODAL NO CONFLICT\n  // =================\n\n  $.fn.modal.noConflict = function () {\n    $.fn.modal = old\n    return this\n  }\n\n\n  // MODAL DATA-API\n  // ==============\n\n  $(document).on('click.bs.modal.data-api', '[data-toggle=\"modal\"]', function (e) {\n    var $this   = $(this)\n    var href    = $this.attr('href')\n    var $target = $($this.attr('data-target') || (href && href.replace(/.*(?=#[^\\s]+$)/, ''))) // strip for ie7\n    var option  = $target.data('bs.modal') ? 'toggle' : $.extend({ remote: !/#/.test(href) && href }, $target.data(), $this.data())\n\n    if ($this.is('a')) e.preventDefault()\n\n    $target.one('show.bs.modal', function (showEvent) {\n      if (showEvent.isDefaultPrevented()) return // only register focus restorer if modal will actually get shown\n      $target.one('hidden.bs.modal', function () {\n        $this.is(':visible') && $this.trigger('focus')\n      })\n    })\n    Plugin.call($target, option, this)\n  })\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: tooltip.js v3.2.0\n * http://getbootstrap.com/javascript/#tooltip\n * Inspired by the original jQuery.tipsy by Jason Frame\n * ========================================================================\n * Copyright 2011-2014 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // TOOLTIP PUBLIC CLASS DEFINITION\n  // ===============================\n\n  var Tooltip = function (element, options) {\n    this.type       =\n    this.options    =\n    this.enabled    =\n    this.timeout    =\n    this.hoverState =\n    this.$element   = null\n\n    this.init('tooltip', element, options)\n  }\n\n  Tooltip.VERSION  = '3.2.0'\n\n  Tooltip.DEFAULTS = {\n    animation: true,\n    placement: 'top',\n    selector: false,\n    template: '<div class=\"tooltip\" role=\"tooltip\"><div class=\"tooltip-arrow\"></div><div class=\"tooltip-inner\"></div></div>',\n    trigger: 'hover focus',\n    title: '',\n    delay: 0,\n    html: false,\n    container: false,\n    viewport: {\n      selector: 'body',\n      padding: 0\n    }\n  }\n\n  Tooltip.prototype.init = function (type, element, options) {\n    this.enabled   = true\n    this.type      = type\n    this.$element  = $(element)\n    this.options   = this.getOptions(options)\n    this.$viewport = this.options.viewport && $(this.options.viewport.selector || this.options.viewport)\n\n    var triggers = this.options.trigger.split(' ')\n\n    for (var i = triggers.length; i--;) {\n      var trigger = triggers[i]\n\n      if (trigger == 'click') {\n        this.$element.on('click.' + this.type, this.options.selector, $.proxy(this.toggle, this))\n      } else if (trigger != 'manual') {\n        var eventIn  = trigger == 'hover' ? 'mouseenter' : 'focusin'\n        var eventOut = trigger == 'hover' ? 'mouseleave' : 'focusout'\n\n        this.$element.on(eventIn  + '.' + this.type, this.options.selector, $.proxy(this.enter, this))\n        this.$element.on(eventOut + '.' + this.type, this.options.selector, $.proxy(this.leave, this))\n      }\n    }\n\n    this.options.selector ?\n      (this._options = $.extend({}, this.options, { trigger: 'manual', selector: '' })) :\n      this.fixTitle()\n  }\n\n  Tooltip.prototype.getDefaults = function () {\n    return Tooltip.DEFAULTS\n  }\n\n  Tooltip.prototype.getOptions = function (options) {\n    options = $.extend({}, this.getDefaults(), this.$element.data(), options)\n\n    if (options.delay && typeof options.delay == 'number') {\n      options.delay = {\n        show: options.delay,\n        hide: options.delay\n      }\n    }\n\n    return options\n  }\n\n  Tooltip.prototype.getDelegateOptions = function () {\n    var options  = {}\n    var defaults = this.getDefaults()\n\n    this._options && $.each(this._options, function (key, value) {\n      if (defaults[key] != value) options[key] = value\n    })\n\n    return options\n  }\n\n  Tooltip.prototype.enter = function (obj) {\n    var self = obj instanceof this.constructor ?\n      obj : $(obj.currentTarget).data('bs.' + this.type)\n\n    if (!self) {\n      self = new this.constructor(obj.currentTarget, this.getDelegateOptions())\n      $(obj.currentTarget).data('bs.' + this.type, self)\n    }\n\n    clearTimeout(self.timeout)\n\n    self.hoverState = 'in'\n\n    if (!self.options.delay || !self.options.delay.show) return self.show()\n\n    self.timeout = setTimeout(function () {\n      if (self.hoverState == 'in') self.show()\n    }, self.options.delay.show)\n  }\n\n  Tooltip.prototype.leave = function (obj) {\n    var self = obj instanceof this.constructor ?\n      obj : $(obj.currentTarget).data('bs.' + this.type)\n\n    if (!self) {\n      self = new this.constructor(obj.currentTarget, this.getDelegateOptions())\n      $(obj.currentTarget).data('bs.' + this.type, self)\n    }\n\n    clearTimeout(self.timeout)\n\n    self.hoverState = 'out'\n\n    if (!self.options.delay || !self.options.delay.hide) return self.hide()\n\n    self.timeout = setTimeout(function () {\n      if (self.hoverState == 'out') self.hide()\n    }, self.options.delay.hide)\n  }\n\n  Tooltip.prototype.show = function () {\n    var e = $.Event('show.bs.' + this.type)\n\n    if (this.hasContent() && this.enabled) {\n      this.$element.trigger(e)\n\n      var inDom = $.contains(document.documentElement, this.$element[0])\n      if (e.isDefaultPrevented() || !inDom) return\n      var that = this\n\n      var $tip = this.tip()\n\n      var tipId = this.getUID(this.type)\n\n      this.setContent()\n      $tip.attr('id', tipId)\n      this.$element.attr('aria-describedby', tipId)\n\n      if (this.options.animation) $tip.addClass('fade')\n\n      var placement = typeof this.options.placement == 'function' ?\n        this.options.placement.call(this, $tip[0], this.$element[0]) :\n        this.options.placement\n\n      var autoToken = /\\s?auto?\\s?/i\n      var autoPlace = autoToken.test(placement)\n      if (autoPlace) placement = placement.replace(autoToken, '') || 'top'\n\n      $tip\n        .detach()\n        .css({ top: 0, left: 0, display: 'block' })\n        .addClass(placement)\n        .data('bs.' + this.type, this)\n\n      this.options.container ? $tip.appendTo(this.options.container) : $tip.insertAfter(this.$element)\n\n      var pos          = this.getPosition()\n      var actualWidth  = $tip[0].offsetWidth\n      var actualHeight = $tip[0].offsetHeight\n\n      if (autoPlace) {\n        var orgPlacement = placement\n        var $parent      = this.$element.parent()\n        var parentDim    = this.getPosition($parent)\n\n        placement = placement == 'bottom' && pos.top   + pos.height       + actualHeight - parentDim.scroll > parentDim.height ? 'top'    :\n                    placement == 'top'    && pos.top   - parentDim.scroll - actualHeight < 0                                   ? 'bottom' :\n                    placement == 'right'  && pos.right + actualWidth      > parentDim.width                                    ? 'left'   :\n                    placement == 'left'   && pos.left  - actualWidth      < parentDim.left                                     ? 'right'  :\n                    placement\n\n        $tip\n          .removeClass(orgPlacement)\n          .addClass(placement)\n      }\n\n      var calculatedOffset = this.getCalculatedOffset(placement, pos, actualWidth, actualHeight)\n\n      this.applyPlacement(calculatedOffset, placement)\n\n      var complete = function () {\n        that.$element.trigger('shown.bs.' + that.type)\n        that.hoverState = null\n      }\n\n      $.support.transition && this.$tip.hasClass('fade') ?\n        $tip\n          .one('bsTransitionEnd', complete)\n          .emulateTransitionEnd(150) :\n        complete()\n    }\n  }\n\n  Tooltip.prototype.applyPlacement = function (offset, placement) {\n    var $tip   = this.tip()\n    var width  = $tip[0].offsetWidth\n    var height = $tip[0].offsetHeight\n\n    // manually read margins because getBoundingClientRect includes difference\n    var marginTop = parseInt($tip.css('margin-top'), 10)\n    var marginLeft = parseInt($tip.css('margin-left'), 10)\n\n    // we must check for NaN for ie 8/9\n    if (isNaN(marginTop))  marginTop  = 0\n    if (isNaN(marginLeft)) marginLeft = 0\n\n    offset.top  = offset.top  + marginTop\n    offset.left = offset.left + marginLeft\n\n    // $.fn.offset doesn't round pixel values\n    // so we use setOffset directly with our own function B-0\n    $.offset.setOffset($tip[0], $.extend({\n      using: function (props) {\n        $tip.css({\n          top: Math.round(props.top),\n          left: Math.round(props.left)\n        })\n      }\n    }, offset), 0)\n\n    $tip.addClass('in')\n\n    // check to see if placing tip in new offset caused the tip to resize itself\n    var actualWidth  = $tip[0].offsetWidth\n    var actualHeight = $tip[0].offsetHeight\n\n    if (placement == 'top' && actualHeight != height) {\n      offset.top = offset.top + height - actualHeight\n    }\n\n    var delta = this.getViewportAdjustedDelta(placement, offset, actualWidth, actualHeight)\n\n    if (delta.left) offset.left += delta.left\n    else offset.top += delta.top\n\n    var arrowDelta          = delta.left ? delta.left * 2 - width + actualWidth : delta.top * 2 - height + actualHeight\n    var arrowPosition       = delta.left ? 'left'        : 'top'\n    var arrowOffsetPosition = delta.left ? 'offsetWidth' : 'offsetHeight'\n\n    $tip.offset(offset)\n    this.replaceArrow(arrowDelta, $tip[0][arrowOffsetPosition], arrowPosition)\n  }\n\n  Tooltip.prototype.replaceArrow = function (delta, dimension, position) {\n    this.arrow().css(position, delta ? (50 * (1 - delta / dimension) + '%') : '')\n  }\n\n  Tooltip.prototype.setContent = function () {\n    var $tip  = this.tip()\n    var title = this.getTitle()\n\n    $tip.find('.tooltip-inner')[this.options.html ? 'html' : 'text'](title)\n    $tip.removeClass('fade in top bottom left right')\n  }\n\n  Tooltip.prototype.hide = function () {\n    var that = this\n    var $tip = this.tip()\n    var e    = $.Event('hide.bs.' + this.type)\n\n    this.$element.removeAttr('aria-describedby')\n\n    function complete() {\n      if (that.hoverState != 'in') $tip.detach()\n      that.$element.trigger('hidden.bs.' + that.type)\n    }\n\n    this.$element.trigger(e)\n\n    if (e.isDefaultPrevented()) return\n\n    $tip.removeClass('in')\n\n    $.support.transition && this.$tip.hasClass('fade') ?\n      $tip\n        .one('bsTransitionEnd', complete)\n        .emulateTransitionEnd(150) :\n      complete()\n\n    this.hoverState = null\n\n    return this\n  }\n\n  Tooltip.prototype.fixTitle = function () {\n    var $e = this.$element\n    if ($e.attr('title') || typeof ($e.attr('data-original-title')) != 'string') {\n      $e.attr('data-original-title', $e.attr('title') || '').attr('title', '')\n    }\n  }\n\n  Tooltip.prototype.hasContent = function () {\n    return this.getTitle()\n  }\n\n  Tooltip.prototype.getPosition = function ($element) {\n    $element   = $element || this.$element\n    var el     = $element[0]\n    var isBody = el.tagName == 'BODY'\n    return $.extend({}, (typeof el.getBoundingClientRect == 'function') ? el.getBoundingClientRect() : null, {\n      scroll: isBody ? document.documentElement.scrollTop || document.body.scrollTop : $element.scrollTop(),\n      width:  isBody ? $(window).width()  : $element.outerWidth(),\n      height: isBody ? $(window).height() : $element.outerHeight()\n    }, isBody ? { top: 0, left: 0 } : $element.offset())\n  }\n\n  Tooltip.prototype.getCalculatedOffset = function (placement, pos, actualWidth, actualHeight) {\n    return placement == 'bottom' ? { top: pos.top + pos.height,   left: pos.left + pos.width / 2 - actualWidth / 2  } :\n           placement == 'top'    ? { top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2  } :\n           placement == 'left'   ? { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth } :\n        /* placement == 'right' */ { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width   }\n\n  }\n\n  Tooltip.prototype.getViewportAdjustedDelta = function (placement, pos, actualWidth, actualHeight) {\n    var delta = { top: 0, left: 0 }\n    if (!this.$viewport) return delta\n\n    var viewportPadding = this.options.viewport && this.options.viewport.padding || 0\n    var viewportDimensions = this.getPosition(this.$viewport)\n\n    if (/right|left/.test(placement)) {\n      var topEdgeOffset    = pos.top - viewportPadding - viewportDimensions.scroll\n      var bottomEdgeOffset = pos.top + viewportPadding - viewportDimensions.scroll + actualHeight\n      if (topEdgeOffset < viewportDimensions.top) { // top overflow\n        delta.top = viewportDimensions.top - topEdgeOffset\n      } else if (bottomEdgeOffset > viewportDimensions.top + viewportDimensions.height) { // bottom overflow\n        delta.top = viewportDimensions.top + viewportDimensions.height - bottomEdgeOffset\n      }\n    } else {\n      var leftEdgeOffset  = pos.left - viewportPadding\n      var rightEdgeOffset = pos.left + viewportPadding + actualWidth\n      if (leftEdgeOffset < viewportDimensions.left) { // left overflow\n        delta.left = viewportDimensions.left - leftEdgeOffset\n      } else if (rightEdgeOffset > viewportDimensions.width) { // right overflow\n        delta.left = viewportDimensions.left + viewportDimensions.width - rightEdgeOffset\n      }\n    }\n\n    return delta\n  }\n\n  Tooltip.prototype.getTitle = function () {\n    var title\n    var $e = this.$element\n    var o  = this.options\n\n    title = $e.attr('data-original-title')\n      || (typeof o.title == 'function' ? o.title.call($e[0]) :  o.title)\n\n    return title\n  }\n\n  Tooltip.prototype.getUID = function (prefix) {\n    do prefix += ~~(Math.random() * 1000000)\n    while (document.getElementById(prefix))\n    return prefix\n  }\n\n  Tooltip.prototype.tip = function () {\n    return (this.$tip = this.$tip || $(this.options.template))\n  }\n\n  Tooltip.prototype.arrow = function () {\n    return (this.$arrow = this.$arrow || this.tip().find('.tooltip-arrow'))\n  }\n\n  Tooltip.prototype.validate = function () {\n    if (!this.$element[0].parentNode) {\n      this.hide()\n      this.$element = null\n      this.options  = null\n    }\n  }\n\n  Tooltip.prototype.enable = function () {\n    this.enabled = true\n  }\n\n  Tooltip.prototype.disable = function () {\n    this.enabled = false\n  }\n\n  Tooltip.prototype.toggleEnabled = function () {\n    this.enabled = !this.enabled\n  }\n\n  Tooltip.prototype.toggle = function (e) {\n    var self = this\n    if (e) {\n      self = $(e.currentTarget).data('bs.' + this.type)\n      if (!self) {\n        self = new this.constructor(e.currentTarget, this.getDelegateOptions())\n        $(e.currentTarget).data('bs.' + this.type, self)\n      }\n    }\n\n    self.tip().hasClass('in') ? self.leave(self) : self.enter(self)\n  }\n\n  Tooltip.prototype.destroy = function () {\n    clearTimeout(this.timeout)\n    this.hide().$element.off('.' + this.type).removeData('bs.' + this.type)\n  }\n\n\n  // TOOLTIP PLUGIN DEFINITION\n  // =========================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.tooltip')\n      var options = typeof option == 'object' && option\n\n      if (!data && option == 'destroy') return\n      if (!data) $this.data('bs.tooltip', (data = new Tooltip(this, options)))\n      if (typeof option == 'string') data[option]()\n    })\n  }\n\n  var old = $.fn.tooltip\n\n  $.fn.tooltip             = Plugin\n  $.fn.tooltip.Constructor = Tooltip\n\n\n  // TOOLTIP NO CONFLICT\n  // ===================\n\n  $.fn.tooltip.noConflict = function () {\n    $.fn.tooltip = old\n    return this\n  }\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: popover.js v3.2.0\n * http://getbootstrap.com/javascript/#popovers\n * ========================================================================\n * Copyright 2011-2014 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // POPOVER PUBLIC CLASS DEFINITION\n  // ===============================\n\n  var Popover = function (element, options) {\n    this.init('popover', element, options)\n  }\n\n  if (!$.fn.tooltip) throw new Error('Popover requires tooltip.js')\n\n  Popover.VERSION  = '3.2.0'\n\n  Popover.DEFAULTS = $.extend({}, $.fn.tooltip.Constructor.DEFAULTS, {\n    placement: 'right',\n    trigger: 'click',\n    content: '',\n    template: '<div class=\"popover\" role=\"tooltip\"><div class=\"arrow\"></div><h3 class=\"popover-title\"></h3><div class=\"popover-content\"></div></div>'\n  })\n\n\n  // NOTE: POPOVER EXTENDS tooltip.js\n  // ================================\n\n  Popover.prototype = $.extend({}, $.fn.tooltip.Constructor.prototype)\n\n  Popover.prototype.constructor = Popover\n\n  Popover.prototype.getDefaults = function () {\n    return Popover.DEFAULTS\n  }\n\n  Popover.prototype.setContent = function () {\n    var $tip    = this.tip()\n    var title   = this.getTitle()\n    var content = this.getContent()\n\n    $tip.find('.popover-title')[this.options.html ? 'html' : 'text'](title)\n    $tip.find('.popover-content').empty()[ // we use append for html objects to maintain js events\n      this.options.html ? (typeof content == 'string' ? 'html' : 'append') : 'text'\n    ](content)\n\n    $tip.removeClass('fade top bottom left right in')\n\n    // IE8 doesn't accept hiding via the `:empty` pseudo selector, we have to do\n    // this manually by checking the contents.\n    if (!$tip.find('.popover-title').html()) $tip.find('.popover-title').hide()\n  }\n\n  Popover.prototype.hasContent = function () {\n    return this.getTitle() || this.getContent()\n  }\n\n  Popover.prototype.getContent = function () {\n    var $e = this.$element\n    var o  = this.options\n\n    return $e.attr('data-content')\n      || (typeof o.content == 'function' ?\n            o.content.call($e[0]) :\n            o.content)\n  }\n\n  Popover.prototype.arrow = function () {\n    return (this.$arrow = this.$arrow || this.tip().find('.arrow'))\n  }\n\n  Popover.prototype.tip = function () {\n    if (!this.$tip) this.$tip = $(this.options.template)\n    return this.$tip\n  }\n\n\n  // POPOVER PLUGIN DEFINITION\n  // =========================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.popover')\n      var options = typeof option == 'object' && option\n\n      if (!data && option == 'destroy') return\n      if (!data) $this.data('bs.popover', (data = new Popover(this, options)))\n      if (typeof option == 'string') data[option]()\n    })\n  }\n\n  var old = $.fn.popover\n\n  $.fn.popover             = Plugin\n  $.fn.popover.Constructor = Popover\n\n\n  // POPOVER NO CONFLICT\n  // ===================\n\n  $.fn.popover.noConflict = function () {\n    $.fn.popover = old\n    return this\n  }\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: scrollspy.js v3.2.0\n * http://getbootstrap.com/javascript/#scrollspy\n * ========================================================================\n * Copyright 2011-2014 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // SCROLLSPY CLASS DEFINITION\n  // ==========================\n\n  function ScrollSpy(element, options) {\n    var process  = $.proxy(this.process, this)\n\n    this.$body          = $('body')\n    this.$scrollElement = $(element).is('body') ? $(window) : $(element)\n    this.options        = $.extend({}, ScrollSpy.DEFAULTS, options)\n    this.selector       = (this.options.target || '') + ' .nav li > a'\n    this.offsets        = []\n    this.targets        = []\n    this.activeTarget   = null\n    this.scrollHeight   = 0\n\n    this.$scrollElement.on('scroll.bs.scrollspy', process)\n    this.refresh()\n    this.process()\n  }\n\n  ScrollSpy.VERSION  = '3.2.0'\n\n  ScrollSpy.DEFAULTS = {\n    offset: 10\n  }\n\n  ScrollSpy.prototype.getScrollHeight = function () {\n    return this.$scrollElement[0].scrollHeight || Math.max(this.$body[0].scrollHeight, document.documentElement.scrollHeight)\n  }\n\n  ScrollSpy.prototype.refresh = function () {\n    var offsetMethod = 'offset'\n    var offsetBase   = 0\n\n    if (!$.isWindow(this.$scrollElement[0])) {\n      offsetMethod = 'position'\n      offsetBase   = this.$scrollElement.scrollTop()\n    }\n\n    this.offsets = []\n    this.targets = []\n    this.scrollHeight = this.getScrollHeight()\n\n    var self     = this\n\n    this.$body\n      .find(this.selector)\n      .map(function () {\n        var $el   = $(this)\n        var href  = $el.data('target') || $el.attr('href')\n        var $href = /^#./.test(href) && $(href)\n\n        return ($href\n          && $href.length\n          && $href.is(':visible')\n          && [[$href[offsetMethod]().top + offsetBase, href]]) || null\n      })\n      .sort(function (a, b) { return a[0] - b[0] })\n      .each(function () {\n        self.offsets.push(this[0])\n        self.targets.push(this[1])\n      })\n  }\n\n  ScrollSpy.prototype.process = function () {\n    var scrollTop    = this.$scrollElement.scrollTop() + this.options.offset\n    var scrollHeight = this.getScrollHeight()\n    var maxScroll    = this.options.offset + scrollHeight - this.$scrollElement.height()\n    var offsets      = this.offsets\n    var targets      = this.targets\n    var activeTarget = this.activeTarget\n    var i\n\n    if (this.scrollHeight != scrollHeight) {\n      this.refresh()\n    }\n\n    if (scrollTop >= maxScroll) {\n      return activeTarget != (i = targets[targets.length - 1]) && this.activate(i)\n    }\n\n    if (activeTarget && scrollTop <= offsets[0]) {\n      return activeTarget != (i = targets[0]) && this.activate(i)\n    }\n\n    for (i = offsets.length; i--;) {\n      activeTarget != targets[i]\n        && scrollTop >= offsets[i]\n        && (!offsets[i + 1] || scrollTop <= offsets[i + 1])\n        && this.activate(targets[i])\n    }\n  }\n\n  ScrollSpy.prototype.activate = function (target) {\n    this.activeTarget = target\n\n    $(this.selector)\n      .parentsUntil(this.options.target, '.active')\n      .removeClass('active')\n\n    var selector = this.selector +\n        '[data-target=\"' + target + '\"],' +\n        this.selector + '[href=\"' + target + '\"]'\n\n    var active = $(selector)\n      .parents('li')\n      .addClass('active')\n\n    if (active.parent('.dropdown-menu').length) {\n      active = active\n        .closest('li.dropdown')\n        .addClass('active')\n    }\n\n    active.trigger('activate.bs.scrollspy')\n  }\n\n\n  // SCROLLSPY PLUGIN DEFINITION\n  // ===========================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.scrollspy')\n      var options = typeof option == 'object' && option\n\n      if (!data) $this.data('bs.scrollspy', (data = new ScrollSpy(this, options)))\n      if (typeof option == 'string') data[option]()\n    })\n  }\n\n  var old = $.fn.scrollspy\n\n  $.fn.scrollspy             = Plugin\n  $.fn.scrollspy.Constructor = ScrollSpy\n\n\n  // SCROLLSPY NO CONFLICT\n  // =====================\n\n  $.fn.scrollspy.noConflict = function () {\n    $.fn.scrollspy = old\n    return this\n  }\n\n\n  // SCROLLSPY DATA-API\n  // ==================\n\n  $(window).on('load.bs.scrollspy.data-api', function () {\n    $('[data-spy=\"scroll\"]').each(function () {\n      var $spy = $(this)\n      Plugin.call($spy, $spy.data())\n    })\n  })\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: tab.js v3.2.0\n * http://getbootstrap.com/javascript/#tabs\n * ========================================================================\n * Copyright 2011-2014 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // TAB CLASS DEFINITION\n  // ====================\n\n  var Tab = function (element) {\n    this.element = $(element)\n  }\n\n  Tab.VERSION = '3.2.0'\n\n  Tab.prototype.show = function () {\n    var $this    = this.element\n    var $ul      = $this.closest('ul:not(.dropdown-menu)')\n    var selector = $this.data('target')\n\n    if (!selector) {\n      selector = $this.attr('href')\n      selector = selector && selector.replace(/.*(?=#[^\\s]*$)/, '') // strip for ie7\n    }\n\n    if ($this.parent('li').hasClass('active')) return\n\n    var previous = $ul.find('.active:last a')[0]\n    var e        = $.Event('show.bs.tab', {\n      relatedTarget: previous\n    })\n\n    $this.trigger(e)\n\n    if (e.isDefaultPrevented()) return\n\n    var $target = $(selector)\n\n    this.activate($this.closest('li'), $ul)\n    this.activate($target, $target.parent(), function () {\n      $this.trigger({\n        type: 'shown.bs.tab',\n        relatedTarget: previous\n      })\n    })\n  }\n\n  Tab.prototype.activate = function (element, container, callback) {\n    var $active    = container.find('> .active')\n    var transition = callback\n      && $.support.transition\n      && $active.hasClass('fade')\n\n    function next() {\n      $active\n        .removeClass('active')\n        .find('> .dropdown-menu > .active')\n        .removeClass('active')\n\n      element.addClass('active')\n\n      if (transition) {\n        element[0].offsetWidth // reflow for transition\n        element.addClass('in')\n      } else {\n        element.removeClass('fade')\n      }\n\n      if (element.parent('.dropdown-menu')) {\n        element.closest('li.dropdown').addClass('active')\n      }\n\n      callback && callback()\n    }\n\n    transition ?\n      $active\n        .one('bsTransitionEnd', next)\n        .emulateTransitionEnd(150) :\n      next()\n\n    $active.removeClass('in')\n  }\n\n\n  // TAB PLUGIN DEFINITION\n  // =====================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this = $(this)\n      var data  = $this.data('bs.tab')\n\n      if (!data) $this.data('bs.tab', (data = new Tab(this)))\n      if (typeof option == 'string') data[option]()\n    })\n  }\n\n  var old = $.fn.tab\n\n  $.fn.tab             = Plugin\n  $.fn.tab.Constructor = Tab\n\n\n  // TAB NO CONFLICT\n  // ===============\n\n  $.fn.tab.noConflict = function () {\n    $.fn.tab = old\n    return this\n  }\n\n\n  // TAB DATA-API\n  // ============\n\n  $(document).on('click.bs.tab.data-api', '[data-toggle=\"tab\"], [data-toggle=\"pill\"]', function (e) {\n    e.preventDefault()\n    Plugin.call($(this), 'show')\n  })\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: affix.js v3.2.0\n * http://getbootstrap.com/javascript/#affix\n * ========================================================================\n * Copyright 2011-2014 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // AFFIX CLASS DEFINITION\n  // ======================\n\n  var Affix = function (element, options) {\n    this.options = $.extend({}, Affix.DEFAULTS, options)\n\n    this.$target = $(this.options.target)\n      .on('scroll.bs.affix.data-api', $.proxy(this.checkPosition, this))\n      .on('click.bs.affix.data-api',  $.proxy(this.checkPositionWithEventLoop, this))\n\n    this.$element     = $(element)\n    this.affixed      =\n    this.unpin        =\n    this.pinnedOffset = null\n\n    this.checkPosition()\n  }\n\n  Affix.VERSION  = '3.2.0'\n\n  Affix.RESET    = 'affix affix-top affix-bottom'\n\n  Affix.DEFAULTS = {\n    offset: 0,\n    target: window\n  }\n\n  Affix.prototype.getPinnedOffset = function () {\n    if (this.pinnedOffset) return this.pinnedOffset\n    this.$element.removeClass(Affix.RESET).addClass('affix')\n    var scrollTop = this.$target.scrollTop()\n    var position  = this.$element.offset()\n    return (this.pinnedOffset = position.top - scrollTop)\n  }\n\n  Affix.prototype.checkPositionWithEventLoop = function () {\n    setTimeout($.proxy(this.checkPosition, this), 1)\n  }\n\n  Affix.prototype.checkPosition = function () {\n    if (!this.$element.is(':visible')) return\n\n    var scrollHeight = $(document).height()\n    var scrollTop    = this.$target.scrollTop()\n    var position     = this.$element.offset()\n    var offset       = this.options.offset\n    var offsetTop    = offset.top\n    var offsetBottom = offset.bottom\n\n    if (typeof offset != 'object')         offsetBottom = offsetTop = offset\n    if (typeof offsetTop == 'function')    offsetTop    = offset.top(this.$element)\n    if (typeof offsetBottom == 'function') offsetBottom = offset.bottom(this.$element)\n\n    var affix = this.unpin   != null && (scrollTop + this.unpin <= position.top) ? false :\n                offsetBottom != null && (position.top + this.$element.height() >= scrollHeight - offsetBottom) ? 'bottom' :\n                offsetTop    != null && (scrollTop <= offsetTop) ? 'top' : false\n\n    if (this.affixed === affix) return\n    if (this.unpin != null) this.$element.css('top', '')\n\n    var affixType = 'affix' + (affix ? '-' + affix : '')\n    var e         = $.Event(affixType + '.bs.affix')\n\n    this.$element.trigger(e)\n\n    if (e.isDefaultPrevented()) return\n\n    this.affixed = affix\n    this.unpin = affix == 'bottom' ? this.getPinnedOffset() : null\n\n    this.$element\n      .removeClass(Affix.RESET)\n      .addClass(affixType)\n      .trigger($.Event(affixType.replace('affix', 'affixed')))\n\n    if (affix == 'bottom') {\n      this.$element.offset({\n        top: scrollHeight - this.$element.height() - offsetBottom\n      })\n    }\n  }\n\n\n  // AFFIX PLUGIN DEFINITION\n  // =======================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.affix')\n      var options = typeof option == 'object' && option\n\n      if (!data) $this.data('bs.affix', (data = new Affix(this, options)))\n      if (typeof option == 'string') data[option]()\n    })\n  }\n\n  var old = $.fn.affix\n\n  $.fn.affix             = Plugin\n  $.fn.affix.Constructor = Affix\n\n\n  // AFFIX NO CONFLICT\n  // =================\n\n  $.fn.affix.noConflict = function () {\n    $.fn.affix = old\n    return this\n  }\n\n\n  // AFFIX DATA-API\n  // ==============\n\n  $(window).on('load', function () {\n    $('[data-spy=\"affix\"]').each(function () {\n      var $spy = $(this)\n      var data = $spy.data()\n\n      data.offset = data.offset || {}\n\n      if (data.offsetBottom) data.offset.bottom = data.offsetBottom\n      if (data.offsetTop)    data.offset.top    = data.offsetTop\n\n      Plugin.call($spy, data)\n    })\n  })\n\n}(jQuery);\n"
  },
  {
    "path": "themes/bootstrap-2/less/.csscomb.json",
    "content": "{\n  \"always-semicolon\": true,\n  \"block-indent\": 2,\n  \"colon-space\": [0, 1],\n  \"color-case\": \"lower\",\n  \"color-shorthand\": true,\n  \"combinator-space\": true,\n  \"element-case\": \"lower\",\n  \"eof-newline\": true,\n  \"leading-zero\": false,\n  \"remove-empty-rulesets\": true,\n  \"rule-indent\": 2,\n  \"stick-brace\": \" \",\n  \"strip-spaces\": true,\n  \"unitless-zero\": true,\n  \"vendor-prefix-align\": true,\n  \"sort-order\": [\n    [\n      \"position\",\n      \"top\",\n      \"right\",\n      \"bottom\",\n      \"left\",\n      \"z-index\",\n      \"display\",\n      \"float\",\n      \"width\",\n      \"min-width\",\n      \"max-width\",\n      \"height\",\n      \"min-height\",\n      \"max-height\",\n      \"-webkit-box-sizing\",\n      \"-moz-box-sizing\",\n      \"box-sizing\",\n      \"-webkit-appearance\",\n      \"padding\",\n      \"padding-top\",\n      \"padding-right\",\n      \"padding-bottom\",\n      \"padding-left\",\n      \"margin\",\n      \"margin-top\",\n      \"margin-right\",\n      \"margin-bottom\",\n      \"margin-left\",\n      \"overflow\",\n      \"overflow-x\",\n      \"overflow-y\",\n      \"-webkit-overflow-scrolling\",\n      \"-ms-overflow-x\",\n      \"-ms-overflow-y\",\n      \"-ms-overflow-style\",\n      \"clip\",\n      \"clear\",\n      \"font\",\n      \"font-family\",\n      \"font-size\",\n      \"font-style\",\n      \"font-weight\",\n      \"font-variant\",\n      \"font-size-adjust\",\n      \"font-stretch\",\n      \"font-effect\",\n      \"font-emphasize\",\n      \"font-emphasize-position\",\n      \"font-emphasize-style\",\n      \"font-smooth\",\n      \"-webkit-hyphens\",\n      \"-moz-hyphens\",\n      \"hyphens\",\n      \"line-height\",\n      \"color\",\n      \"text-align\",\n      \"-webkit-text-align-last\",\n      \"-moz-text-align-last\",\n      \"-ms-text-align-last\",\n      \"text-align-last\",\n      \"text-emphasis\",\n      \"text-emphasis-color\",\n      \"text-emphasis-style\",\n      \"text-emphasis-position\",\n      \"text-decoration\",\n      \"text-indent\",\n      \"text-justify\",\n      \"text-outline\",\n      \"-ms-text-overflow\",\n      \"text-overflow\",\n      \"text-overflow-ellipsis\",\n      \"text-overflow-mode\",\n      \"text-shadow\",\n      \"text-transform\",\n      \"text-wrap\",\n      \"-webkit-text-size-adjust\",\n      \"-ms-text-size-adjust\",\n      \"letter-spacing\",\n      \"-ms-word-break\",\n      \"word-break\",\n      \"word-spacing\",\n      \"-ms-word-wrap\",\n      \"word-wrap\",\n      \"-moz-tab-size\",\n      \"-o-tab-size\",\n      \"tab-size\",\n      \"white-space\",\n      \"vertical-align\",\n      \"list-style\",\n      \"list-style-position\",\n      \"list-style-type\",\n      \"list-style-image\",\n      \"pointer-events\",\n      \"cursor\",\n      \"visibility\",\n      \"zoom\",\n      \"flex-direction\",\n      \"flex-order\",\n      \"flex-pack\",\n      \"flex-align\",\n      \"table-layout\",\n      \"empty-cells\",\n      \"caption-side\",\n      \"border-spacing\",\n      \"border-collapse\",\n      \"content\",\n      \"quotes\",\n      \"counter-reset\",\n      \"counter-increment\",\n      \"resize\",\n      \"-webkit-user-select\",\n      \"-moz-user-select\",\n      \"-ms-user-select\",\n      \"-o-user-select\",\n      \"user-select\",\n      \"nav-index\",\n      \"nav-up\",\n      \"nav-right\",\n      \"nav-down\",\n      \"nav-left\",\n      \"background\",\n      \"background-color\",\n      \"background-image\",\n      \"-ms-filter:\\\\'progid:DXImageTransform.Microsoft.gradient\",\n      \"filter:progid:DXImageTransform.Microsoft.gradient\",\n      \"filter:progid:DXImageTransform.Microsoft.AlphaImageLoader\",\n      \"filter\",\n      \"background-repeat\",\n      \"background-attachment\",\n      \"background-position\",\n      \"background-position-x\",\n      \"background-position-y\",\n      \"-webkit-background-clip\",\n      \"-moz-background-clip\",\n      \"background-clip\",\n      \"background-origin\",\n      \"-webkit-background-size\",\n      \"-moz-background-size\",\n      \"-o-background-size\",\n      \"background-size\",\n      \"border\",\n      \"border-color\",\n      \"border-style\",\n      \"border-width\",\n      \"border-top\",\n      \"border-top-color\",\n      \"border-top-style\",\n      \"border-top-width\",\n      \"border-right\",\n      \"border-right-color\",\n      \"border-right-style\",\n      \"border-right-width\",\n      \"border-bottom\",\n      \"border-bottom-color\",\n      \"border-bottom-style\",\n      \"border-bottom-width\",\n      \"border-left\",\n      \"border-left-color\",\n      \"border-left-style\",\n      \"border-left-width\",\n      \"border-radius\",\n      \"border-top-left-radius\",\n      \"border-top-right-radius\",\n      \"border-bottom-right-radius\",\n      \"border-bottom-left-radius\",\n      \"-webkit-border-image\",\n      \"-moz-border-image\",\n      \"-o-border-image\",\n      \"border-image\",\n      \"-webkit-border-image-source\",\n      \"-moz-border-image-source\",\n      \"-o-border-image-source\",\n      \"border-image-source\",\n      \"-webkit-border-image-slice\",\n      \"-moz-border-image-slice\",\n      \"-o-border-image-slice\",\n      \"border-image-slice\",\n      \"-webkit-border-image-width\",\n      \"-moz-border-image-width\",\n      \"-o-border-image-width\",\n      \"border-image-width\",\n      \"-webkit-border-image-outset\",\n      \"-moz-border-image-outset\",\n      \"-o-border-image-outset\",\n      \"border-image-outset\",\n      \"-webkit-border-image-repeat\",\n      \"-moz-border-image-repeat\",\n      \"-o-border-image-repeat\",\n      \"border-image-repeat\",\n      \"outline\",\n      \"outline-width\",\n      \"outline-style\",\n      \"outline-color\",\n      \"outline-offset\",\n      \"-webkit-box-shadow\",\n      \"-moz-box-shadow\",\n      \"box-shadow\",\n      \"filter:progid:DXImageTransform.Microsoft.Alpha(Opacity\",\n      \"-ms-filter:\\\\'progid:DXImageTransform.Microsoft.Alpha\",\n      \"opacity\",\n      \"-ms-interpolation-mode\",\n      \"-webkit-transition\",\n      \"-moz-transition\",\n      \"-ms-transition\",\n      \"-o-transition\",\n      \"transition\",\n      \"-webkit-transition-delay\",\n      \"-moz-transition-delay\",\n      \"-ms-transition-delay\",\n      \"-o-transition-delay\",\n      \"transition-delay\",\n      \"-webkit-transition-timing-function\",\n      \"-moz-transition-timing-function\",\n      \"-ms-transition-timing-function\",\n      \"-o-transition-timing-function\",\n      \"transition-timing-function\",\n      \"-webkit-transition-duration\",\n      \"-moz-transition-duration\",\n      \"-ms-transition-duration\",\n      \"-o-transition-duration\",\n      \"transition-duration\",\n      \"-webkit-transition-property\",\n      \"-moz-transition-property\",\n      \"-ms-transition-property\",\n      \"-o-transition-property\",\n      \"transition-property\",\n      \"-webkit-transform\",\n      \"-moz-transform\",\n      \"-ms-transform\",\n      \"-o-transform\",\n      \"transform\",\n      \"-webkit-transform-origin\",\n      \"-moz-transform-origin\",\n      \"-ms-transform-origin\",\n      \"-o-transform-origin\",\n      \"transform-origin\",\n      \"-webkit-animation\",\n      \"-moz-animation\",\n      \"-ms-animation\",\n      \"-o-animation\",\n      \"animation\",\n      \"-webkit-animation-name\",\n      \"-moz-animation-name\",\n      \"-ms-animation-name\",\n      \"-o-animation-name\",\n      \"animation-name\",\n      \"-webkit-animation-duration\",\n      \"-moz-animation-duration\",\n      \"-ms-animation-duration\",\n      \"-o-animation-duration\",\n      \"animation-duration\",\n      \"-webkit-animation-play-state\",\n      \"-moz-animation-play-state\",\n      \"-ms-animation-play-state\",\n      \"-o-animation-play-state\",\n      \"animation-play-state\",\n      \"-webkit-animation-timing-function\",\n      \"-moz-animation-timing-function\",\n      \"-ms-animation-timing-function\",\n      \"-o-animation-timing-function\",\n      \"animation-timing-function\",\n      \"-webkit-animation-delay\",\n      \"-moz-animation-delay\",\n      \"-ms-animation-delay\",\n      \"-o-animation-delay\",\n      \"animation-delay\",\n      \"-webkit-animation-iteration-count\",\n      \"-moz-animation-iteration-count\",\n      \"-ms-animation-iteration-count\",\n      \"-o-animation-iteration-count\",\n      \"animation-iteration-count\",\n      \"-webkit-animation-direction\",\n      \"-moz-animation-direction\",\n      \"-ms-animation-direction\",\n      \"-o-animation-direction\",\n      \"animation-direction\"\n    ]\n  ]\n}\n"
  },
  {
    "path": "themes/bootstrap-2/less/.csslintrc",
    "content": "{\n  \"adjoining-classes\": false,\n  \"box-sizing\": false,\n  \"box-model\": false,\n  \"compatible-vendor-prefixes\": false,\n  \"floats\": false,\n  \"font-sizes\": false,\n  \"gradients\": false,\n  \"important\": false,\n  \"known-properties\": false,\n  \"outline-none\": false,\n  \"qualified-headings\": false,\n  \"regex-selectors\": false,\n  \"shorthand\": false,\n  \"text-indent\": false,\n  \"unique-headings\": false,\n  \"universal-selector\": false,\n  \"unqualified-attributes\": false\n}\n"
  },
  {
    "path": "themes/bootstrap-2/less/alerts.less",
    "content": "//\n// Alerts\n// --------------------------------------------------\n\n\n// Base styles\n// -------------------------\n\n.alert {\n  padding: @alert-padding;\n  margin-bottom: @line-height-computed;\n  border: 1px solid transparent;\n  border-radius: @alert-border-radius;\n\n  // Headings for larger alerts\n  h4 {\n    margin-top: 0;\n    // Specified for the h4 to prevent conflicts of changing @headings-color\n    color: inherit;\n  }\n  // Provide class for links that match alerts\n  .alert-link {\n    font-weight: @alert-link-font-weight;\n  }\n\n  // Improve alignment and spacing of inner content\n  > p,\n  > ul {\n    margin-bottom: 0;\n  }\n  > p + p {\n    margin-top: 5px;\n  }\n}\n\n// Dismissible alerts\n//\n// Expand the right padding and account for the close button's positioning.\n\n.alert-dismissable, // The misspelled .alert-dismissable was deprecated in 3.2.0.\n.alert-dismissible {\n  padding-right: (@alert-padding + 20);\n\n  // Adjust close link position\n  .close {\n    position: relative;\n    top: -2px;\n    right: -21px;\n    color: inherit;\n  }\n}\n\n// Alternate styles\n//\n// Generate contextual modifier classes for colorizing the alert.\n\n.alert-success {\n  .alert-variant(@alert-success-bg; @alert-success-border; @alert-success-text);\n}\n.alert-info {\n  .alert-variant(@alert-info-bg; @alert-info-border; @alert-info-text);\n}\n.alert-warning {\n  .alert-variant(@alert-warning-bg; @alert-warning-border; @alert-warning-text);\n}\n.alert-danger {\n  .alert-variant(@alert-danger-bg; @alert-danger-border; @alert-danger-text);\n}\n"
  },
  {
    "path": "themes/bootstrap-2/less/badges.less",
    "content": "//\n// Badges\n// --------------------------------------------------\n\n\n// Base class\n.badge {\n  display: inline-block;\n  min-width: 10px;\n  padding: 3px 7px;\n  font-size: @font-size-small;\n  font-weight: @badge-font-weight;\n  color: @badge-color;\n  line-height: @badge-line-height;\n  vertical-align: baseline;\n  white-space: nowrap;\n  text-align: center;\n  background-color: @badge-bg;\n  border-radius: @badge-border-radius;\n\n  // Empty badges collapse automatically (not available in IE8)\n  &:empty {\n    display: none;\n  }\n\n  // Quick fix for badges in buttons\n  .btn & {\n    position: relative;\n    top: -1px;\n  }\n  .btn-xs & {\n    top: 0;\n    padding: 1px 5px;\n  }\n\n  // Hover state, but only for links\n  a& {\n    &:hover,\n    &:focus {\n      color: @badge-link-hover-color;\n      text-decoration: none;\n      cursor: pointer;\n    }\n  }\n\n  // Account for badges in navs\n  a.list-group-item.active > &,\n  .nav-pills > .active > a > & {\n    color: @badge-active-color;\n    background-color: @badge-active-bg;\n  }\n  .nav-pills > li > a > & {\n    margin-left: 3px;\n  }\n}\n"
  },
  {
    "path": "themes/bootstrap-2/less/bootstrap.less",
    "content": "// Core variables and mixins\n@import \"variables.less\";\n@import \"mixins.less\";\n\n// Reset and dependencies\n@import \"normalize.less\";\n@import \"print.less\";\n@import \"glyphicons.less\";\n\n// Core CSS\n@import \"scaffolding.less\";\n@import \"type.less\";\n@import \"code.less\";\n@import \"grid.less\";\n@import \"tables.less\";\n@import \"forms.less\";\n@import \"buttons.less\";\n\n// Components\n@import \"component-animations.less\";\n@import \"dropdowns.less\";\n@import \"button-groups.less\";\n@import \"input-groups.less\";\n@import \"navs.less\";\n@import \"navbar.less\";\n@import \"breadcrumbs.less\";\n@import \"pagination.less\";\n@import \"pager.less\";\n@import \"labels.less\";\n@import \"badges.less\";\n@import \"jumbotron.less\";\n@import \"thumbnails.less\";\n@import \"alerts.less\";\n@import \"progress-bars.less\";\n@import \"media.less\";\n@import \"list-group.less\";\n@import \"panels.less\";\n@import \"responsive-embed.less\";\n@import \"wells.less\";\n@import \"close.less\";\n\n// Components w/ JavaScript\n@import \"modals.less\";\n@import \"tooltip.less\";\n@import \"popovers.less\";\n@import \"carousel.less\";\n\n// Utility classes\n@import \"utilities.less\";\n@import \"responsive-utilities.less\";\n"
  },
  {
    "path": "themes/bootstrap-2/less/breadcrumbs.less",
    "content": "//\n// Breadcrumbs\n// --------------------------------------------------\n\n\n.breadcrumb {\n  padding: @breadcrumb-padding-vertical @breadcrumb-padding-horizontal;\n  margin-bottom: @line-height-computed;\n  list-style: none;\n  background-color: @breadcrumb-bg;\n  border-radius: @border-radius-base;\n\n  > li {\n    display: inline-block;\n\n    + li:before {\n      content: \"@{breadcrumb-separator}\\00a0\"; // Unicode space added since inline-block means non-collapsing white-space\n      padding: 0 5px;\n      color: @breadcrumb-color;\n    }\n  }\n\n  > .active {\n    color: @breadcrumb-active-color;\n  }\n}\n"
  },
  {
    "path": "themes/bootstrap-2/less/button-groups.less",
    "content": "//\n// Button groups\n// --------------------------------------------------\n\n// Make the div behave like a button\n.btn-group,\n.btn-group-vertical {\n  position: relative;\n  display: inline-block;\n  vertical-align: middle; // match .btn alignment given font-size hack above\n  > .btn {\n    position: relative;\n    float: left;\n    // Bring the \"active\" button to the front\n    &:hover,\n    &:focus,\n    &:active,\n    &.active {\n      z-index: 2;\n    }\n    &:focus {\n      // Remove focus outline when dropdown JS adds it after closing the menu\n      outline: 0;\n    }\n  }\n}\n\n// Prevent double borders when buttons are next to each other\n.btn-group {\n  .btn + .btn,\n  .btn + .btn-group,\n  .btn-group + .btn,\n  .btn-group + .btn-group {\n    margin-left: -1px;\n  }\n}\n\n// Optional: Group multiple button groups together for a toolbar\n.btn-toolbar {\n  margin-left: -5px; // Offset the first child's margin\n  &:extend(.clearfix all);\n\n  .btn-group,\n  .input-group {\n    float: left;\n  }\n  > .btn,\n  > .btn-group,\n  > .input-group {\n    margin-left: 5px;\n  }\n}\n\n.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {\n  border-radius: 0;\n}\n\n// Set corners individual because sometimes a single button can be in a .btn-group and we need :first-child and :last-child to both match\n.btn-group > .btn:first-child {\n  margin-left: 0;\n  &:not(:last-child):not(.dropdown-toggle) {\n    .border-right-radius(0);\n  }\n}\n// Need .dropdown-toggle since :last-child doesn't apply given a .dropdown-menu immediately after it\n.btn-group > .btn:last-child:not(:first-child),\n.btn-group > .dropdown-toggle:not(:first-child) {\n  .border-left-radius(0);\n}\n\n// Custom edits for including btn-groups within btn-groups (useful for including dropdown buttons within a btn-group)\n.btn-group > .btn-group {\n  float: left;\n}\n.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {\n  border-radius: 0;\n}\n.btn-group > .btn-group:first-child {\n  > .btn:last-child,\n  > .dropdown-toggle {\n    .border-right-radius(0);\n  }\n}\n.btn-group > .btn-group:last-child > .btn:first-child {\n  .border-left-radius(0);\n}\n\n// On active and open, don't show outline\n.btn-group .dropdown-toggle:active,\n.btn-group.open .dropdown-toggle {\n  outline: 0;\n}\n\n\n// Sizing\n//\n// Remix the default button sizing classes into new ones for easier manipulation.\n\n.btn-group-xs > .btn { &:extend(.btn-xs); }\n.btn-group-sm > .btn { &:extend(.btn-sm); }\n.btn-group-lg > .btn { &:extend(.btn-lg); }\n\n\n// Split button dropdowns\n// ----------------------\n\n// Give the line between buttons some depth\n.btn-group > .btn + .dropdown-toggle {\n  padding-left: 8px;\n  padding-right: 8px;\n}\n.btn-group > .btn-lg + .dropdown-toggle {\n  padding-left: 12px;\n  padding-right: 12px;\n}\n\n// The clickable button for toggling the menu\n// Remove the gradient and set the same inset shadow as the :active state\n.btn-group.open .dropdown-toggle {\n  .box-shadow(inset 0 3px 5px rgba(0,0,0,.125));\n\n  // Show no shadow for `.btn-link` since it has no other button styles.\n  &.btn-link {\n    .box-shadow(none);\n  }\n}\n\n\n// Reposition the caret\n.btn .caret {\n  margin-left: 0;\n}\n// Carets in other button sizes\n.btn-lg .caret {\n  border-width: @caret-width-large @caret-width-large 0;\n  border-bottom-width: 0;\n}\n// Upside down carets for .dropup\n.dropup .btn-lg .caret {\n  border-width: 0 @caret-width-large @caret-width-large;\n}\n\n\n// Vertical button groups\n// ----------------------\n\n.btn-group-vertical {\n  > .btn,\n  > .btn-group,\n  > .btn-group > .btn {\n    display: block;\n    float: none;\n    width: 100%;\n    max-width: 100%;\n  }\n\n  // Clear floats so dropdown menus can be properly placed\n  > .btn-group {\n    &:extend(.clearfix all);\n    > .btn {\n      float: none;\n    }\n  }\n\n  > .btn + .btn,\n  > .btn + .btn-group,\n  > .btn-group + .btn,\n  > .btn-group + .btn-group {\n    margin-top: -1px;\n    margin-left: 0;\n  }\n}\n\n.btn-group-vertical > .btn {\n  &:not(:first-child):not(:last-child) {\n    border-radius: 0;\n  }\n  &:first-child:not(:last-child) {\n    border-top-right-radius: @border-radius-base;\n    .border-bottom-radius(0);\n  }\n  &:last-child:not(:first-child) {\n    border-bottom-left-radius: @border-radius-base;\n    .border-top-radius(0);\n  }\n}\n.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {\n  border-radius: 0;\n}\n.btn-group-vertical > .btn-group:first-child:not(:last-child) {\n  > .btn:last-child,\n  > .dropdown-toggle {\n    .border-bottom-radius(0);\n  }\n}\n.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child {\n  .border-top-radius(0);\n}\n\n\n\n// Justified button groups\n// ----------------------\n\n.btn-group-justified {\n  display: table;\n  width: 100%;\n  table-layout: fixed;\n  border-collapse: separate;\n  > .btn,\n  > .btn-group {\n    float: none;\n    display: table-cell;\n    width: 1%;\n  }\n  > .btn-group .btn {\n    width: 100%;\n  }\n\n  > .btn-group .dropdown-menu {\n    left: auto;\n  }\n}\n\n\n// Checkbox and radio options\n//\n// In order to support the browser's form validation feedback, powered by the\n// `required` attribute, we have to \"hide\" the inputs via `opacity`. We cannot\n// use `display: none;` or `visibility: hidden;` as that also hides the popover.\n// This way, we ensure a DOM element is visible to position the popover from.\n//\n// See https://github.com/twbs/bootstrap/pull/12794 for more.\n\n[data-toggle=\"buttons\"] > .btn > input[type=\"radio\"],\n[data-toggle=\"buttons\"] > .btn > input[type=\"checkbox\"] {\n  position: absolute;\n  z-index: -1;\n  .opacity(0);\n}\n"
  },
  {
    "path": "themes/bootstrap-2/less/buttons.less",
    "content": "//\n// Buttons\n// --------------------------------------------------\n\n\n// Base styles\n// --------------------------------------------------\n\n.btn {\n  display: inline-block;\n  margin-bottom: 0; // For input.btn\n  font-weight: @btn-font-weight;\n  text-align: center;\n  vertical-align: middle;\n  cursor: pointer;\n  background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214\n  border: 1px solid transparent;\n  white-space: nowrap;\n  .button-size(@padding-base-vertical; @padding-base-horizontal; @font-size-base; @line-height-base; @border-radius-base);\n  .user-select(none);\n\n  &,\n  &:active,\n  &.active {\n    &:focus {\n      .tab-focus();\n    }\n  }\n\n  &:hover,\n  &:focus {\n    color: @btn-default-color;\n    text-decoration: none;\n  }\n\n  &:active,\n  &.active {\n    outline: 0;\n    background-image: none;\n    .box-shadow(inset 0 3px 5px rgba(0,0,0,.125));\n  }\n\n  &.disabled,\n  &[disabled],\n  fieldset[disabled] & {\n    cursor: not-allowed;\n    pointer-events: none; // Future-proof disabling of clicks\n    .opacity(.65);\n    .box-shadow(none);\n  }\n}\n\n\n// Alternate buttons\n// --------------------------------------------------\n\n.btn-default {\n  .button-variant(@btn-default-color; @btn-default-bg; @btn-default-border);\n}\n.btn-primary {\n  .button-variant(@btn-primary-color; @btn-primary-bg; @btn-primary-border);\n}\n// Success appears as green\n.btn-success {\n  .button-variant(@btn-success-color; @btn-success-bg; @btn-success-border);\n}\n// Info appears as blue-green\n.btn-info {\n  .button-variant(@btn-info-color; @btn-info-bg; @btn-info-border);\n}\n// Warning appears as orange\n.btn-warning {\n  .button-variant(@btn-warning-color; @btn-warning-bg; @btn-warning-border);\n}\n// Danger and error appear as red\n.btn-danger {\n  .button-variant(@btn-danger-color; @btn-danger-bg; @btn-danger-border);\n}\n\n\n// Link buttons\n// -------------------------\n\n// Make a button look and behave like a link\n.btn-link {\n  color: @link-color;\n  font-weight: normal;\n  cursor: pointer;\n  border-radius: 0;\n\n  &,\n  &:active,\n  &[disabled],\n  fieldset[disabled] & {\n    background-color: transparent;\n    .box-shadow(none);\n  }\n  &,\n  &:hover,\n  &:focus,\n  &:active {\n    border-color: transparent;\n  }\n  &:hover,\n  &:focus {\n    color: @link-hover-color;\n    text-decoration: underline;\n    background-color: transparent;\n  }\n  &[disabled],\n  fieldset[disabled] & {\n    &:hover,\n    &:focus {\n      color: @btn-link-disabled-color;\n      text-decoration: none;\n    }\n  }\n}\n\n\n// Button Sizes\n// --------------------------------------------------\n\n.btn-lg {\n  // line-height: ensure even-numbered height of button next to large input\n  .button-size(@padding-large-vertical; @padding-large-horizontal; @font-size-large; @line-height-large; @border-radius-large);\n}\n.btn-sm {\n  // line-height: ensure proper height of button next to small input\n  .button-size(@padding-small-vertical; @padding-small-horizontal; @font-size-small; @line-height-small; @border-radius-small);\n}\n.btn-xs {\n  .button-size(@padding-xs-vertical; @padding-xs-horizontal; @font-size-small; @line-height-small; @border-radius-small);\n}\n\n\n// Block button\n// --------------------------------------------------\n\n.btn-block {\n  display: block;\n  width: 100%;\n}\n\n// Vertically space out multiple block buttons\n.btn-block + .btn-block {\n  margin-top: 5px;\n}\n\n// Specificity overrides\ninput[type=\"submit\"],\ninput[type=\"reset\"],\ninput[type=\"button\"] {\n  &.btn-block {\n    width: 100%;\n  }\n}\n"
  },
  {
    "path": "themes/bootstrap-2/less/carousel.less",
    "content": "//\n// Carousel\n// --------------------------------------------------\n\n\n// Wrapper for the slide container and indicators\n.carousel {\n  position: relative;\n}\n\n.carousel-inner {\n  position: relative;\n  overflow: hidden;\n  width: 100%;\n\n  > .item {\n    display: none;\n    position: relative;\n    .transition(.6s ease-in-out left);\n\n    // Account for jankitude on images\n    > img,\n    > a > img {\n      &:extend(.img-responsive);\n      line-height: 1;\n    }\n  }\n\n  > .active,\n  > .next,\n  > .prev {\n    display: block;\n  }\n\n  > .active {\n    left: 0;\n  }\n\n  > .next,\n  > .prev {\n    position: absolute;\n    top: 0;\n    width: 100%;\n  }\n\n  > .next {\n    left: 100%;\n  }\n  > .prev {\n    left: -100%;\n  }\n  > .next.left,\n  > .prev.right {\n    left: 0;\n  }\n\n  > .active.left {\n    left: -100%;\n  }\n  > .active.right {\n    left: 100%;\n  }\n\n}\n\n// Left/right controls for nav\n// ---------------------------\n\n.carousel-control {\n  position: absolute;\n  top: 0;\n  left: 0;\n  bottom: 0;\n  width: @carousel-control-width;\n  .opacity(@carousel-control-opacity);\n  font-size: @carousel-control-font-size;\n  color: @carousel-control-color;\n  text-align: center;\n  text-shadow: @carousel-text-shadow;\n  // We can't have this transition here because WebKit cancels the carousel\n  // animation if you trip this while in the middle of another animation.\n\n  // Set gradients for backgrounds\n  &.left {\n    #gradient > .horizontal(@start-color: rgba(0,0,0,.5); @end-color: rgba(0,0,0,.0001));\n  }\n  &.right {\n    left: auto;\n    right: 0;\n    #gradient > .horizontal(@start-color: rgba(0,0,0,.0001); @end-color: rgba(0,0,0,.5));\n  }\n\n  // Hover/focus state\n  &:hover,\n  &:focus {\n    outline: 0;\n    color: @carousel-control-color;\n    text-decoration: none;\n    .opacity(.9);\n  }\n\n  // Toggles\n  .icon-prev,\n  .icon-next,\n  .glyphicon-chevron-left,\n  .glyphicon-chevron-right {\n    position: absolute;\n    top: 50%;\n    z-index: 5;\n    display: inline-block;\n  }\n  .icon-prev,\n  .glyphicon-chevron-left {\n    left: 50%;\n    margin-left: -10px;\n  }\n  .icon-next,\n  .glyphicon-chevron-right {\n    right: 50%;\n    margin-right: -10px;\n  }\n  .icon-prev,\n  .icon-next {\n    width:  20px;\n    height: 20px;\n    margin-top: -10px;\n    font-family: serif;\n  }\n\n\n  .icon-prev {\n    &:before {\n      content: '\\2039';// SINGLE LEFT-POINTING ANGLE QUOTATION MARK (U+2039)\n    }\n  }\n  .icon-next {\n    &:before {\n      content: '\\203a';// SINGLE RIGHT-POINTING ANGLE QUOTATION MARK (U+203A)\n    }\n  }\n}\n\n// Optional indicator pips\n//\n// Add an unordered list with the following class and add a list item for each\n// slide your carousel holds.\n\n.carousel-indicators {\n  position: absolute;\n  bottom: 10px;\n  left: 50%;\n  z-index: 15;\n  width: 60%;\n  margin-left: -30%;\n  padding-left: 0;\n  list-style: none;\n  text-align: center;\n\n  li {\n    display: inline-block;\n    width:  10px;\n    height: 10px;\n    margin: 1px;\n    text-indent: -999px;\n    border: 1px solid @carousel-indicator-border-color;\n    border-radius: 10px;\n    cursor: pointer;\n\n    // IE8-9 hack for event handling\n    //\n    // Internet Explorer 8-9 does not support clicks on elements without a set\n    // `background-color`. We cannot use `filter` since that's not viewed as a\n    // background color by the browser. Thus, a hack is needed.\n    //\n    // For IE8, we set solid black as it doesn't support `rgba()`. For IE9, we\n    // set alpha transparency for the best results possible.\n    background-color: #000 \\9; // IE8\n    background-color: rgba(0,0,0,0); // IE9\n  }\n  .active {\n    margin: 0;\n    width:  12px;\n    height: 12px;\n    background-color: @carousel-indicator-active-bg;\n  }\n}\n\n// Optional captions\n// -----------------------------\n// Hidden by default for smaller viewports\n.carousel-caption {\n  position: absolute;\n  left: 15%;\n  right: 15%;\n  bottom: 20px;\n  z-index: 10;\n  padding-top: 20px;\n  padding-bottom: 20px;\n  color: @carousel-caption-color;\n  text-align: center;\n  text-shadow: @carousel-text-shadow;\n  & .btn {\n    text-shadow: none; // No shadow for button elements in carousel-caption\n  }\n}\n\n\n// Scale up controls for tablets and up\n@media screen and (min-width: @screen-sm-min) {\n\n  // Scale up the controls a smidge\n  .carousel-control {\n    .glyphicon-chevron-left,\n    .glyphicon-chevron-right,\n    .icon-prev,\n    .icon-next {\n      width: 30px;\n      height: 30px;\n      margin-top: -15px;\n      font-size: 30px;\n    }\n    .glyphicon-chevron-left,\n    .icon-prev {\n      margin-left: -15px;\n    }\n    .glyphicon-chevron-right,\n    .icon-next {\n      margin-right: -15px;\n    }\n  }\n\n  // Show and left align the captions\n  .carousel-caption {\n    left: 20%;\n    right: 20%;\n    padding-bottom: 30px;\n  }\n\n  // Move up the indicators\n  .carousel-indicators {\n    bottom: 20px;\n  }\n}\n"
  },
  {
    "path": "themes/bootstrap-2/less/close.less",
    "content": "//\n// Close icons\n// --------------------------------------------------\n\n\n.close {\n  float: right;\n  font-size: (@font-size-base * 1.5);\n  font-weight: @close-font-weight;\n  line-height: 1;\n  color: @close-color;\n  text-shadow: @close-text-shadow;\n  .opacity(.2);\n\n  &:hover,\n  &:focus {\n    color: @close-color;\n    text-decoration: none;\n    cursor: pointer;\n    .opacity(.5);\n  }\n\n  // Additional properties for button version\n  // iOS requires the button element instead of an anchor tag.\n  // If you want the anchor version, it requires `href=\"#\"`.\n  button& {\n    padding: 0;\n    cursor: pointer;\n    background: transparent;\n    border: 0;\n    -webkit-appearance: none;\n  }\n}\n"
  },
  {
    "path": "themes/bootstrap-2/less/code.less",
    "content": "//\n// Code (inline and block)\n// --------------------------------------------------\n\n\n// Inline and block code styles\ncode,\nkbd,\npre,\nsamp {\n  font-family: @font-family-monospace;\n}\n\n// Inline code\ncode {\n  padding: 2px 4px;\n  font-size: 90%;\n  color: @code-color;\n  background-color: @code-bg;\n  border-radius: @border-radius-base;\n}\n\n// User input typically entered via keyboard\nkbd {\n  padding: 2px 4px;\n  font-size: 90%;\n  color: @kbd-color;\n  background-color: @kbd-bg;\n  border-radius: @border-radius-small;\n  box-shadow: inset 0 -1px 0 rgba(0,0,0,.25);\n\n  kbd {\n    padding: 0;\n    font-size: 100%;\n    box-shadow: none;\n  }\n}\n\n// Blocks of code\npre {\n  display: block;\n  padding: ((@line-height-computed - 1) / 2);\n  margin: 0 0 (@line-height-computed / 2);\n  font-size: (@font-size-base - 1); // 14px to 13px\n  line-height: @line-height-base;\n  word-break: break-all;\n  word-wrap: break-word;\n  color: @pre-color;\n  background-color: @pre-bg;\n  border: 1px solid @pre-border-color;\n  border-radius: @border-radius-base;\n\n  // Account for some code outputs that place code tags in pre tags\n  code {\n    padding: 0;\n    font-size: inherit;\n    color: inherit;\n    white-space: pre-wrap;\n    background-color: transparent;\n    border-radius: 0;\n  }\n}\n\n// Enable scrollable blocks of code\n.pre-scrollable {\n  max-height: @pre-scrollable-max-height;\n  overflow-y: scroll;\n}\n"
  },
  {
    "path": "themes/bootstrap-2/less/component-animations.less",
    "content": "//\n// Component animations\n// --------------------------------------------------\n\n// Heads up!\n//\n// We don't use the `.opacity()` mixin here since it causes a bug with text\n// fields in IE7-8. Source: https://github.com/twbs/bootstrap/pull/3552.\n\n.fade {\n  opacity: 0;\n  .transition(opacity .15s linear);\n  &.in {\n    opacity: 1;\n  }\n}\n\n.collapse {\n  display: none;\n\n  &.in      { display: block; }\n  tr&.in    { display: table-row; }\n  tbody&.in { display: table-row-group; }\n}\n\n.collapsing {\n  position: relative;\n  height: 0;\n  overflow: hidden;\n  .transition(height .35s ease);\n}\n"
  },
  {
    "path": "themes/bootstrap-2/less/dropdowns.less",
    "content": "//\n// Dropdown menus\n// --------------------------------------------------\n\n\n// Dropdown arrow/caret\n.caret {\n  display: inline-block;\n  width: 0;\n  height: 0;\n  margin-left: 2px;\n  vertical-align: middle;\n  border-top:   @caret-width-base solid;\n  border-right: @caret-width-base solid transparent;\n  border-left:  @caret-width-base solid transparent;\n}\n\n// The dropdown wrapper (div)\n.dropdown {\n  position: relative;\n}\n\n// Prevent the focus on the dropdown toggle when closing dropdowns\n.dropdown-toggle:focus {\n  outline: 0;\n}\n\n// The dropdown menu (ul)\n.dropdown-menu {\n  position: absolute;\n  top: 100%;\n  left: 0;\n  z-index: @zindex-dropdown;\n  display: none; // none by default, but block on \"open\" of the menu\n  float: left;\n  min-width: 160px;\n  padding: 5px 0;\n  margin: 2px 0 0; // override default ul\n  list-style: none;\n  font-size: @font-size-base;\n  text-align: left; // Ensures proper alignment if parent has it changed (e.g., modal footer)\n  background-color: @dropdown-bg;\n  border: 1px solid @dropdown-fallback-border; // IE8 fallback\n  border: 1px solid @dropdown-border;\n  border-radius: @border-radius-base;\n  .box-shadow(0 6px 12px rgba(0,0,0,.175));\n  background-clip: padding-box;\n\n  // Aligns the dropdown menu to right\n  //\n  // Deprecated as of 3.1.0 in favor of `.dropdown-menu-[dir]`\n  &.pull-right {\n    right: 0;\n    left: auto;\n  }\n\n  // Dividers (basically an hr) within the dropdown\n  .divider {\n    .nav-divider(@dropdown-divider-bg);\n  }\n\n  // Links within the dropdown menu\n  > li > a {\n    display: block;\n    padding: 3px 20px;\n    clear: both;\n    font-weight: normal;\n    line-height: @line-height-base;\n    color: @dropdown-link-color;\n    white-space: nowrap; // prevent links from randomly breaking onto new lines\n  }\n}\n\n// Hover/Focus state\n.dropdown-menu > li > a {\n  &:hover,\n  &:focus {\n    text-decoration: none;\n    color: @dropdown-link-hover-color;\n    background-color: @dropdown-link-hover-bg;\n  }\n}\n\n// Active state\n.dropdown-menu > .active > a {\n  &,\n  &:hover,\n  &:focus {\n    color: @dropdown-link-active-color;\n    text-decoration: none;\n    outline: 0;\n    background-color: @dropdown-link-active-bg;\n  }\n}\n\n// Disabled state\n//\n// Gray out text and ensure the hover/focus state remains gray\n\n.dropdown-menu > .disabled > a {\n  &,\n  &:hover,\n  &:focus {\n    color: @dropdown-link-disabled-color;\n  }\n}\n// Nuke hover/focus effects\n.dropdown-menu > .disabled > a {\n  &:hover,\n  &:focus {\n    text-decoration: none;\n    background-color: transparent;\n    background-image: none; // Remove CSS gradient\n    .reset-filter();\n    cursor: not-allowed;\n  }\n}\n\n// Open state for the dropdown\n.open {\n  // Show the menu\n  > .dropdown-menu {\n    display: block;\n  }\n\n  // Remove the outline when :focus is triggered\n  > a {\n    outline: 0;\n  }\n}\n\n// Menu positioning\n//\n// Add extra class to `.dropdown-menu` to flip the alignment of the dropdown\n// menu with the parent.\n.dropdown-menu-right {\n  left: auto; // Reset the default from `.dropdown-menu`\n  right: 0;\n}\n// With v3, we enabled auto-flipping if you have a dropdown within a right\n// aligned nav component. To enable the undoing of that, we provide an override\n// to restore the default dropdown menu alignment.\n//\n// This is only for left-aligning a dropdown menu within a `.navbar-right` or\n// `.pull-right` nav component.\n.dropdown-menu-left {\n  left: 0;\n  right: auto;\n}\n\n// Dropdown section headers\n.dropdown-header {\n  display: block;\n  padding: 3px 20px;\n  font-size: @font-size-small;\n  line-height: @line-height-base;\n  color: @dropdown-header-color;\n  white-space: nowrap; // as with > li > a\n}\n\n// Backdrop to catch body clicks on mobile, etc.\n.dropdown-backdrop {\n  position: fixed;\n  left: 0;\n  right: 0;\n  bottom: 0;\n  top: 0;\n  z-index: (@zindex-dropdown - 10);\n}\n\n// Right aligned dropdowns\n.pull-right > .dropdown-menu {\n  right: 0;\n  left: auto;\n}\n\n// Allow for dropdowns to go bottom up (aka, dropup-menu)\n//\n// Just add .dropup after the standard .dropdown class and you're set, bro.\n// TODO: abstract this so that the navbar fixed styles are not placed here?\n\n.dropup,\n.navbar-fixed-bottom .dropdown {\n  // Reverse the caret\n  .caret {\n    border-top: 0;\n    border-bottom: @caret-width-base solid;\n    content: \"\";\n  }\n  // Different positioning for bottom up menu\n  .dropdown-menu {\n    top: auto;\n    bottom: 100%;\n    margin-bottom: 1px;\n  }\n}\n\n\n// Component alignment\n//\n// Reiterate per navbar.less and the modified component alignment there.\n\n@media (min-width: @grid-float-breakpoint) {\n  .navbar-right {\n    .dropdown-menu {\n      .dropdown-menu-right();\n    }\n    // Necessary for overrides of the default right aligned menu.\n    // Will remove come v4 in all likelihood.\n    .dropdown-menu-left {\n      .dropdown-menu-left();\n    }\n  }\n}\n\n"
  },
  {
    "path": "themes/bootstrap-2/less/forms.less",
    "content": "//\n// Forms\n// --------------------------------------------------\n\n\n// Normalize non-controls\n//\n// Restyle and baseline non-control form elements.\n\nfieldset {\n  padding: 0;\n  margin: 0;\n  border: 0;\n  // Chrome and Firefox set a `min-width: min-content;` on fieldsets,\n  // so we reset that to ensure it behaves more like a standard block element.\n  // See https://github.com/twbs/bootstrap/issues/12359.\n  min-width: 0;\n}\n\nlegend {\n  display: block;\n  width: 100%;\n  padding: 0;\n  margin-bottom: @line-height-computed;\n  font-size: (@font-size-base * 1.5);\n  line-height: inherit;\n  color: @legend-color;\n  border: 0;\n  border-bottom: 1px solid @legend-border-color;\n}\n\nlabel {\n  display: inline-block;\n  max-width: 100%; // Force IE8 to wrap long content (see https://github.com/twbs/bootstrap/issues/13141)\n  margin-bottom: 5px;\n  font-weight: bold;\n}\n\n\n// Normalize form controls\n//\n// While most of our form styles require extra classes, some basic normalization\n// is required to ensure optimum display with or without those classes to better\n// address browser inconsistencies.\n\n// Override content-box in Normalize (* isn't specific enough)\ninput[type=\"search\"] {\n  .box-sizing(border-box);\n}\n\n// Position radios and checkboxes better\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n  margin: 4px 0 0;\n  margin-top: 1px \\9; // IE8-9\n  line-height: normal;\n}\n\n// Set the height of file controls to match text inputs\ninput[type=\"file\"] {\n  display: block;\n}\n\n// Make range inputs behave like textual form controls\ninput[type=\"range\"] {\n  display: block;\n  width: 100%;\n}\n\n// Make multiple select elements height not fixed\nselect[multiple],\nselect[size] {\n  height: auto;\n}\n\n// Focus for file, radio, and checkbox\ninput[type=\"file\"]:focus,\ninput[type=\"radio\"]:focus,\ninput[type=\"checkbox\"]:focus {\n  .tab-focus();\n}\n\n// Adjust output element\noutput {\n  display: block;\n  padding-top: (@padding-base-vertical + 1);\n  font-size: @font-size-base;\n  line-height: @line-height-base;\n  color: @input-color;\n}\n\n\n// Common form controls\n//\n// Shared size and type resets for form controls. Apply `.form-control` to any\n// of the following form controls:\n//\n// select\n// textarea\n// input[type=\"text\"]\n// input[type=\"password\"]\n// input[type=\"datetime\"]\n// input[type=\"datetime-local\"]\n// input[type=\"date\"]\n// input[type=\"month\"]\n// input[type=\"time\"]\n// input[type=\"week\"]\n// input[type=\"number\"]\n// input[type=\"email\"]\n// input[type=\"url\"]\n// input[type=\"search\"]\n// input[type=\"tel\"]\n// input[type=\"color\"]\n\n.form-control {\n  display: block;\n  width: 100%;\n  height: @input-height-base; // Make inputs at least the height of their button counterpart (base line-height + padding + border)\n  padding: @padding-base-vertical @padding-base-horizontal;\n  font-size: @font-size-base;\n  line-height: @line-height-base;\n  color: @input-color;\n  background-color: @input-bg;\n  background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214\n  border: 1px solid @input-border;\n  border-radius: @input-border-radius;\n  .box-shadow(inset 0 1px 1px rgba(0,0,0,.075));\n  .transition(~\"border-color ease-in-out .15s, box-shadow ease-in-out .15s\");\n\n  // Customize the `:focus` state to imitate native WebKit styles.\n  .form-control-focus();\n\n  // Placeholder\n  .placeholder();\n\n  // Disabled and read-only inputs\n  //\n  // HTML5 says that controls under a fieldset > legend:first-child won't be\n  // disabled if the fieldset is disabled. Due to implementation difficulty, we\n  // don't honor that edge case; we style them as disabled anyway.\n  &[disabled],\n  &[readonly],\n  fieldset[disabled] & {\n    cursor: not-allowed;\n    background-color: @input-bg-disabled;\n    opacity: 1; // iOS fix for unreadable disabled content\n  }\n\n  // Reset height for `textarea`s\n  textarea& {\n    height: auto;\n  }\n}\n\n\n// Search inputs in iOS\n//\n// This overrides the extra rounded corners on search inputs in iOS so that our\n// `.form-control` class can properly style them. Note that this cannot simply\n// be added to `.form-control` as it's not specific enough. For details, see\n// https://github.com/twbs/bootstrap/issues/11586.\n\ninput[type=\"search\"] {\n  -webkit-appearance: none;\n}\n\n\n// Special styles for iOS temporal inputs\n//\n// In Mobile Safari, setting `display: block` on temporal inputs causes the\n// text within the input to become vertically misaligned.\n// As a workaround, we set a pixel line-height that matches the\n// given height of the input. Since this fucks up everything else, we have to\n// appropriately reset it for Internet Explorer and the size variations.\n\ninput[type=\"date\"],\ninput[type=\"time\"],\ninput[type=\"datetime-local\"],\ninput[type=\"month\"] {\n  line-height: @input-height-base;\n  // IE8+ misaligns the text within date inputs, so we reset\n  line-height: @line-height-base ~\"\\0\";\n\n  &.input-sm {\n    line-height: @input-height-small;\n  }\n  &.input-lg {\n    line-height: @input-height-large;\n  }\n}\n\n\n// Form groups\n//\n// Designed to help with the organization and spacing of vertical forms. For\n// horizontal forms, use the predefined grid classes.\n\n.form-group {\n  margin-bottom: 15px;\n}\n\n\n// Checkboxes and radios\n//\n// Indent the labels to position radios/checkboxes as hanging controls.\n\n.radio,\n.checkbox {\n  position: relative;\n  display: block;\n  min-height: @line-height-computed; // clear the floating input if there is no label text\n  margin-top: 10px;\n  margin-bottom: 10px;\n\n  label {\n    padding-left: 20px;\n    margin-bottom: 0;\n    font-weight: normal;\n    cursor: pointer;\n  }\n}\n.radio input[type=\"radio\"],\n.radio-inline input[type=\"radio\"],\n.checkbox input[type=\"checkbox\"],\n.checkbox-inline input[type=\"checkbox\"] {\n  position: absolute;\n  margin-left: -20px;\n  margin-top: 4px \\9;\n}\n\n.radio + .radio,\n.checkbox + .checkbox {\n  margin-top: -5px; // Move up sibling radios or checkboxes for tighter spacing\n}\n\n// Radios and checkboxes on same line\n.radio-inline,\n.checkbox-inline {\n  display: inline-block;\n  padding-left: 20px;\n  margin-bottom: 0;\n  vertical-align: middle;\n  font-weight: normal;\n  cursor: pointer;\n}\n.radio-inline + .radio-inline,\n.checkbox-inline + .checkbox-inline {\n  margin-top: 0;\n  margin-left: 10px; // space out consecutive inline controls\n}\n\n// Apply same disabled cursor tweak as for inputs\n// Some special care is needed because <label>s don't inherit their parent's `cursor`.\n//\n// Note: Neither radios nor checkboxes can be readonly.\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n  &[disabled],\n  &.disabled,\n  fieldset[disabled] & {\n    cursor: not-allowed;\n  }\n}\n// These classes are used directly on <label>s\n.radio-inline,\n.checkbox-inline {\n  &.disabled,\n  fieldset[disabled] & {\n    cursor: not-allowed;\n  }\n}\n// These classes are used on elements with <label> descendants\n.radio,\n.checkbox {\n  &.disabled,\n  fieldset[disabled] & {\n    label {\n      cursor: not-allowed;\n    }\n  }\n}\n\n\n// Static form control text\n//\n// Apply class to a `p` element to make any string of text align with labels in\n// a horizontal form layout.\n\n.form-control-static {\n  // Size it appropriately next to real form controls\n  padding-top: (@padding-base-vertical + 1);\n  padding-bottom: (@padding-base-vertical + 1);\n  // Remove default margin from `p`\n  margin-bottom: 0;\n\n  &.input-lg,\n  &.input-sm {\n    padding-left: 0;\n    padding-right: 0;\n  }\n}\n\n\n// Form control sizing\n//\n// Build on `.form-control` with modifier classes to decrease or increase the\n// height and font-size of form controls.\n\n.input-sm {\n  .input-size(@input-height-small; @padding-small-vertical; @padding-small-horizontal; @font-size-small; @line-height-small; @border-radius-small);\n}\n\n.input-lg {\n  .input-size(@input-height-large; @padding-large-vertical; @padding-large-horizontal; @font-size-large; @line-height-large; @border-radius-large);\n}\n\n\n// Form control feedback states\n//\n// Apply contextual and semantic states to individual form controls.\n\n.has-feedback {\n  // Enable absolute positioning\n  position: relative;\n\n  // Ensure icons don't overlap text\n  .form-control {\n    padding-right: (@input-height-base * 1.25);\n  }\n}\n// Feedback icon (requires .glyphicon classes)\n.form-control-feedback {\n  position: absolute;\n  top: (@line-height-computed + 5); // Height of the `label` and its margin\n  right: 0;\n  z-index: 2; // Ensure icon is above input groups\n  display: block;\n  width: @input-height-base;\n  height: @input-height-base;\n  line-height: @input-height-base;\n  text-align: center;\n}\n.input-lg + .form-control-feedback {\n  width: @input-height-large;\n  height: @input-height-large;\n  line-height: @input-height-large;\n}\n.input-sm + .form-control-feedback {\n  width: @input-height-small;\n  height: @input-height-small;\n  line-height: @input-height-small;\n}\n\n// Feedback states\n.has-success {\n  .form-control-validation(@state-success-text; @state-success-text; @state-success-bg);\n}\n.has-warning {\n  .form-control-validation(@state-warning-text; @state-warning-text; @state-warning-bg);\n}\n.has-error {\n  .form-control-validation(@state-danger-text; @state-danger-text; @state-danger-bg);\n}\n\n\n// Reposition feedback icon if label is hidden with \"screenreader only\" state\n.has-feedback label.sr-only ~ .form-control-feedback {\n  top: 0;\n}\n\n\n// Help text\n//\n// Apply to any element you wish to create light text for placement immediately\n// below a form control. Use for general help, formatting, or instructional text.\n\n.help-block {\n  display: block; // account for any element using help-block\n  margin-top: 5px;\n  margin-bottom: 10px;\n  color: lighten(@text-color, 25%); // lighten the text some for contrast\n}\n\n\n\n// Inline forms\n//\n// Make forms appear inline(-block) by adding the `.form-inline` class. Inline\n// forms begin stacked on extra small (mobile) devices and then go inline when\n// viewports reach <768px.\n//\n// Requires wrapping inputs and labels with `.form-group` for proper display of\n// default HTML form controls and our custom form controls (e.g., input groups).\n//\n// Heads up! This is mixin-ed into `.navbar-form` in navbars.less.\n\n.form-inline {\n\n  // Kick in the inline\n  @media (min-width: @screen-sm-min) {\n    // Inline-block all the things for \"inline\"\n    .form-group {\n      display: inline-block;\n      margin-bottom: 0;\n      vertical-align: middle;\n    }\n\n    // In navbar-form, allow folks to *not* use `.form-group`\n    .form-control {\n      display: inline-block;\n      width: auto; // Prevent labels from stacking above inputs in `.form-group`\n      vertical-align: middle;\n    }\n\n    .input-group {\n      display: inline-table;\n      vertical-align: middle;\n\n      .input-group-addon,\n      .input-group-btn,\n      .form-control {\n        width: auto;\n      }\n    }\n\n    // Input groups need that 100% width though\n    .input-group > .form-control {\n      width: 100%;\n    }\n\n    .control-label {\n      margin-bottom: 0;\n      vertical-align: middle;\n    }\n\n    // Remove default margin on radios/checkboxes that were used for stacking, and\n    // then undo the floating of radios and checkboxes to match (which also avoids\n    // a bug in WebKit: https://github.com/twbs/bootstrap/issues/1969).\n    .radio,\n    .checkbox {\n      display: inline-block;\n      margin-top: 0;\n      margin-bottom: 0;\n      vertical-align: middle;\n\n      label {\n        padding-left: 0;\n      }\n    }\n    .radio input[type=\"radio\"],\n    .checkbox input[type=\"checkbox\"] {\n      position: relative;\n      margin-left: 0;\n    }\n\n    // Validation states\n    //\n    // Reposition the icon because it's now within a grid column and columns have\n    // `position: relative;` on them. Also accounts for the grid gutter padding.\n    .has-feedback .form-control-feedback {\n      top: 0;\n    }\n  }\n}\n\n\n// Horizontal forms\n//\n// Horizontal forms are built on grid classes and allow you to create forms with\n// labels on the left and inputs on the right.\n\n.form-horizontal {\n\n  // Consistent vertical alignment of radios and checkboxes\n  //\n  // Labels also get some reset styles, but that is scoped to a media query below.\n  .radio,\n  .checkbox,\n  .radio-inline,\n  .checkbox-inline {\n    margin-top: 0;\n    margin-bottom: 0;\n    padding-top: (@padding-base-vertical + 1); // Default padding plus a border\n  }\n  // Account for padding we're adding to ensure the alignment and of help text\n  // and other content below items\n  .radio,\n  .checkbox {\n    min-height: (@line-height-computed + (@padding-base-vertical + 1));\n  }\n\n  // Make form groups behave like rows\n  .form-group {\n    .make-row();\n  }\n\n  // Reset spacing and right align labels, but scope to media queries so that\n  // labels on narrow viewports stack the same as a default form example.\n  @media (min-width: @screen-sm-min) {\n    .control-label {\n      text-align: right;\n      margin-bottom: 0;\n      padding-top: (@padding-base-vertical + 1); // Default padding plus a border\n    }\n  }\n\n  // Validation states\n  //\n  // Reposition the icon because it's now within a grid column and columns have\n  // `position: relative;` on them. Also accounts for the grid gutter padding.\n  .has-feedback .form-control-feedback {\n    top: 0;\n    right: (@grid-gutter-width / 2);\n  }\n\n  // Form group sizes\n  //\n  // Quick utility class for applying `.input-lg` and `.input-sm` styles to the\n  // inputs and labels within a `.form-group`.\n  .form-group-lg {\n    @media (min-width: @screen-sm-min) {\n      .control-label {\n        padding-top: ((@padding-large-vertical * @line-height-large) + 1);\n      }\n    }\n    .form-control {\n      &:extend(.input-lg);\n    }\n  }\n  .form-group-sm {\n    @media (min-width: @screen-sm-min) {\n      .control-label {\n        padding-top: (@padding-small-vertical + 1);\n      }\n    }\n    .form-control {\n      &:extend(.input-sm);\n    }\n  }\n}\n"
  },
  {
    "path": "themes/bootstrap-2/less/glyphicons.less",
    "content": "//\n// Glyphicons for Bootstrap\n//\n// Since icons are fonts, they can be placed anywhere text is placed and are\n// thus automatically sized to match the surrounding child. To use, create an\n// inline element with the appropriate classes, like so:\n//\n// <a href=\"#\"><span class=\"glyphicon glyphicon-star\"></span> Star</a>\n\n// Import the fonts\n@font-face {\n  font-family: 'Glyphicons Halflings';\n  src: url('@{icon-font-path}@{icon-font-name}.eot');\n  src: url('@{icon-font-path}@{icon-font-name}.eot?#iefix') format('embedded-opentype'),\n       url('@{icon-font-path}@{icon-font-name}.woff') format('woff'),\n       url('@{icon-font-path}@{icon-font-name}.ttf') format('truetype'),\n       url('@{icon-font-path}@{icon-font-name}.svg#@{icon-font-svg-id}') format('svg');\n}\n\n// Catchall baseclass\n.glyphicon {\n  position: relative;\n  top: 1px;\n  display: inline-block;\n  font-family: 'Glyphicons Halflings';\n  font-style: normal;\n  font-weight: normal;\n  line-height: 1;\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n}\n\n// Individual icons\n.glyphicon-asterisk               { &:before { content: \"\\2a\"; } }\n.glyphicon-plus                   { &:before { content: \"\\2b\"; } }\n.glyphicon-euro                   { &:before { content: \"\\20ac\"; } }\n.glyphicon-minus                  { &:before { content: \"\\2212\"; } }\n.glyphicon-cloud                  { &:before { content: \"\\2601\"; } }\n.glyphicon-envelope               { &:before { content: \"\\2709\"; } }\n.glyphicon-pencil                 { &:before { content: \"\\270f\"; } }\n.glyphicon-glass                  { &:before { content: \"\\e001\"; } }\n.glyphicon-music                  { &:before { content: \"\\e002\"; } }\n.glyphicon-search                 { &:before { content: \"\\e003\"; } }\n.glyphicon-heart                  { &:before { content: \"\\e005\"; } }\n.glyphicon-star                   { &:before { content: \"\\e006\"; } }\n.glyphicon-star-empty             { &:before { content: \"\\e007\"; } }\n.glyphicon-user                   { &:before { content: \"\\e008\"; } }\n.glyphicon-film                   { &:before { content: \"\\e009\"; } }\n.glyphicon-th-large               { &:before { content: \"\\e010\"; } }\n.glyphicon-th                     { &:before { content: \"\\e011\"; } }\n.glyphicon-th-list                { &:before { content: \"\\e012\"; } }\n.glyphicon-ok                     { &:before { content: \"\\e013\"; } }\n.glyphicon-remove                 { &:before { content: \"\\e014\"; } }\n.glyphicon-zoom-in                { &:before { content: \"\\e015\"; } }\n.glyphicon-zoom-out               { &:before { content: \"\\e016\"; } }\n.glyphicon-off                    { &:before { content: \"\\e017\"; } }\n.glyphicon-signal                 { &:before { content: \"\\e018\"; } }\n.glyphicon-cog                    { &:before { content: \"\\e019\"; } }\n.glyphicon-trash                  { &:before { content: \"\\e020\"; } }\n.glyphicon-home                   { &:before { content: \"\\e021\"; } }\n.glyphicon-file                   { &:before { content: \"\\e022\"; } }\n.glyphicon-time                   { &:before { content: \"\\e023\"; } }\n.glyphicon-road                   { &:before { content: \"\\e024\"; } }\n.glyphicon-download-alt           { &:before { content: \"\\e025\"; } }\n.glyphicon-download               { &:before { content: \"\\e026\"; } }\n.glyphicon-upload                 { &:before { content: \"\\e027\"; } }\n.glyphicon-inbox                  { &:before { content: \"\\e028\"; } }\n.glyphicon-play-circle            { &:before { content: \"\\e029\"; } }\n.glyphicon-repeat                 { &:before { content: \"\\e030\"; } }\n.glyphicon-refresh                { &:before { content: \"\\e031\"; } }\n.glyphicon-list-alt               { &:before { content: \"\\e032\"; } }\n.glyphicon-lock                   { &:before { content: \"\\e033\"; } }\n.glyphicon-flag                   { &:before { content: \"\\e034\"; } }\n.glyphicon-headphones             { &:before { content: \"\\e035\"; } }\n.glyphicon-volume-off             { &:before { content: \"\\e036\"; } }\n.glyphicon-volume-down            { &:before { content: \"\\e037\"; } }\n.glyphicon-volume-up              { &:before { content: \"\\e038\"; } }\n.glyphicon-qrcode                 { &:before { content: \"\\e039\"; } }\n.glyphicon-barcode                { &:before { content: \"\\e040\"; } }\n.glyphicon-tag                    { &:before { content: \"\\e041\"; } }\n.glyphicon-tags                   { &:before { content: \"\\e042\"; } }\n.glyphicon-book                   { &:before { content: \"\\e043\"; } }\n.glyphicon-bookmark               { &:before { content: \"\\e044\"; } }\n.glyphicon-print                  { &:before { content: \"\\e045\"; } }\n.glyphicon-camera                 { &:before { content: \"\\e046\"; } }\n.glyphicon-font                   { &:before { content: \"\\e047\"; } }\n.glyphicon-bold                   { &:before { content: \"\\e048\"; } }\n.glyphicon-italic                 { &:before { content: \"\\e049\"; } }\n.glyphicon-text-height            { &:before { content: \"\\e050\"; } }\n.glyphicon-text-width             { &:before { content: \"\\e051\"; } }\n.glyphicon-align-left             { &:before { content: \"\\e052\"; } }\n.glyphicon-align-center           { &:before { content: \"\\e053\"; } }\n.glyphicon-align-right            { &:before { content: \"\\e054\"; } }\n.glyphicon-align-justify          { &:before { content: \"\\e055\"; } }\n.glyphicon-list                   { &:before { content: \"\\e056\"; } }\n.glyphicon-indent-left            { &:before { content: \"\\e057\"; } }\n.glyphicon-indent-right           { &:before { content: \"\\e058\"; } }\n.glyphicon-facetime-video         { &:before { content: \"\\e059\"; } }\n.glyphicon-picture                { &:before { content: \"\\e060\"; } }\n.glyphicon-map-marker             { &:before { content: \"\\e062\"; } }\n.glyphicon-adjust                 { &:before { content: \"\\e063\"; } }\n.glyphicon-tint                   { &:before { content: \"\\e064\"; } }\n.glyphicon-edit                   { &:before { content: \"\\e065\"; } }\n.glyphicon-share                  { &:before { content: \"\\e066\"; } }\n.glyphicon-check                  { &:before { content: \"\\e067\"; } }\n.glyphicon-move                   { &:before { content: \"\\e068\"; } }\n.glyphicon-step-backward          { &:before { content: \"\\e069\"; } }\n.glyphicon-fast-backward          { &:before { content: \"\\e070\"; } }\n.glyphicon-backward               { &:before { content: \"\\e071\"; } }\n.glyphicon-play                   { &:before { content: \"\\e072\"; } }\n.glyphicon-pause                  { &:before { content: \"\\e073\"; } }\n.glyphicon-stop                   { &:before { content: \"\\e074\"; } }\n.glyphicon-forward                { &:before { content: \"\\e075\"; } }\n.glyphicon-fast-forward           { &:before { content: \"\\e076\"; } }\n.glyphicon-step-forward           { &:before { content: \"\\e077\"; } }\n.glyphicon-eject                  { &:before { content: \"\\e078\"; } }\n.glyphicon-chevron-left           { &:before { content: \"\\e079\"; } }\n.glyphicon-chevron-right          { &:before { content: \"\\e080\"; } }\n.glyphicon-plus-sign              { &:before { content: \"\\e081\"; } }\n.glyphicon-minus-sign             { &:before { content: \"\\e082\"; } }\n.glyphicon-remove-sign            { &:before { content: \"\\e083\"; } }\n.glyphicon-ok-sign                { &:before { content: \"\\e084\"; } }\n.glyphicon-question-sign          { &:before { content: \"\\e085\"; } }\n.glyphicon-info-sign              { &:before { content: \"\\e086\"; } }\n.glyphicon-screenshot             { &:before { content: \"\\e087\"; } }\n.glyphicon-remove-circle          { &:before { content: \"\\e088\"; } }\n.glyphicon-ok-circle              { &:before { content: \"\\e089\"; } }\n.glyphicon-ban-circle             { &:before { content: \"\\e090\"; } }\n.glyphicon-arrow-left             { &:before { content: \"\\e091\"; } }\n.glyphicon-arrow-right            { &:before { content: \"\\e092\"; } }\n.glyphicon-arrow-up               { &:before { content: \"\\e093\"; } }\n.glyphicon-arrow-down             { &:before { content: \"\\e094\"; } }\n.glyphicon-share-alt              { &:before { content: \"\\e095\"; } }\n.glyphicon-resize-full            { &:before { content: \"\\e096\"; } }\n.glyphicon-resize-small           { &:before { content: \"\\e097\"; } }\n.glyphicon-exclamation-sign       { &:before { content: \"\\e101\"; } }\n.glyphicon-gift                   { &:before { content: \"\\e102\"; } }\n.glyphicon-leaf                   { &:before { content: \"\\e103\"; } }\n.glyphicon-fire                   { &:before { content: \"\\e104\"; } }\n.glyphicon-eye-open               { &:before { content: \"\\e105\"; } }\n.glyphicon-eye-close              { &:before { content: \"\\e106\"; } }\n.glyphicon-warning-sign           { &:before { content: \"\\e107\"; } }\n.glyphicon-plane                  { &:before { content: \"\\e108\"; } }\n.glyphicon-calendar               { &:before { content: \"\\e109\"; } }\n.glyphicon-random                 { &:before { content: \"\\e110\"; } }\n.glyphicon-comment                { &:before { content: \"\\e111\"; } }\n.glyphicon-magnet                 { &:before { content: \"\\e112\"; } }\n.glyphicon-chevron-up             { &:before { content: \"\\e113\"; } }\n.glyphicon-chevron-down           { &:before { content: \"\\e114\"; } }\n.glyphicon-retweet                { &:before { content: \"\\e115\"; } }\n.glyphicon-shopping-cart          { &:before { content: \"\\e116\"; } }\n.glyphicon-folder-close           { &:before { content: \"\\e117\"; } }\n.glyphicon-folder-open            { &:before { content: \"\\e118\"; } }\n.glyphicon-resize-vertical        { &:before { content: \"\\e119\"; } }\n.glyphicon-resize-horizontal      { &:before { content: \"\\e120\"; } }\n.glyphicon-hdd                    { &:before { content: \"\\e121\"; } }\n.glyphicon-bullhorn               { &:before { content: \"\\e122\"; } }\n.glyphicon-bell                   { &:before { content: \"\\e123\"; } }\n.glyphicon-certificate            { &:before { content: \"\\e124\"; } }\n.glyphicon-thumbs-up              { &:before { content: \"\\e125\"; } }\n.glyphicon-thumbs-down            { &:before { content: \"\\e126\"; } }\n.glyphicon-hand-right             { &:before { content: \"\\e127\"; } }\n.glyphicon-hand-left              { &:before { content: \"\\e128\"; } }\n.glyphicon-hand-up                { &:before { content: \"\\e129\"; } }\n.glyphicon-hand-down              { &:before { content: \"\\e130\"; } }\n.glyphicon-circle-arrow-right     { &:before { content: \"\\e131\"; } }\n.glyphicon-circle-arrow-left      { &:before { content: \"\\e132\"; } }\n.glyphicon-circle-arrow-up        { &:before { content: \"\\e133\"; } }\n.glyphicon-circle-arrow-down      { &:before { content: \"\\e134\"; } }\n.glyphicon-globe                  { &:before { content: \"\\e135\"; } }\n.glyphicon-wrench                 { &:before { content: \"\\e136\"; } }\n.glyphicon-tasks                  { &:before { content: \"\\e137\"; } }\n.glyphicon-filter                 { &:before { content: \"\\e138\"; } }\n.glyphicon-briefcase              { &:before { content: \"\\e139\"; } }\n.glyphicon-fullscreen             { &:before { content: \"\\e140\"; } }\n.glyphicon-dashboard              { &:before { content: \"\\e141\"; } }\n.glyphicon-paperclip              { &:before { content: \"\\e142\"; } }\n.glyphicon-heart-empty            { &:before { content: \"\\e143\"; } }\n.glyphicon-link                   { &:before { content: \"\\e144\"; } }\n.glyphicon-phone                  { &:before { content: \"\\e145\"; } }\n.glyphicon-pushpin                { &:before { content: \"\\e146\"; } }\n.glyphicon-usd                    { &:before { content: \"\\e148\"; } }\n.glyphicon-gbp                    { &:before { content: \"\\e149\"; } }\n.glyphicon-sort                   { &:before { content: \"\\e150\"; } }\n.glyphicon-sort-by-alphabet       { &:before { content: \"\\e151\"; } }\n.glyphicon-sort-by-alphabet-alt   { &:before { content: \"\\e152\"; } }\n.glyphicon-sort-by-order          { &:before { content: \"\\e153\"; } }\n.glyphicon-sort-by-order-alt      { &:before { content: \"\\e154\"; } }\n.glyphicon-sort-by-attributes     { &:before { content: \"\\e155\"; } }\n.glyphicon-sort-by-attributes-alt { &:before { content: \"\\e156\"; } }\n.glyphicon-unchecked              { &:before { content: \"\\e157\"; } }\n.glyphicon-expand                 { &:before { content: \"\\e158\"; } }\n.glyphicon-collapse-down          { &:before { content: \"\\e159\"; } }\n.glyphicon-collapse-up            { &:before { content: \"\\e160\"; } }\n.glyphicon-log-in                 { &:before { content: \"\\e161\"; } }\n.glyphicon-flash                  { &:before { content: \"\\e162\"; } }\n.glyphicon-log-out                { &:before { content: \"\\e163\"; } }\n.glyphicon-new-window             { &:before { content: \"\\e164\"; } }\n.glyphicon-record                 { &:before { content: \"\\e165\"; } }\n.glyphicon-save                   { &:before { content: \"\\e166\"; } }\n.glyphicon-open                   { &:before { content: \"\\e167\"; } }\n.glyphicon-saved                  { &:before { content: \"\\e168\"; } }\n.glyphicon-import                 { &:before { content: \"\\e169\"; } }\n.glyphicon-export                 { &:before { content: \"\\e170\"; } }\n.glyphicon-send                   { &:before { content: \"\\e171\"; } }\n.glyphicon-floppy-disk            { &:before { content: \"\\e172\"; } }\n.glyphicon-floppy-saved           { &:before { content: \"\\e173\"; } }\n.glyphicon-floppy-remove          { &:before { content: \"\\e174\"; } }\n.glyphicon-floppy-save            { &:before { content: \"\\e175\"; } }\n.glyphicon-floppy-open            { &:before { content: \"\\e176\"; } }\n.glyphicon-credit-card            { &:before { content: \"\\e177\"; } }\n.glyphicon-transfer               { &:before { content: \"\\e178\"; } }\n.glyphicon-cutlery                { &:before { content: \"\\e179\"; } }\n.glyphicon-header                 { &:before { content: \"\\e180\"; } }\n.glyphicon-compressed             { &:before { content: \"\\e181\"; } }\n.glyphicon-earphone               { &:before { content: \"\\e182\"; } }\n.glyphicon-phone-alt              { &:before { content: \"\\e183\"; } }\n.glyphicon-tower                  { &:before { content: \"\\e184\"; } }\n.glyphicon-stats                  { &:before { content: \"\\e185\"; } }\n.glyphicon-sd-video               { &:before { content: \"\\e186\"; } }\n.glyphicon-hd-video               { &:before { content: \"\\e187\"; } }\n.glyphicon-subtitles              { &:before { content: \"\\e188\"; } }\n.glyphicon-sound-stereo           { &:before { content: \"\\e189\"; } }\n.glyphicon-sound-dolby            { &:before { content: \"\\e190\"; } }\n.glyphicon-sound-5-1              { &:before { content: \"\\e191\"; } }\n.glyphicon-sound-6-1              { &:before { content: \"\\e192\"; } }\n.glyphicon-sound-7-1              { &:before { content: \"\\e193\"; } }\n.glyphicon-copyright-mark         { &:before { content: \"\\e194\"; } }\n.glyphicon-registration-mark      { &:before { content: \"\\e195\"; } }\n.glyphicon-cloud-download         { &:before { content: \"\\e197\"; } }\n.glyphicon-cloud-upload           { &:before { content: \"\\e198\"; } }\n.glyphicon-tree-conifer           { &:before { content: \"\\e199\"; } }\n.glyphicon-tree-deciduous         { &:before { content: \"\\e200\"; } }\n"
  },
  {
    "path": "themes/bootstrap-2/less/grid.less",
    "content": "//\n// Grid system\n// --------------------------------------------------\n\n\n// Container widths\n//\n// Set the container width, and override it for fixed navbars in media queries.\n\n.container {\n  .container-fixed();\n\n  @media (min-width: @screen-sm-min) {\n    width: @container-sm;\n  }\n  @media (min-width: @screen-md-min) {\n    width: @container-md;\n  }\n  @media (min-width: @screen-lg-min) {\n    width: @container-lg;\n  }\n}\n\n\n// Fluid container\n//\n// Utilizes the mixin meant for fixed width containers, but without any defined\n// width for fluid, full width layouts.\n\n.container-fluid {\n  .container-fixed();\n}\n\n\n// Row\n//\n// Rows contain and clear the floats of your columns.\n\n.row {\n  .make-row();\n}\n\n\n// Columns\n//\n// Common styles for small and large grid columns\n\n.make-grid-columns();\n\n\n// Extra small grid\n//\n// Columns, offsets, pushes, and pulls for extra small devices like\n// smartphones.\n\n.make-grid(xs);\n\n\n// Small grid\n//\n// Columns, offsets, pushes, and pulls for the small device range, from phones\n// to tablets.\n\n@media (min-width: @screen-sm-min) {\n  .make-grid(sm);\n}\n\n\n// Medium grid\n//\n// Columns, offsets, pushes, and pulls for the desktop device range.\n\n@media (min-width: @screen-md-min) {\n  .make-grid(md);\n}\n\n\n// Large grid\n//\n// Columns, offsets, pushes, and pulls for the large desktop device range.\n\n@media (min-width: @screen-lg-min) {\n  .make-grid(lg);\n}\n"
  },
  {
    "path": "themes/bootstrap-2/less/input-groups.less",
    "content": "//\n// Input groups\n// --------------------------------------------------\n\n// Base styles\n// -------------------------\n.input-group {\n  position: relative; // For dropdowns\n  display: table;\n  border-collapse: separate; // prevent input groups from inheriting border styles from table cells when placed within a table\n\n  // Undo padding and float of grid classes\n  &[class*=\"col-\"] {\n    float: none;\n    padding-left: 0;\n    padding-right: 0;\n  }\n\n  .form-control {\n    // Ensure that the input is always above the *appended* addon button for\n    // proper border colors.\n    position: relative;\n    z-index: 2;\n\n    // IE9 fubars the placeholder attribute in text inputs and the arrows on\n    // select elements in input groups. To fix it, we float the input. Details:\n    // https://github.com/twbs/bootstrap/issues/11561#issuecomment-28936855\n    float: left;\n\n    width: 100%;\n    margin-bottom: 0;\n  }\n}\n\n// Sizing options\n//\n// Remix the default form control sizing classes into new ones for easier\n// manipulation.\n\n.input-group-lg > .form-control,\n.input-group-lg > .input-group-addon,\n.input-group-lg > .input-group-btn > .btn {\n  .input-lg();\n}\n.input-group-sm > .form-control,\n.input-group-sm > .input-group-addon,\n.input-group-sm > .input-group-btn > .btn {\n  .input-sm();\n}\n\n\n// Display as table-cell\n// -------------------------\n.input-group-addon,\n.input-group-btn,\n.input-group .form-control {\n  display: table-cell;\n\n  &:not(:first-child):not(:last-child) {\n    border-radius: 0;\n  }\n}\n// Addon and addon wrapper for buttons\n.input-group-addon,\n.input-group-btn {\n  width: 1%;\n  white-space: nowrap;\n  vertical-align: middle; // Match the inputs\n}\n\n// Text input groups\n// -------------------------\n.input-group-addon {\n  padding: @padding-base-vertical @padding-base-horizontal;\n  font-size: @font-size-base;\n  font-weight: normal;\n  line-height: 1;\n  color: @input-color;\n  text-align: center;\n  background-color: @input-group-addon-bg;\n  border: 1px solid @input-group-addon-border-color;\n  border-radius: @border-radius-base;\n\n  // Sizing\n  &.input-sm {\n    padding: @padding-small-vertical @padding-small-horizontal;\n    font-size: @font-size-small;\n    border-radius: @border-radius-small;\n  }\n  &.input-lg {\n    padding: @padding-large-vertical @padding-large-horizontal;\n    font-size: @font-size-large;\n    border-radius: @border-radius-large;\n  }\n\n  // Nuke default margins from checkboxes and radios to vertically center within.\n  input[type=\"radio\"],\n  input[type=\"checkbox\"] {\n    margin-top: 0;\n  }\n}\n\n// Reset rounded corners\n.input-group .form-control:first-child,\n.input-group-addon:first-child,\n.input-group-btn:first-child > .btn,\n.input-group-btn:first-child > .btn-group > .btn,\n.input-group-btn:first-child > .dropdown-toggle,\n.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle),\n.input-group-btn:last-child > .btn-group:not(:last-child) > .btn {\n  .border-right-radius(0);\n}\n.input-group-addon:first-child {\n  border-right: 0;\n}\n.input-group .form-control:last-child,\n.input-group-addon:last-child,\n.input-group-btn:last-child > .btn,\n.input-group-btn:last-child > .btn-group > .btn,\n.input-group-btn:last-child > .dropdown-toggle,\n.input-group-btn:first-child > .btn:not(:first-child),\n.input-group-btn:first-child > .btn-group:not(:first-child) > .btn {\n  .border-left-radius(0);\n}\n.input-group-addon:last-child {\n  border-left: 0;\n}\n\n// Button input groups\n// -------------------------\n.input-group-btn {\n  position: relative;\n  // Jankily prevent input button groups from wrapping with `white-space` and\n  // `font-size` in combination with `inline-block` on buttons.\n  font-size: 0;\n  white-space: nowrap;\n\n  // Negative margin for spacing, position for bringing hovered/focused/actived\n  // element above the siblings.\n  > .btn {\n    position: relative;\n    + .btn {\n      margin-left: -1px;\n    }\n    // Bring the \"active\" button to the front\n    &:hover,\n    &:focus,\n    &:active {\n      z-index: 2;\n    }\n  }\n\n  // Negative margin to only have a 1px border between the two\n  &:first-child {\n    > .btn,\n    > .btn-group {\n      margin-right: -1px;\n    }\n  }\n  &:last-child {\n    > .btn,\n    > .btn-group {\n      margin-left: -1px;\n    }\n  }\n}\n"
  },
  {
    "path": "themes/bootstrap-2/less/jumbotron.less",
    "content": "//\n// Jumbotron\n// --------------------------------------------------\n\n\n.jumbotron {\n  padding: @jumbotron-padding;\n  margin-bottom: @jumbotron-padding;\n  color: @jumbotron-color;\n  background-color: @jumbotron-bg;\n\n  h1,\n  .h1 {\n    color: @jumbotron-heading-color;\n  }\n  p {\n    margin-bottom: (@jumbotron-padding / 2);\n    font-size: @jumbotron-font-size;\n    font-weight: 200;\n  }\n\n  > hr {\n    border-top-color: darken(@jumbotron-bg, 10%);\n  }\n\n  .container & {\n    border-radius: @border-radius-large; // Only round corners at higher resolutions if contained in a container\n  }\n\n  .container {\n    max-width: 100%;\n  }\n\n  @media screen and (min-width: @screen-sm-min) {\n    padding-top:    (@jumbotron-padding * 1.6);\n    padding-bottom: (@jumbotron-padding * 1.6);\n\n    .container & {\n      padding-left:  (@jumbotron-padding * 2);\n      padding-right: (@jumbotron-padding * 2);\n    }\n\n    h1,\n    .h1 {\n      font-size: (@font-size-base * 4.5);\n    }\n  }\n}\n"
  },
  {
    "path": "themes/bootstrap-2/less/labels.less",
    "content": "//\n// Labels\n// --------------------------------------------------\n\n.label {\n  display: inline;\n  padding: .2em .6em .3em;\n  font-size: 75%;\n  font-weight: bold;\n  line-height: 1;\n  color: @label-color;\n  text-align: center;\n  white-space: nowrap;\n  vertical-align: baseline;\n  border-radius: .25em;\n\n  // Add hover effects, but only for links\n  a& {\n    &:hover,\n    &:focus {\n      color: @label-link-hover-color;\n      text-decoration: none;\n      cursor: pointer;\n    }\n  }\n\n  // Empty labels collapse automatically (not available in IE8)\n  &:empty {\n    display: none;\n  }\n\n  // Quick fix for labels in buttons\n  .btn & {\n    position: relative;\n    top: -1px;\n  }\n}\n\n// Colors\n// Contextual variations (linked labels get darker on :hover)\n\n.label-default {\n  .label-variant(@label-default-bg);\n}\n\n.label-primary {\n  .label-variant(@label-primary-bg);\n}\n\n.label-success {\n  .label-variant(@label-success-bg);\n}\n\n.label-info {\n  .label-variant(@label-info-bg);\n}\n\n.label-warning {\n  .label-variant(@label-warning-bg);\n}\n\n.label-danger {\n  .label-variant(@label-danger-bg);\n}\n"
  },
  {
    "path": "themes/bootstrap-2/less/list-group.less",
    "content": "//\n// List groups\n// --------------------------------------------------\n\n\n// Base class\n//\n// Easily usable on <ul>, <ol>, or <div>.\n\n.list-group {\n  // No need to set list-style: none; since .list-group-item is block level\n  margin-bottom: 20px;\n  padding-left: 0; // reset padding because ul and ol\n}\n\n\n// Individual list items\n//\n// Use on `li`s or `div`s within the `.list-group` parent.\n\n.list-group-item {\n  position: relative;\n  display: block;\n  padding: 10px 15px;\n  // Place the border on the list items and negative margin up for better styling\n  margin-bottom: -1px;\n  background-color: @list-group-bg;\n  border: 1px solid @list-group-border;\n\n  // Round the first and last items\n  &:first-child {\n    .border-top-radius(@list-group-border-radius);\n  }\n  &:last-child {\n    margin-bottom: 0;\n    .border-bottom-radius(@list-group-border-radius);\n  }\n\n  // Align badges within list items\n  > .badge {\n    float: right;\n  }\n  > .badge + .badge {\n    margin-right: 5px;\n  }\n}\n\n\n// Linked list items\n//\n// Use anchor elements instead of `li`s or `div`s to create linked list items.\n// Includes an extra `.active` modifier class for showing selected items.\n\na.list-group-item {\n  color: @list-group-link-color;\n\n  .list-group-item-heading {\n    color: @list-group-link-heading-color;\n  }\n\n  // Hover state\n  &:hover,\n  &:focus {\n    text-decoration: none;\n    color: @list-group-link-hover-color;\n    background-color: @list-group-hover-bg;\n  }\n}\n\n.list-group-item {\n  // Disabled state\n  &.disabled,\n  &.disabled:hover,\n  &.disabled:focus {\n    background-color: @list-group-disabled-bg;\n    color: @list-group-disabled-color;\n\n    // Force color to inherit for custom content\n    .list-group-item-heading {\n      color: inherit;\n    }\n    .list-group-item-text {\n      color: @list-group-disabled-text-color;\n    }\n  }\n\n  // Active class on item itself, not parent\n  &.active,\n  &.active:hover,\n  &.active:focus {\n    z-index: 2; // Place active items above their siblings for proper border styling\n    color: @list-group-active-color;\n    background-color: @list-group-active-bg;\n    border-color: @list-group-active-border;\n\n    // Force color to inherit for custom content\n    .list-group-item-heading,\n    .list-group-item-heading > small,\n    .list-group-item-heading > .small {\n      color: inherit;\n    }\n    .list-group-item-text {\n      color: @list-group-active-text-color;\n    }\n  }\n}\n\n\n// Contextual variants\n//\n// Add modifier classes to change text and background color on individual items.\n// Organizationally, this must come after the `:hover` states.\n\n.list-group-item-variant(success; @state-success-bg; @state-success-text);\n.list-group-item-variant(info; @state-info-bg; @state-info-text);\n.list-group-item-variant(warning; @state-warning-bg; @state-warning-text);\n.list-group-item-variant(danger; @state-danger-bg; @state-danger-text);\n\n\n// Custom content options\n//\n// Extra classes for creating well-formatted content within `.list-group-item`s.\n\n.list-group-item-heading {\n  margin-top: 0;\n  margin-bottom: 5px;\n}\n.list-group-item-text {\n  margin-bottom: 0;\n  line-height: 1.3;\n}\n"
  },
  {
    "path": "themes/bootstrap-2/less/media.less",
    "content": "// Media objects\n// Source: http://stubbornella.org/content/?p=497\n// --------------------------------------------------\n\n\n// Common styles\n// -------------------------\n\n// Clear the floats\n.media,\n.media-body {\n  overflow: hidden;\n  zoom: 1;\n}\n\n// Proper spacing between instances of .media\n.media,\n.media .media {\n  margin-top: 15px;\n}\n.media:first-child {\n  margin-top: 0;\n}\n\n// For images and videos, set to block\n.media-object {\n  display: block;\n}\n\n// Reset margins on headings for tighter default spacing\n.media-heading {\n  margin: 0 0 5px;\n}\n\n\n// Media image alignment\n// -------------------------\n\n.media {\n  > .pull-left {\n    margin-right: 10px;\n  }\n  > .pull-right {\n    margin-left: 10px;\n  }\n}\n\n\n// Media list variation\n// -------------------------\n\n// Undo default ul/ol styles\n.media-list {\n  padding-left: 0;\n  list-style: none;\n}\n"
  },
  {
    "path": "themes/bootstrap-2/less/mixins/alerts.less",
    "content": "// Alerts\n\n.alert-variant(@background; @border; @text-color) {\n  background-color: @background;\n  border-color: @border;\n  color: @text-color;\n\n  hr {\n    border-top-color: darken(@border, 5%);\n  }\n  .alert-link {\n    color: darken(@text-color, 10%);\n  }\n}\n"
  },
  {
    "path": "themes/bootstrap-2/less/mixins/background-variant.less",
    "content": "// Contextual backgrounds\n\n.bg-variant(@color) {\n  background-color: @color;\n  a&:hover {\n    background-color: darken(@color, 10%);\n  }\n}\n"
  },
  {
    "path": "themes/bootstrap-2/less/mixins/border-radius.less",
    "content": "// Single side border-radius\n\n.border-top-radius(@radius) {\n  border-top-right-radius: @radius;\n   border-top-left-radius: @radius;\n}\n.border-right-radius(@radius) {\n  border-bottom-right-radius: @radius;\n     border-top-right-radius: @radius;\n}\n.border-bottom-radius(@radius) {\n  border-bottom-right-radius: @radius;\n   border-bottom-left-radius: @radius;\n}\n.border-left-radius(@radius) {\n  border-bottom-left-radius: @radius;\n     border-top-left-radius: @radius;\n}\n"
  },
  {
    "path": "themes/bootstrap-2/less/mixins/buttons.less",
    "content": "// Button variants\n//\n// Easily pump out default styles, as well as :hover, :focus, :active,\n// and disabled options for all buttons\n\n.button-variant(@color; @background; @border) {\n  color: @color;\n  background-color: @background;\n  border-color: @border;\n\n  &:hover,\n  &:focus,\n  &:active,\n  &.active,\n  .open > .dropdown-toggle& {\n    color: @color;\n    background-color: darken(@background, 10%);\n        border-color: darken(@border, 12%);\n  }\n  &:active,\n  &.active,\n  .open > .dropdown-toggle& {\n    background-image: none;\n  }\n  &.disabled,\n  &[disabled],\n  fieldset[disabled] & {\n    &,\n    &:hover,\n    &:focus,\n    &:active,\n    &.active {\n      background-color: @background;\n          border-color: @border;\n    }\n  }\n\n  .badge {\n    color: @background;\n    background-color: @color;\n  }\n}\n\n// Button sizes\n.button-size(@padding-vertical; @padding-horizontal; @font-size; @line-height; @border-radius) {\n  padding: @padding-vertical @padding-horizontal;\n  font-size: @font-size;\n  line-height: @line-height;\n  border-radius: @border-radius;\n}\n"
  },
  {
    "path": "themes/bootstrap-2/less/mixins/center-block.less",
    "content": "// Center-align a block level element\n\n.center-block() {\n  display: block;\n  margin-left: auto;\n  margin-right: auto;\n}\n"
  },
  {
    "path": "themes/bootstrap-2/less/mixins/clearfix.less",
    "content": "// Clearfix\n//\n// For modern browsers\n// 1. The space content is one way to avoid an Opera bug when the\n//    contenteditable attribute is included anywhere else in the document.\n//    Otherwise it causes space to appear at the top and bottom of elements\n//    that are clearfixed.\n// 2. The use of `table` rather than `block` is only necessary if using\n//    `:before` to contain the top-margins of child elements.\n//\n// Source: http://nicolasgallagher.com/micro-clearfix-hack/\n\n.clearfix() {\n  &:before,\n  &:after {\n    content: \" \"; // 1\n    display: table; // 2\n  }\n  &:after {\n    clear: both;\n  }\n}\n"
  },
  {
    "path": "themes/bootstrap-2/less/mixins/forms.less",
    "content": "// Form validation states\n//\n// Used in forms.less to generate the form validation CSS for warnings, errors,\n// and successes.\n\n.form-control-validation(@text-color: #555; @border-color: #ccc; @background-color: #f5f5f5) {\n  // Color the label and help text\n  .help-block,\n  .control-label,\n  .radio,\n  .checkbox,\n  .radio-inline,\n  .checkbox-inline  {\n    color: @text-color;\n  }\n  // Set the border and box shadow on specific inputs to match\n  .form-control {\n    border-color: @border-color;\n    .box-shadow(inset 0 1px 1px rgba(0,0,0,.075)); // Redeclare so transitions work\n    &:focus {\n      border-color: darken(@border-color, 10%);\n      @shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 6px lighten(@border-color, 20%);\n      .box-shadow(@shadow);\n    }\n  }\n  // Set validation states also for addons\n  .input-group-addon {\n    color: @text-color;\n    border-color: @border-color;\n    background-color: @background-color;\n  }\n  // Optional feedback icon\n  .form-control-feedback {\n    color: @text-color;\n  }\n}\n\n\n// Form control focus state\n//\n// Generate a customized focus state and for any input with the specified color,\n// which defaults to the `@input-border-focus` variable.\n//\n// We highly encourage you to not customize the default value, but instead use\n// this to tweak colors on an as-needed basis. This aesthetic change is based on\n// WebKit's default styles, but applicable to a wider range of browsers. Its\n// usability and accessibility should be taken into account with any change.\n//\n// Example usage: change the default blue border and shadow to white for better\n// contrast against a dark gray background.\n.form-control-focus(@color: @input-border-focus) {\n  @color-rgba: rgba(red(@color), green(@color), blue(@color), .6);\n  &:focus {\n    border-color: @color;\n    outline: 0;\n    .box-shadow(~\"inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px @{color-rgba}\");\n  }\n}\n\n// Form control sizing\n//\n// Relative text size, padding, and border-radii changes for form controls. For\n// horizontal sizing, wrap controls in the predefined grid classes. `<select>`\n// element gets special love because it's special, and that's a fact!\n.input-size(@input-height; @padding-vertical; @padding-horizontal; @font-size; @line-height; @border-radius) {\n  height: @input-height;\n  padding: @padding-vertical @padding-horizontal;\n  font-size: @font-size;\n  line-height: @line-height;\n  border-radius: @border-radius;\n\n  select& {\n    height: @input-height;\n    line-height: @input-height;\n  }\n\n  textarea&,\n  select[multiple]& {\n    height: auto;\n  }\n}\n"
  },
  {
    "path": "themes/bootstrap-2/less/mixins/gradients.less",
    "content": "// Gradients\n\n#gradient {\n\n  // Horizontal gradient, from left to right\n  //\n  // Creates two color stops, start and end, by specifying a color and position for each color stop.\n  // Color stops are not available in IE9 and below.\n  .horizontal(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {\n    background-image: -webkit-linear-gradient(left, @start-color @start-percent, @end-color @end-percent); // Safari 5.1-6, Chrome 10+\n    background-image: -o-linear-gradient(left, @start-color @start-percent, @end-color @end-percent); // Opera 12\n    background-image: linear-gradient(to right, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n    background-repeat: repeat-x;\n    filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)\",argb(@start-color),argb(@end-color))); // IE9 and down\n  }\n\n  // Vertical gradient, from top to bottom\n  //\n  // Creates two color stops, start and end, by specifying a color and position for each color stop.\n  // Color stops are not available in IE9 and below.\n  .vertical(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {\n    background-image: -webkit-linear-gradient(top, @start-color @start-percent, @end-color @end-percent);  // Safari 5.1-6, Chrome 10+\n    background-image: -o-linear-gradient(top, @start-color @start-percent, @end-color @end-percent);  // Opera 12\n    background-image: linear-gradient(to bottom, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n    background-repeat: repeat-x;\n    filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)\",argb(@start-color),argb(@end-color))); // IE9 and down\n  }\n\n  .directional(@start-color: #555; @end-color: #333; @deg: 45deg) {\n    background-repeat: repeat-x;\n    background-image: -webkit-linear-gradient(@deg, @start-color, @end-color); // Safari 5.1-6, Chrome 10+\n    background-image: -o-linear-gradient(@deg, @start-color, @end-color); // Opera 12\n    background-image: linear-gradient(@deg, @start-color, @end-color); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n  }\n  .horizontal-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {\n    background-image: -webkit-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color);\n    background-image: -o-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color);\n    background-image: linear-gradient(to right, @start-color, @mid-color @color-stop, @end-color);\n    background-repeat: no-repeat;\n    filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)\",argb(@start-color),argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback\n  }\n  .vertical-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {\n    background-image: -webkit-linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n    background-image: -o-linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n    background-image: linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n    background-repeat: no-repeat;\n    filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)\",argb(@start-color),argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback\n  }\n  .radial(@inner-color: #555; @outer-color: #333) {\n    background-image: -webkit-radial-gradient(circle, @inner-color, @outer-color);\n    background-image: radial-gradient(circle, @inner-color, @outer-color);\n    background-repeat: no-repeat;\n  }\n  .striped(@color: rgba(255,255,255,.15); @angle: 45deg) {\n    background-image: -webkit-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n    background-image: -o-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n    background-image: linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n  }\n}\n"
  },
  {
    "path": "themes/bootstrap-2/less/mixins/grid-framework.less",
    "content": "// Framework grid generation\n//\n// Used only by Bootstrap to generate the correct number of grid classes given\n// any value of `@grid-columns`.\n\n.make-grid-columns() {\n  // Common styles for all sizes of grid columns, widths 1-12\n  .col(@index) when (@index = 1) { // initial\n    @item: ~\".col-xs-@{index}, .col-sm-@{index}, .col-md-@{index}, .col-lg-@{index}\";\n    .col((@index + 1), @item);\n  }\n  .col(@index, @list) when (@index =< @grid-columns) { // general; \"=<\" isn't a typo\n    @item: ~\".col-xs-@{index}, .col-sm-@{index}, .col-md-@{index}, .col-lg-@{index}\";\n    .col((@index + 1), ~\"@{list}, @{item}\");\n  }\n  .col(@index, @list) when (@index > @grid-columns) { // terminal\n    @{list} {\n      position: relative;\n      // Prevent columns from collapsing when empty\n      min-height: 1px;\n      // Inner gutter via padding\n      padding-left:  (@grid-gutter-width / 2);\n      padding-right: (@grid-gutter-width / 2);\n    }\n  }\n  .col(1); // kickstart it\n}\n\n.float-grid-columns(@class) {\n  .col(@index) when (@index = 1) { // initial\n    @item: ~\".col-@{class}-@{index}\";\n    .col((@index + 1), @item);\n  }\n  .col(@index, @list) when (@index =< @grid-columns) { // general\n    @item: ~\".col-@{class}-@{index}\";\n    .col((@index + 1), ~\"@{list}, @{item}\");\n  }\n  .col(@index, @list) when (@index > @grid-columns) { // terminal\n    @{list} {\n      float: left;\n    }\n  }\n  .col(1); // kickstart it\n}\n\n.calc-grid-column(@index, @class, @type) when (@type = width) and (@index > 0) {\n  .col-@{class}-@{index} {\n    width: percentage((@index / @grid-columns));\n  }\n}\n.calc-grid-column(@index, @class, @type) when (@type = push) and (@index > 0) {\n  .col-@{class}-push-@{index} {\n    left: percentage((@index / @grid-columns));\n  }\n}\n.calc-grid-column(@index, @class, @type) when (@type = push) and (@index = 0) {\n  .col-@{class}-push-0 {\n    left: auto;\n  }\n}\n.calc-grid-column(@index, @class, @type) when (@type = pull) and (@index > 0) {\n  .col-@{class}-pull-@{index} {\n    right: percentage((@index / @grid-columns));\n  }\n}\n.calc-grid-column(@index, @class, @type) when (@type = pull) and (@index = 0) {\n  .col-@{class}-pull-0 {\n    right: auto;\n  }\n}\n.calc-grid-column(@index, @class, @type) when (@type = offset) {\n  .col-@{class}-offset-@{index} {\n    margin-left: percentage((@index / @grid-columns));\n  }\n}\n\n// Basic looping in LESS\n.loop-grid-columns(@index, @class, @type) when (@index >= 0) {\n  .calc-grid-column(@index, @class, @type);\n  // next iteration\n  .loop-grid-columns((@index - 1), @class, @type);\n}\n\n// Create grid for specific class\n.make-grid(@class) {\n  .float-grid-columns(@class);\n  .loop-grid-columns(@grid-columns, @class, width);\n  .loop-grid-columns(@grid-columns, @class, pull);\n  .loop-grid-columns(@grid-columns, @class, push);\n  .loop-grid-columns(@grid-columns, @class, offset);\n}\n"
  },
  {
    "path": "themes/bootstrap-2/less/mixins/grid.less",
    "content": "// Grid system\n//\n// Generate semantic grid columns with these mixins.\n\n// Centered container element\n.container-fixed(@gutter: @grid-gutter-width) {\n  margin-right: auto;\n  margin-left: auto;\n  padding-left:  (@gutter / 2);\n  padding-right: (@gutter / 2);\n  &:extend(.clearfix all);\n}\n\n// Creates a wrapper for a series of columns\n.make-row(@gutter: @grid-gutter-width) {\n  margin-left:  (@gutter / -2);\n  margin-right: (@gutter / -2);\n  &:extend(.clearfix all);\n}\n\n// Generate the extra small columns\n.make-xs-column(@columns; @gutter: @grid-gutter-width) {\n  position: relative;\n  float: left;\n  width: percentage((@columns / @grid-columns));\n  min-height: 1px;\n  padding-left:  (@gutter / 2);\n  padding-right: (@gutter / 2);\n}\n.make-xs-column-offset(@columns) {\n  margin-left: percentage((@columns / @grid-columns));\n}\n.make-xs-column-push(@columns) {\n  left: percentage((@columns / @grid-columns));\n}\n.make-xs-column-pull(@columns) {\n  right: percentage((@columns / @grid-columns));\n}\n\n// Generate the small columns\n.make-sm-column(@columns; @gutter: @grid-gutter-width) {\n  position: relative;\n  min-height: 1px;\n  padding-left:  (@gutter / 2);\n  padding-right: (@gutter / 2);\n\n  @media (min-width: @screen-sm-min) {\n    float: left;\n    width: percentage((@columns / @grid-columns));\n  }\n}\n.make-sm-column-offset(@columns) {\n  @media (min-width: @screen-sm-min) {\n    margin-left: percentage((@columns / @grid-columns));\n  }\n}\n.make-sm-column-push(@columns) {\n  @media (min-width: @screen-sm-min) {\n    left: percentage((@columns / @grid-columns));\n  }\n}\n.make-sm-column-pull(@columns) {\n  @media (min-width: @screen-sm-min) {\n    right: percentage((@columns / @grid-columns));\n  }\n}\n\n// Generate the medium columns\n.make-md-column(@columns; @gutter: @grid-gutter-width) {\n  position: relative;\n  min-height: 1px;\n  padding-left:  (@gutter / 2);\n  padding-right: (@gutter / 2);\n\n  @media (min-width: @screen-md-min) {\n    float: left;\n    width: percentage((@columns / @grid-columns));\n  }\n}\n.make-md-column-offset(@columns) {\n  @media (min-width: @screen-md-min) {\n    margin-left: percentage((@columns / @grid-columns));\n  }\n}\n.make-md-column-push(@columns) {\n  @media (min-width: @screen-md-min) {\n    left: percentage((@columns / @grid-columns));\n  }\n}\n.make-md-column-pull(@columns) {\n  @media (min-width: @screen-md-min) {\n    right: percentage((@columns / @grid-columns));\n  }\n}\n\n// Generate the large columns\n.make-lg-column(@columns; @gutter: @grid-gutter-width) {\n  position: relative;\n  min-height: 1px;\n  padding-left:  (@gutter / 2);\n  padding-right: (@gutter / 2);\n\n  @media (min-width: @screen-lg-min) {\n    float: left;\n    width: percentage((@columns / @grid-columns));\n  }\n}\n.make-lg-column-offset(@columns) {\n  @media (min-width: @screen-lg-min) {\n    margin-left: percentage((@columns / @grid-columns));\n  }\n}\n.make-lg-column-push(@columns) {\n  @media (min-width: @screen-lg-min) {\n    left: percentage((@columns / @grid-columns));\n  }\n}\n.make-lg-column-pull(@columns) {\n  @media (min-width: @screen-lg-min) {\n    right: percentage((@columns / @grid-columns));\n  }\n}\n"
  },
  {
    "path": "themes/bootstrap-2/less/mixins/hide-text.less",
    "content": "// CSS image replacement\n//\n// Heads up! v3 launched with with only `.hide-text()`, but per our pattern for\n// mixins being reused as classes with the same name, this doesn't hold up. As\n// of v3.0.1 we have added `.text-hide()` and deprecated `.hide-text()`.\n//\n// Source: https://github.com/h5bp/html5-boilerplate/commit/aa0396eae757\n\n// Deprecated as of v3.0.1 (will be removed in v4)\n.hide-text() {\n  font: ~\"0/0\" a;\n  color: transparent;\n  text-shadow: none;\n  background-color: transparent;\n  border: 0;\n}\n\n// New mixin to use as of v3.0.1\n.text-hide() {\n  .hide-text();\n}\n"
  },
  {
    "path": "themes/bootstrap-2/less/mixins/image.less",
    "content": "// Image Mixins\n// - Responsive image\n// - Retina image\n\n\n// Responsive image\n//\n// Keep images from scaling beyond the width of their parents.\n.img-responsive(@display: block) {\n  display: @display;\n  width: 100% \\9; // Force IE10 and below to size SVG images correctly\n  max-width: 100%; // Part 1: Set a maximum relative to the parent\n  height: auto; // Part 2: Scale the height according to the width, otherwise you get stretching\n}\n\n\n// Retina image\n//\n// Short retina mixin for setting background-image and -size. Note that the\n// spelling of `min--moz-device-pixel-ratio` is intentional.\n.img-retina(@file-1x; @file-2x; @width-1x; @height-1x) {\n  background-image: url(\"@{file-1x}\");\n\n  @media\n  only screen and (-webkit-min-device-pixel-ratio: 2),\n  only screen and (   min--moz-device-pixel-ratio: 2),\n  only screen and (     -o-min-device-pixel-ratio: 2/1),\n  only screen and (        min-device-pixel-ratio: 2),\n  only screen and (                min-resolution: 192dpi),\n  only screen and (                min-resolution: 2dppx) {\n    background-image: url(\"@{file-2x}\");\n    background-size: @width-1x @height-1x;\n  }\n}\n"
  },
  {
    "path": "themes/bootstrap-2/less/mixins/labels.less",
    "content": "// Labels\n\n.label-variant(@color) {\n  background-color: @color;\n  \n  &[href] {\n    &:hover,\n    &:focus {\n      background-color: darken(@color, 10%);\n    }\n  }\n}\n"
  },
  {
    "path": "themes/bootstrap-2/less/mixins/list-group.less",
    "content": "// List Groups\n\n.list-group-item-variant(@state; @background; @color) {\n  .list-group-item-@{state} {\n    color: @color;\n    background-color: @background;\n\n    a& {\n      color: @color;\n\n      .list-group-item-heading {\n        color: inherit;\n      }\n\n      &:hover,\n      &:focus {\n        color: @color;\n        background-color: darken(@background, 5%);\n      }\n      &.active,\n      &.active:hover,\n      &.active:focus {\n        color: #fff;\n        background-color: @color;\n        border-color: @color;\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "themes/bootstrap-2/less/mixins/nav-divider.less",
    "content": "// Horizontal dividers\n//\n// Dividers (basically an hr) within dropdowns and nav lists\n\n.nav-divider(@color: #e5e5e5) {\n  height: 1px;\n  margin: ((@line-height-computed / 2) - 1) 0;\n  overflow: hidden;\n  background-color: @color;\n}\n"
  },
  {
    "path": "themes/bootstrap-2/less/mixins/nav-vertical-align.less",
    "content": "// Navbar vertical align\n//\n// Vertically center elements in the navbar.\n// Example: an element has a height of 30px, so write out `.navbar-vertical-align(30px);` to calculate the appropriate top margin.\n\n.navbar-vertical-align(@element-height) {\n  margin-top: ((@navbar-height - @element-height) / 2);\n  margin-bottom: ((@navbar-height - @element-height) / 2);\n}\n"
  },
  {
    "path": "themes/bootstrap-2/less/mixins/opacity.less",
    "content": "// Opacity\n\n.opacity(@opacity) {\n  opacity: @opacity;\n  // IE8 filter\n  @opacity-ie: (@opacity * 100);\n  filter: ~\"alpha(opacity=@{opacity-ie})\";\n}\n"
  },
  {
    "path": "themes/bootstrap-2/less/mixins/pagination.less",
    "content": "// Pagination\n\n.pagination-size(@padding-vertical; @padding-horizontal; @font-size; @border-radius) {\n  > li {\n    > a,\n    > span {\n      padding: @padding-vertical @padding-horizontal;\n      font-size: @font-size;\n    }\n    &:first-child {\n      > a,\n      > span {\n        .border-left-radius(@border-radius);\n      }\n    }\n    &:last-child {\n      > a,\n      > span {\n        .border-right-radius(@border-radius);\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "themes/bootstrap-2/less/mixins/panels.less",
    "content": "// Panels\n\n.panel-variant(@border; @heading-text-color; @heading-bg-color; @heading-border) {\n  border-color: @border;\n\n  & > .panel-heading {\n    color: @heading-text-color;\n    background-color: @heading-bg-color;\n    border-color: @heading-border;\n\n    + .panel-collapse > .panel-body {\n      border-top-color: @border;\n    }\n    .badge {\n      color: @heading-bg-color;\n      background-color: @heading-text-color;\n    }\n  }\n  & > .panel-footer {\n    + .panel-collapse > .panel-body {\n      border-bottom-color: @border;\n    }\n  }\n}\n"
  },
  {
    "path": "themes/bootstrap-2/less/mixins/progress-bar.less",
    "content": "// Progress bars\n\n.progress-bar-variant(@color) {\n  background-color: @color;\n\n  // Deprecated parent class requirement as of v3.2.0\n  .progress-striped & {\n    #gradient > .striped();\n  }\n}\n"
  },
  {
    "path": "themes/bootstrap-2/less/mixins/reset-filter.less",
    "content": "// Reset filters for IE\n//\n// When you need to remove a gradient background, do not forget to use this to reset\n// the IE filter for IE9 and below.\n\n.reset-filter() {\n  filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(enabled = false)\"));\n}\n"
  },
  {
    "path": "themes/bootstrap-2/less/mixins/resize.less",
    "content": "// Resize anything\n\n.resizable(@direction) {\n  resize: @direction; // Options: horizontal, vertical, both\n  overflow: auto; // Per CSS3 UI, `resize` only applies when `overflow` isn't `visible`\n}\n"
  },
  {
    "path": "themes/bootstrap-2/less/mixins/responsive-visibility.less",
    "content": "// Responsive utilities\n\n//\n// More easily include all the states for responsive-utilities.less.\n.responsive-visibility() {\n  display: block !important;\n  table&  { display: table; }\n  tr&     { display: table-row !important; }\n  th&,\n  td&     { display: table-cell !important; }\n}\n\n.responsive-invisibility() {\n  display: none !important;\n}\n"
  },
  {
    "path": "themes/bootstrap-2/less/mixins/size.less",
    "content": "// Sizing shortcuts\n\n.size(@width; @height) {\n  width: @width;\n  height: @height;\n}\n\n.square(@size) {\n  .size(@size; @size);\n}\n"
  },
  {
    "path": "themes/bootstrap-2/less/mixins/tab-focus.less",
    "content": "// WebKit-style focus\n\n.tab-focus() {\n  // Default\n  outline: thin dotted;\n  // WebKit\n  outline: 5px auto -webkit-focus-ring-color;\n  outline-offset: -2px;\n}\n"
  },
  {
    "path": "themes/bootstrap-2/less/mixins/table-row.less",
    "content": "// Tables\n\n.table-row-variant(@state; @background) {\n  // Exact selectors below required to override `.table-striped` and prevent\n  // inheritance to nested tables.\n  .table > thead > tr,\n  .table > tbody > tr,\n  .table > tfoot > tr {\n    > td.@{state},\n    > th.@{state},\n    &.@{state} > td,\n    &.@{state} > th {\n      background-color: @background;\n    }\n  }\n\n  // Hover states for `.table-hover`\n  // Note: this is not available for cells or rows within `thead` or `tfoot`.\n  .table-hover > tbody > tr {\n    > td.@{state}:hover,\n    > th.@{state}:hover,\n    &.@{state}:hover > td,\n    &:hover > .@{state},\n    &.@{state}:hover > th {\n      background-color: darken(@background, 5%);\n    }\n  }\n}\n"
  },
  {
    "path": "themes/bootstrap-2/less/mixins/text-emphasis.less",
    "content": "// Typography\n\n.text-emphasis-variant(@color) {\n  color: @color;\n  a&:hover {\n    color: darken(@color, 10%);\n  }\n}\n"
  },
  {
    "path": "themes/bootstrap-2/less/mixins/text-overflow.less",
    "content": "// Text overflow\n// Requires inline-block or block for proper styling\n\n.text-overflow() {\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n}\n"
  },
  {
    "path": "themes/bootstrap-2/less/mixins/vendor-prefixes.less",
    "content": "// Vendor Prefixes\n//\n// All vendor mixins are deprecated as of v3.2.0 due to the introduction of\n// Autoprefixer in our Gruntfile. They will be removed in v4.\n\n// - Animations\n// - Backface visibility\n// - Box shadow\n// - Box sizing\n// - Content columns\n// - Hyphens\n// - Placeholder text\n// - Transformations\n// - Transitions\n// - User Select\n\n\n// Animations\n.animation(@animation) {\n  -webkit-animation: @animation;\n       -o-animation: @animation;\n          animation: @animation;\n}\n.animation-name(@name) {\n  -webkit-animation-name: @name;\n          animation-name: @name;\n}\n.animation-duration(@duration) {\n  -webkit-animation-duration: @duration;\n          animation-duration: @duration;\n}\n.animation-timing-function(@timing-function) {\n  -webkit-animation-timing-function: @timing-function;\n          animation-timing-function: @timing-function;\n}\n.animation-delay(@delay) {\n  -webkit-animation-delay: @delay;\n          animation-delay: @delay;\n}\n.animation-iteration-count(@iteration-count) {\n  -webkit-animation-iteration-count: @iteration-count;\n          animation-iteration-count: @iteration-count;\n}\n.animation-direction(@direction) {\n  -webkit-animation-direction: @direction;\n          animation-direction: @direction;\n}\n.animation-fill-mode(@fill-mode) {\n  -webkit-animation-fill-mode: @fill-mode;\n          animation-fill-mode: @fill-mode;\n}\n\n// Backface visibility\n// Prevent browsers from flickering when using CSS 3D transforms.\n// Default value is `visible`, but can be changed to `hidden`\n\n.backface-visibility(@visibility){\n  -webkit-backface-visibility: @visibility;\n     -moz-backface-visibility: @visibility;\n          backface-visibility: @visibility;\n}\n\n// Drop shadows\n//\n// Note: Deprecated `.box-shadow()` as of v3.1.0 since all of Bootstrap's\n// supported browsers that have box shadow capabilities now support it.\n\n.box-shadow(@shadow) {\n  -webkit-box-shadow: @shadow; // iOS <4.3 & Android <4.1\n          box-shadow: @shadow;\n}\n\n// Box sizing\n.box-sizing(@boxmodel) {\n  -webkit-box-sizing: @boxmodel;\n     -moz-box-sizing: @boxmodel;\n          box-sizing: @boxmodel;\n}\n\n// CSS3 Content Columns\n.content-columns(@column-count; @column-gap: @grid-gutter-width) {\n  -webkit-column-count: @column-count;\n     -moz-column-count: @column-count;\n          column-count: @column-count;\n  -webkit-column-gap: @column-gap;\n     -moz-column-gap: @column-gap;\n          column-gap: @column-gap;\n}\n\n// Optional hyphenation\n.hyphens(@mode: auto) {\n  word-wrap: break-word;\n  -webkit-hyphens: @mode;\n     -moz-hyphens: @mode;\n      -ms-hyphens: @mode; // IE10+\n       -o-hyphens: @mode;\n          hyphens: @mode;\n}\n\n// Placeholder text\n.placeholder(@color: @input-color-placeholder) {\n  &::-moz-placeholder           { color: @color;   // Firefox\n                                  opacity: 1; } // See https://github.com/twbs/bootstrap/pull/11526\n  &:-ms-input-placeholder       { color: @color; } // Internet Explorer 10+\n  &::-webkit-input-placeholder  { color: @color; } // Safari and Chrome\n}\n\n// Transformations\n.scale(@ratio) {\n  -webkit-transform: scale(@ratio);\n      -ms-transform: scale(@ratio); // IE9 only\n       -o-transform: scale(@ratio);\n          transform: scale(@ratio);\n}\n.scale(@ratioX; @ratioY) {\n  -webkit-transform: scale(@ratioX, @ratioY);\n      -ms-transform: scale(@ratioX, @ratioY); // IE9 only\n       -o-transform: scale(@ratioX, @ratioY);\n          transform: scale(@ratioX, @ratioY);\n}\n.scaleX(@ratio) {\n  -webkit-transform: scaleX(@ratio);\n      -ms-transform: scaleX(@ratio); // IE9 only\n       -o-transform: scaleX(@ratio);\n          transform: scaleX(@ratio);\n}\n.scaleY(@ratio) {\n  -webkit-transform: scaleY(@ratio);\n      -ms-transform: scaleY(@ratio); // IE9 only\n       -o-transform: scaleY(@ratio);\n          transform: scaleY(@ratio);\n}\n.skew(@x; @y) {\n  -webkit-transform: skewX(@x) skewY(@y);\n      -ms-transform: skewX(@x) skewY(@y); // See https://github.com/twbs/bootstrap/issues/4885; IE9+\n       -o-transform: skewX(@x) skewY(@y);\n          transform: skewX(@x) skewY(@y);\n}\n.translate(@x; @y) {\n  -webkit-transform: translate(@x, @y);\n      -ms-transform: translate(@x, @y); // IE9 only\n       -o-transform: translate(@x, @y);\n          transform: translate(@x, @y);\n}\n.translate3d(@x; @y; @z) {\n  -webkit-transform: translate3d(@x, @y, @z);\n          transform: translate3d(@x, @y, @z);\n}\n.rotate(@degrees) {\n  -webkit-transform: rotate(@degrees);\n      -ms-transform: rotate(@degrees); // IE9 only\n       -o-transform: rotate(@degrees);\n          transform: rotate(@degrees);\n}\n.rotateX(@degrees) {\n  -webkit-transform: rotateX(@degrees);\n      -ms-transform: rotateX(@degrees); // IE9 only\n       -o-transform: rotateX(@degrees);\n          transform: rotateX(@degrees);\n}\n.rotateY(@degrees) {\n  -webkit-transform: rotateY(@degrees);\n      -ms-transform: rotateY(@degrees); // IE9 only\n       -o-transform: rotateY(@degrees);\n          transform: rotateY(@degrees);\n}\n.perspective(@perspective) {\n  -webkit-perspective: @perspective;\n     -moz-perspective: @perspective;\n          perspective: @perspective;\n}\n.perspective-origin(@perspective) {\n  -webkit-perspective-origin: @perspective;\n     -moz-perspective-origin: @perspective;\n          perspective-origin: @perspective;\n}\n.transform-origin(@origin) {\n  -webkit-transform-origin: @origin;\n     -moz-transform-origin: @origin;\n      -ms-transform-origin: @origin; // IE9 only\n          transform-origin: @origin;\n}\n\n\n// Transitions\n\n.transition(@transition) {\n  -webkit-transition: @transition;\n       -o-transition: @transition;\n          transition: @transition;\n}\n.transition-property(@transition-property) {\n  -webkit-transition-property: @transition-property;\n          transition-property: @transition-property;\n}\n.transition-delay(@transition-delay) {\n  -webkit-transition-delay: @transition-delay;\n          transition-delay: @transition-delay;\n}\n.transition-duration(@transition-duration) {\n  -webkit-transition-duration: @transition-duration;\n          transition-duration: @transition-duration;\n}\n.transition-timing-function(@timing-function) {\n  -webkit-transition-timing-function: @timing-function;\n          transition-timing-function: @timing-function;\n}\n.transition-transform(@transition) {\n  -webkit-transition: -webkit-transform @transition;\n     -moz-transition: -moz-transform @transition;\n       -o-transition: -o-transform @transition;\n          transition: transform @transition;\n}\n\n\n// User select\n// For selecting text on the page\n\n.user-select(@select) {\n  -webkit-user-select: @select;\n     -moz-user-select: @select;\n      -ms-user-select: @select; // IE10+\n          user-select: @select;\n}\n"
  },
  {
    "path": "themes/bootstrap-2/less/mixins.less",
    "content": "// Mixins\n// --------------------------------------------------\n\n// Utilities\n@import \"mixins/hide-text.less\";\n@import \"mixins/opacity.less\";\n@import \"mixins/image.less\";\n@import \"mixins/labels.less\";\n@import \"mixins/reset-filter.less\";\n@import \"mixins/resize.less\";\n@import \"mixins/responsive-visibility.less\";\n@import \"mixins/size.less\";\n@import \"mixins/tab-focus.less\";\n@import \"mixins/text-emphasis.less\";\n@import \"mixins/text-overflow.less\";\n@import \"mixins/vendor-prefixes.less\";\n\n// Components\n@import \"mixins/alerts.less\";\n@import \"mixins/buttons.less\";\n@import \"mixins/panels.less\";\n@import \"mixins/pagination.less\";\n@import \"mixins/list-group.less\";\n@import \"mixins/nav-divider.less\";\n@import \"mixins/forms.less\";\n@import \"mixins/progress-bar.less\";\n@import \"mixins/table-row.less\";\n\n// Skins\n@import \"mixins/background-variant.less\";\n@import \"mixins/border-radius.less\";\n@import \"mixins/gradients.less\";\n\n// Layout\n@import \"mixins/clearfix.less\";\n@import \"mixins/center-block.less\";\n@import \"mixins/nav-vertical-align.less\";\n@import \"mixins/grid-framework.less\";\n@import \"mixins/grid.less\";\n"
  },
  {
    "path": "themes/bootstrap-2/less/modals.less",
    "content": "//\n// Modals\n// --------------------------------------------------\n\n// .modal-open      - body class for killing the scroll\n// .modal           - container to scroll within\n// .modal-dialog    - positioning shell for the actual modal\n// .modal-content   - actual modal w/ bg and corners and shit\n\n// Kill the scroll on the body\n.modal-open {\n  overflow: hidden;\n}\n\n// Container that the modal scrolls within\n.modal {\n  display: none;\n  overflow: hidden;\n  position: fixed;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: @zindex-modal;\n  -webkit-overflow-scrolling: touch;\n\n  // Prevent Chrome on Windows from adding a focus outline. For details, see\n  // https://github.com/twbs/bootstrap/pull/10951.\n  outline: 0;\n\n  // When fading in the modal, animate it to slide down\n  &.fade .modal-dialog {\n    .translate3d(0, -25%, 0);\n    .transition-transform(~\"0.3s ease-out\");\n  }\n  &.in .modal-dialog { .translate3d(0, 0, 0) }\n}\n.modal-open .modal {\n  overflow-x: hidden;\n  overflow-y: auto;\n}\n\n// Shell div to position the modal with bottom padding\n.modal-dialog {\n  position: relative;\n  width: auto;\n  margin: 10px;\n}\n\n// Actual modal\n.modal-content {\n  position: relative;\n  background-color: @modal-content-bg;\n  border: 1px solid @modal-content-fallback-border-color; //old browsers fallback (ie8 etc)\n  border: 1px solid @modal-content-border-color;\n  border-radius: @border-radius-large;\n  .box-shadow(0 3px 9px rgba(0,0,0,.5));\n  background-clip: padding-box;\n  // Remove focus outline from opened modal\n  outline: 0;\n}\n\n// Modal background\n.modal-backdrop {\n  position: fixed;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: @zindex-modal-background;\n  background-color: @modal-backdrop-bg;\n  // Fade for backdrop\n  &.fade { .opacity(0); }\n  &.in { .opacity(@modal-backdrop-opacity); }\n}\n\n// Modal header\n// Top section of the modal w/ title and dismiss\n.modal-header {\n  padding: @modal-title-padding;\n  border-bottom: 1px solid @modal-header-border-color;\n  min-height: (@modal-title-padding + @modal-title-line-height);\n}\n// Close icon\n.modal-header .close {\n  margin-top: -2px;\n}\n\n// Title text within header\n.modal-title {\n  margin: 0;\n  line-height: @modal-title-line-height;\n}\n\n// Modal body\n// Where all modal content resides (sibling of .modal-header and .modal-footer)\n.modal-body {\n  position: relative;\n  padding: @modal-inner-padding;\n}\n\n// Footer (for actions)\n.modal-footer {\n  padding: @modal-inner-padding;\n  text-align: right; // right align buttons\n  border-top: 1px solid @modal-footer-border-color;\n  &:extend(.clearfix all); // clear it in case folks use .pull-* classes on buttons\n\n  // Properly space out buttons\n  .btn + .btn {\n    margin-left: 5px;\n    margin-bottom: 0; // account for input[type=\"submit\"] which gets the bottom margin like all other inputs\n  }\n  // but override that for button groups\n  .btn-group .btn + .btn {\n    margin-left: -1px;\n  }\n  // and override it for block buttons as well\n  .btn-block + .btn-block {\n    margin-left: 0;\n  }\n}\n\n// Measure scrollbar width for padding body during modal show/hide\n.modal-scrollbar-measure {\n  position: absolute;\n  top: -9999px;\n  width: 50px;\n  height: 50px;\n  overflow: scroll;\n}\n\n// Scale up the modal\n@media (min-width: @screen-sm-min) {\n  // Automatically set modal's width for larger viewports\n  .modal-dialog {\n    width: @modal-md;\n    margin: 30px auto;\n  }\n  .modal-content {\n    .box-shadow(0 5px 15px rgba(0,0,0,.5));\n  }\n\n  // Modal sizes\n  .modal-sm { width: @modal-sm; }\n}\n\n@media (min-width: @screen-md-min) {\n  .modal-lg { width: @modal-lg; }\n}\n"
  },
  {
    "path": "themes/bootstrap-2/less/navbar.less",
    "content": "//\n// Navbars\n// --------------------------------------------------\n\n\n// Wrapper and base class\n//\n// Provide a static navbar from which we expand to create full-width, fixed, and\n// other navbar variations.\n\n.navbar {\n  position: relative;\n  min-height: @navbar-height; // Ensure a navbar always shows (e.g., without a .navbar-brand in collapsed mode)\n  margin-bottom: @navbar-margin-bottom;\n  border: 1px solid transparent;\n\n  // Prevent floats from breaking the navbar\n  &:extend(.clearfix all);\n\n  @media (min-width: @grid-float-breakpoint) {\n    border-radius: @navbar-border-radius;\n  }\n}\n\n\n// Navbar heading\n//\n// Groups `.navbar-brand` and `.navbar-toggle` into a single component for easy\n// styling of responsive aspects.\n\n.navbar-header {\n  &:extend(.clearfix all);\n\n  @media (min-width: @grid-float-breakpoint) {\n    float: left;\n  }\n}\n\n\n// Navbar collapse (body)\n//\n// Group your navbar content into this for easy collapsing and expanding across\n// various device sizes. By default, this content is collapsed when <768px, but\n// will expand past that for a horizontal display.\n//\n// To start (on mobile devices) the navbar links, forms, and buttons are stacked\n// vertically and include a `max-height` to overflow in case you have too much\n// content for the user's viewport.\n\n.navbar-collapse {\n  overflow-x: visible;\n  padding-right: @navbar-padding-horizontal;\n  padding-left:  @navbar-padding-horizontal;\n  border-top: 1px solid transparent;\n  box-shadow: inset 0 1px 0 rgba(255,255,255,.1);\n  &:extend(.clearfix all);\n  -webkit-overflow-scrolling: touch;\n\n  &.in {\n    overflow-y: auto;\n  }\n\n  @media (min-width: @grid-float-breakpoint) {\n    width: auto;\n    border-top: 0;\n    box-shadow: none;\n\n    &.collapse {\n      display: block !important;\n      height: auto !important;\n      padding-bottom: 0; // Override default setting\n      overflow: visible !important;\n    }\n\n    &.in {\n      overflow-y: visible;\n    }\n\n    // Undo the collapse side padding for navbars with containers to ensure\n    // alignment of right-aligned contents.\n    .navbar-fixed-top &,\n    .navbar-static-top &,\n    .navbar-fixed-bottom & {\n      padding-left: 0;\n      padding-right: 0;\n    }\n  }\n}\n\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n  .navbar-collapse {\n    max-height: @navbar-collapse-max-height;\n\n    @media (max-width: @screen-xs-min) and (orientation: landscape) {\n      max-height: 200px;\n    }\n  }\n}\n\n\n// Both navbar header and collapse\n//\n// When a container is present, change the behavior of the header and collapse.\n\n.container,\n.container-fluid {\n  > .navbar-header,\n  > .navbar-collapse {\n    margin-right: -@navbar-padding-horizontal;\n    margin-left:  -@navbar-padding-horizontal;\n\n    @media (min-width: @grid-float-breakpoint) {\n      margin-right: 0;\n      margin-left:  0;\n    }\n  }\n}\n\n\n//\n// Navbar alignment options\n//\n// Display the navbar across the entirety of the page or fixed it to the top or\n// bottom of the page.\n\n// Static top (unfixed, but 100% wide) navbar\n.navbar-static-top {\n  z-index: @zindex-navbar;\n  border-width: 0 0 1px;\n\n  @media (min-width: @grid-float-breakpoint) {\n    border-radius: 0;\n  }\n}\n\n// Fix the top/bottom navbars when screen real estate supports it\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n  position: fixed;\n  right: 0;\n  left: 0;\n  z-index: @zindex-navbar-fixed;\n  .translate3d(0, 0, 0);\n\n  // Undo the rounded corners\n  @media (min-width: @grid-float-breakpoint) {\n    border-radius: 0;\n  }\n}\n.navbar-fixed-top {\n  top: 0;\n  border-width: 0 0 1px;\n}\n.navbar-fixed-bottom {\n  bottom: 0;\n  margin-bottom: 0; // override .navbar defaults\n  border-width: 1px 0 0;\n}\n\n\n// Brand/project name\n\n.navbar-brand {\n  float: left;\n  padding: @navbar-padding-vertical @navbar-padding-horizontal;\n  font-size: @font-size-large;\n  line-height: @line-height-computed;\n  height: @navbar-height;\n\n  &:hover,\n  &:focus {\n    text-decoration: none;\n  }\n\n  @media (min-width: @grid-float-breakpoint) {\n    .navbar > .container &,\n    .navbar > .container-fluid & {\n      margin-left: -@navbar-padding-horizontal;\n    }\n  }\n}\n\n\n// Navbar toggle\n//\n// Custom button for toggling the `.navbar-collapse`, powered by the collapse\n// JavaScript plugin.\n\n.navbar-toggle {\n  position: relative;\n  float: right;\n  margin-right: @navbar-padding-horizontal;\n  padding: 9px 10px;\n  .navbar-vertical-align(34px);\n  background-color: transparent;\n  background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214\n  border: 1px solid transparent;\n  border-radius: @border-radius-base;\n\n  // We remove the `outline` here, but later compensate by attaching `:hover`\n  // styles to `:focus`.\n  &:focus {\n    outline: 0;\n  }\n\n  // Bars\n  .icon-bar {\n    display: block;\n    width: 22px;\n    height: 2px;\n    border-radius: 1px;\n  }\n  .icon-bar + .icon-bar {\n    margin-top: 4px;\n  }\n\n  @media (min-width: @grid-float-breakpoint) {\n    display: none;\n  }\n}\n\n\n// Navbar nav links\n//\n// Builds on top of the `.nav` components with its own modifier class to make\n// the nav the full height of the horizontal nav (above 768px).\n\n.navbar-nav {\n  margin: (@navbar-padding-vertical / 2) -@navbar-padding-horizontal;\n\n  > li > a {\n    padding-top:    10px;\n    padding-bottom: 10px;\n    line-height: @line-height-computed;\n  }\n\n  @media (max-width: @grid-float-breakpoint-max) {\n    // Dropdowns get custom display when collapsed\n    .open .dropdown-menu {\n      position: static;\n      float: none;\n      width: auto;\n      margin-top: 0;\n      background-color: transparent;\n      border: 0;\n      box-shadow: none;\n      > li > a,\n      .dropdown-header {\n        padding: 5px 15px 5px 25px;\n      }\n      > li > a {\n        line-height: @line-height-computed;\n        &:hover,\n        &:focus {\n          background-image: none;\n        }\n      }\n    }\n  }\n\n  // Uncollapse the nav\n  @media (min-width: @grid-float-breakpoint) {\n    float: left;\n    margin: 0;\n\n    > li {\n      float: left;\n      > a {\n        padding-top:    @navbar-padding-vertical;\n        padding-bottom: @navbar-padding-vertical;\n      }\n    }\n\n    &.navbar-right:last-child {\n      margin-right: -@navbar-padding-horizontal;\n    }\n  }\n}\n\n\n// Component alignment\n//\n// Repurpose the pull utilities as their own navbar utilities to avoid specificity\n// issues with parents and chaining. Only do this when the navbar is uncollapsed\n// though so that navbar contents properly stack and align in mobile.\n\n@media (min-width: @grid-float-breakpoint) {\n  .navbar-left  { .pull-left(); }\n  .navbar-right { .pull-right(); }\n}\n\n\n// Navbar form\n//\n// Extension of the `.form-inline` with some extra flavor for optimum display in\n// our navbars.\n\n.navbar-form {\n  margin-left: -@navbar-padding-horizontal;\n  margin-right: -@navbar-padding-horizontal;\n  padding: 10px @navbar-padding-horizontal;\n  border-top: 1px solid transparent;\n  border-bottom: 1px solid transparent;\n  @shadow: inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.1);\n  .box-shadow(@shadow);\n\n  // Mixin behavior for optimum display\n  .form-inline();\n\n  .form-group {\n    @media (max-width: @grid-float-breakpoint-max) {\n      margin-bottom: 5px;\n    }\n  }\n\n  // Vertically center in expanded, horizontal navbar\n  .navbar-vertical-align(@input-height-base);\n\n  // Undo 100% width for pull classes\n  @media (min-width: @grid-float-breakpoint) {\n    width: auto;\n    border: 0;\n    margin-left: 0;\n    margin-right: 0;\n    padding-top: 0;\n    padding-bottom: 0;\n    .box-shadow(none);\n\n    // Outdent the form if last child to line up with content down the page\n    &.navbar-right:last-child {\n      margin-right: -@navbar-padding-horizontal;\n    }\n  }\n}\n\n\n// Dropdown menus\n\n// Menu position and menu carets\n.navbar-nav > li > .dropdown-menu {\n  margin-top: 0;\n  .border-top-radius(0);\n}\n// Menu position and menu caret support for dropups via extra dropup class\n.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {\n  .border-bottom-radius(0);\n}\n\n\n// Buttons in navbars\n//\n// Vertically center a button within a navbar (when *not* in a form).\n\n.navbar-btn {\n  .navbar-vertical-align(@input-height-base);\n\n  &.btn-sm {\n    .navbar-vertical-align(@input-height-small);\n  }\n  &.btn-xs {\n    .navbar-vertical-align(22);\n  }\n}\n\n\n// Text in navbars\n//\n// Add a class to make any element properly align itself vertically within the navbars.\n\n.navbar-text {\n  .navbar-vertical-align(@line-height-computed);\n\n  @media (min-width: @grid-float-breakpoint) {\n    float: left;\n    margin-left: @navbar-padding-horizontal;\n    margin-right: @navbar-padding-horizontal;\n\n    // Outdent the form if last child to line up with content down the page\n    &.navbar-right:last-child {\n      margin-right: 0;\n    }\n  }\n}\n\n// Alternate navbars\n// --------------------------------------------------\n\n// Default navbar\n.navbar-default {\n  background-color: @navbar-default-bg;\n  border-color: @navbar-default-border;\n\n  .navbar-brand {\n    color: @navbar-default-brand-color;\n    &:hover,\n    &:focus {\n      color: @navbar-default-brand-hover-color;\n      background-color: @navbar-default-brand-hover-bg;\n    }\n  }\n\n  .navbar-text {\n    color: @navbar-default-color;\n  }\n\n  .navbar-nav {\n    > li > a {\n      color: @navbar-default-link-color;\n\n      &:hover,\n      &:focus {\n        color: @navbar-default-link-hover-color;\n        background-color: @navbar-default-link-hover-bg;\n      }\n    }\n    > .active > a {\n      &,\n      &:hover,\n      &:focus {\n        color: @navbar-default-link-active-color;\n        background-color: @navbar-default-link-active-bg;\n      }\n    }\n    > .disabled > a {\n      &,\n      &:hover,\n      &:focus {\n        color: @navbar-default-link-disabled-color;\n        background-color: @navbar-default-link-disabled-bg;\n      }\n    }\n  }\n\n  .navbar-toggle {\n    border-color: @navbar-default-toggle-border-color;\n    &:hover,\n    &:focus {\n      background-color: @navbar-default-toggle-hover-bg;\n    }\n    .icon-bar {\n      background-color: @navbar-default-toggle-icon-bar-bg;\n    }\n  }\n\n  .navbar-collapse,\n  .navbar-form {\n    border-color: @navbar-default-border;\n  }\n\n  // Dropdown menu items\n  .navbar-nav {\n    // Remove background color from open dropdown\n    > .open > a {\n      &,\n      &:hover,\n      &:focus {\n        background-color: @navbar-default-link-active-bg;\n        color: @navbar-default-link-active-color;\n      }\n    }\n\n    @media (max-width: @grid-float-breakpoint-max) {\n      // Dropdowns get custom display when collapsed\n      .open .dropdown-menu {\n        > li > a {\n          color: @navbar-default-link-color;\n          &:hover,\n          &:focus {\n            color: @navbar-default-link-hover-color;\n            background-color: @navbar-default-link-hover-bg;\n          }\n        }\n        > .active > a {\n          &,\n          &:hover,\n          &:focus {\n            color: @navbar-default-link-active-color;\n            background-color: @navbar-default-link-active-bg;\n          }\n        }\n        > .disabled > a {\n          &,\n          &:hover,\n          &:focus {\n            color: @navbar-default-link-disabled-color;\n            background-color: @navbar-default-link-disabled-bg;\n          }\n        }\n      }\n    }\n  }\n\n\n  // Links in navbars\n  //\n  // Add a class to ensure links outside the navbar nav are colored correctly.\n\n  .navbar-link {\n    color: @navbar-default-link-color;\n    &:hover {\n      color: @navbar-default-link-hover-color;\n    }\n  }\n\n  .btn-link {\n    color: @navbar-default-link-color;\n    &:hover,\n    &:focus {\n      color: @navbar-default-link-hover-color;\n    }\n    &[disabled],\n    fieldset[disabled] & {\n      &:hover,\n      &:focus {\n        color: @navbar-default-link-disabled-color;\n      }\n    }\n  }\n}\n\n// Inverse navbar\n\n.navbar-inverse {\n  background-color: @navbar-inverse-bg;\n  border-color: @navbar-inverse-border;\n\n  .navbar-brand {\n    color: @navbar-inverse-brand-color;\n    &:hover,\n    &:focus {\n      color: @navbar-inverse-brand-hover-color;\n      background-color: @navbar-inverse-brand-hover-bg;\n    }\n  }\n\n  .navbar-text {\n    color: @navbar-inverse-color;\n  }\n\n  .navbar-nav {\n    > li > a {\n      color: @navbar-inverse-link-color;\n\n      &:hover,\n      &:focus {\n        color: @navbar-inverse-link-hover-color;\n        background-color: @navbar-inverse-link-hover-bg;\n      }\n    }\n    > .active > a {\n      &,\n      &:hover,\n      &:focus {\n        color: @navbar-inverse-link-active-color;\n        background-color: @navbar-inverse-link-active-bg;\n      }\n    }\n    > .disabled > a {\n      &,\n      &:hover,\n      &:focus {\n        color: @navbar-inverse-link-disabled-color;\n        background-color: @navbar-inverse-link-disabled-bg;\n      }\n    }\n  }\n\n  // Darken the responsive nav toggle\n  .navbar-toggle {\n    border-color: @navbar-inverse-toggle-border-color;\n    &:hover,\n    &:focus {\n      background-color: @navbar-inverse-toggle-hover-bg;\n    }\n    .icon-bar {\n      background-color: @navbar-inverse-toggle-icon-bar-bg;\n    }\n  }\n\n  .navbar-collapse,\n  .navbar-form {\n    border-color: darken(@navbar-inverse-bg, 7%);\n  }\n\n  // Dropdowns\n  .navbar-nav {\n    > .open > a {\n      &,\n      &:hover,\n      &:focus {\n        background-color: @navbar-inverse-link-active-bg;\n        color: @navbar-inverse-link-active-color;\n      }\n    }\n\n    @media (max-width: @grid-float-breakpoint-max) {\n      // Dropdowns get custom display\n      .open .dropdown-menu {\n        > .dropdown-header {\n          border-color: @navbar-inverse-border;\n        }\n        .divider {\n          background-color: @navbar-inverse-border;\n        }\n        > li > a {\n          color: @navbar-inverse-link-color;\n          &:hover,\n          &:focus {\n            color: @navbar-inverse-link-hover-color;\n            background-color: @navbar-inverse-link-hover-bg;\n          }\n        }\n        > .active > a {\n          &,\n          &:hover,\n          &:focus {\n            color: @navbar-inverse-link-active-color;\n            background-color: @navbar-inverse-link-active-bg;\n          }\n        }\n        > .disabled > a {\n          &,\n          &:hover,\n          &:focus {\n            color: @navbar-inverse-link-disabled-color;\n            background-color: @navbar-inverse-link-disabled-bg;\n          }\n        }\n      }\n    }\n  }\n\n  .navbar-link {\n    color: @navbar-inverse-link-color;\n    &:hover {\n      color: @navbar-inverse-link-hover-color;\n    }\n  }\n\n  .btn-link {\n    color: @navbar-inverse-link-color;\n    &:hover,\n    &:focus {\n      color: @navbar-inverse-link-hover-color;\n    }\n    &[disabled],\n    fieldset[disabled] & {\n      &:hover,\n      &:focus {\n        color: @navbar-inverse-link-disabled-color;\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "themes/bootstrap-2/less/navs.less",
    "content": "//\n// Navs\n// --------------------------------------------------\n\n\n// Base class\n// --------------------------------------------------\n\n.nav {\n  margin-bottom: 0;\n  padding-left: 0; // Override default ul/ol\n  list-style: none;\n  &:extend(.clearfix all);\n\n  > li {\n    position: relative;\n    display: block;\n\n    > a {\n      position: relative;\n      display: block;\n      padding: @nav-link-padding;\n      &:hover,\n      &:focus {\n        text-decoration: none;\n        background-color: @nav-link-hover-bg;\n      }\n    }\n\n    // Disabled state sets text to gray and nukes hover/tab effects\n    &.disabled > a {\n      color: @nav-disabled-link-color;\n\n      &:hover,\n      &:focus {\n        color: @nav-disabled-link-hover-color;\n        text-decoration: none;\n        background-color: transparent;\n        cursor: not-allowed;\n      }\n    }\n  }\n\n  // Open dropdowns\n  .open > a {\n    &,\n    &:hover,\n    &:focus {\n      background-color: @nav-link-hover-bg;\n      border-color: @link-color;\n    }\n  }\n\n  // Nav dividers (deprecated with v3.0.1)\n  //\n  // This should have been removed in v3 with the dropping of `.nav-list`, but\n  // we missed it. We don't currently support this anywhere, but in the interest\n  // of maintaining backward compatibility in case you use it, it's deprecated.\n  .nav-divider {\n    .nav-divider();\n  }\n\n  // Prevent IE8 from misplacing imgs\n  //\n  // See https://github.com/h5bp/html5-boilerplate/issues/984#issuecomment-3985989\n  > li > a > img {\n    max-width: none;\n  }\n}\n\n\n// Tabs\n// -------------------------\n\n// Give the tabs something to sit on\n.nav-tabs {\n  border-bottom: 1px solid @nav-tabs-border-color;\n  > li {\n    float: left;\n    // Make the list-items overlay the bottom border\n    margin-bottom: -1px;\n\n    // Actual tabs (as links)\n    > a {\n      margin-right: 2px;\n      line-height: @line-height-base;\n      border: 1px solid transparent;\n      border-radius: @border-radius-base @border-radius-base 0 0;\n      &:hover {\n        border-color: @nav-tabs-link-hover-border-color @nav-tabs-link-hover-border-color @nav-tabs-border-color;\n      }\n    }\n\n    // Active state, and its :hover to override normal :hover\n    &.active > a {\n      &,\n      &:hover,\n      &:focus {\n        color: @nav-tabs-active-link-hover-color;\n        background-color: @nav-tabs-active-link-hover-bg;\n        border: 1px solid @nav-tabs-active-link-hover-border-color;\n        border-bottom-color: transparent;\n        cursor: default;\n      }\n    }\n  }\n  // pulling this in mainly for less shorthand\n  &.nav-justified {\n    .nav-justified();\n    .nav-tabs-justified();\n  }\n}\n\n\n// Pills\n// -------------------------\n.nav-pills {\n  > li {\n    float: left;\n\n    // Links rendered as pills\n    > a {\n      border-radius: @nav-pills-border-radius;\n    }\n    + li {\n      margin-left: 2px;\n    }\n\n    // Active state\n    &.active > a {\n      &,\n      &:hover,\n      &:focus {\n        color: @nav-pills-active-link-hover-color;\n        background-color: @nav-pills-active-link-hover-bg;\n      }\n    }\n  }\n}\n\n\n// Stacked pills\n.nav-stacked {\n  > li {\n    float: none;\n    + li {\n      margin-top: 2px;\n      margin-left: 0; // no need for this gap between nav items\n    }\n  }\n}\n\n\n// Nav variations\n// --------------------------------------------------\n\n// Justified nav links\n// -------------------------\n\n.nav-justified {\n  width: 100%;\n\n  > li {\n    float: none;\n    > a {\n      text-align: center;\n      margin-bottom: 5px;\n    }\n  }\n\n  > .dropdown .dropdown-menu {\n    top: auto;\n    left: auto;\n  }\n\n  @media (min-width: @screen-sm-min) {\n    > li {\n      display: table-cell;\n      width: 1%;\n      > a {\n        margin-bottom: 0;\n      }\n    }\n  }\n}\n\n// Move borders to anchors instead of bottom of list\n//\n// Mixin for adding on top the shared `.nav-justified` styles for our tabs\n.nav-tabs-justified {\n  border-bottom: 0;\n\n  > li > a {\n    // Override margin from .nav-tabs\n    margin-right: 0;\n    border-radius: @border-radius-base;\n  }\n\n  > .active > a,\n  > .active > a:hover,\n  > .active > a:focus {\n    border: 1px solid @nav-tabs-justified-link-border-color;\n  }\n\n  @media (min-width: @screen-sm-min) {\n    > li > a {\n      border-bottom: 1px solid @nav-tabs-justified-link-border-color;\n      border-radius: @border-radius-base @border-radius-base 0 0;\n    }\n    > .active > a,\n    > .active > a:hover,\n    > .active > a:focus {\n      border-bottom-color: @nav-tabs-justified-active-link-border-color;\n    }\n  }\n}\n\n\n// Tabbable tabs\n// -------------------------\n\n// Hide tabbable panes to start, show them when `.active`\n.tab-content {\n  > .tab-pane {\n    display: none;\n  }\n  > .active {\n    display: block;\n  }\n}\n\n\n// Dropdowns\n// -------------------------\n\n// Specific dropdowns\n.nav-tabs .dropdown-menu {\n  // make dropdown border overlap tab border\n  margin-top: -1px;\n  // Remove the top rounded corners here since there is a hard edge above the menu\n  .border-top-radius(0);\n}\n"
  },
  {
    "path": "themes/bootstrap-2/less/normalize.less",
    "content": "/*! normalize.css v3.0.1 | MIT License | git.io/normalize */\n\n//\n// 1. Set default font family to sans-serif.\n// 2. Prevent iOS text size adjust after orientation change, without disabling\n//    user zoom.\n//\n\nhtml {\n  font-family: sans-serif; // 1\n  -ms-text-size-adjust: 100%; // 2\n  -webkit-text-size-adjust: 100%; // 2\n}\n\n//\n// Remove default margin.\n//\n\nbody {\n  margin: 0;\n}\n\n// HTML5 display definitions\n// ==========================================================================\n\n//\n// Correct `block` display not defined for any HTML5 element in IE 8/9.\n// Correct `block` display not defined for `details` or `summary` in IE 10/11 and Firefox.\n// Correct `block` display not defined for `main` in IE 11.\n//\n\narticle,\naside,\ndetails,\nfigcaption,\nfigure,\nfooter,\nheader,\nhgroup,\nmain,\nnav,\nsection,\nsummary {\n  display: block;\n}\n\n//\n// 1. Correct `inline-block` display not defined in IE 8/9.\n// 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera.\n//\n\naudio,\ncanvas,\nprogress,\nvideo {\n  display: inline-block; // 1\n  vertical-align: baseline; // 2\n}\n\n//\n// Prevent modern browsers from displaying `audio` without controls.\n// Remove excess height in iOS 5 devices.\n//\n\naudio:not([controls]) {\n  display: none;\n  height: 0;\n}\n\n//\n// Address `[hidden]` styling not present in IE 8/9/10.\n// Hide the `template` element in IE 8/9/11, Safari, and Firefox < 22.\n//\n\n[hidden],\ntemplate {\n  display: none;\n}\n\n// Links\n// ==========================================================================\n\n//\n// Remove the gray background color from active links in IE 10.\n//\n\na {\n  background: transparent;\n}\n\n//\n// Improve readability when focused and also mouse hovered in all browsers.\n//\n\na:active,\na:hover {\n  outline: 0;\n}\n\n// Text-level semantics\n// ==========================================================================\n\n//\n// Address styling not present in IE 8/9/10/11, Safari, and Chrome.\n//\n\nabbr[title] {\n  border-bottom: 1px dotted;\n}\n\n//\n// Address style set to `bolder` in Firefox 4+, Safari, and Chrome.\n//\n\nb,\nstrong {\n  font-weight: bold;\n}\n\n//\n// Address styling not present in Safari and Chrome.\n//\n\ndfn {\n  font-style: italic;\n}\n\n//\n// Address variable `h1` font-size and margin within `section` and `article`\n// contexts in Firefox 4+, Safari, and Chrome.\n//\n\nh1 {\n  font-size: 2em;\n  margin: 0.67em 0;\n}\n\n//\n// Address styling not present in IE 8/9.\n//\n\nmark {\n  background: #ff0;\n  color: #000;\n}\n\n//\n// Address inconsistent and variable font size in all browsers.\n//\n\nsmall {\n  font-size: 80%;\n}\n\n//\n// Prevent `sub` and `sup` affecting `line-height` in all browsers.\n//\n\nsub,\nsup {\n  font-size: 75%;\n  line-height: 0;\n  position: relative;\n  vertical-align: baseline;\n}\n\nsup {\n  top: -0.5em;\n}\n\nsub {\n  bottom: -0.25em;\n}\n\n// Embedded content\n// ==========================================================================\n\n//\n// Remove border when inside `a` element in IE 8/9/10.\n//\n\nimg {\n  border: 0;\n}\n\n//\n// Correct overflow not hidden in IE 9/10/11.\n//\n\nsvg:not(:root) {\n  overflow: hidden;\n}\n\n// Grouping content\n// ==========================================================================\n\n//\n// Address margin not present in IE 8/9 and Safari.\n//\n\nfigure {\n  margin: 1em 40px;\n}\n\n//\n// Address differences between Firefox and other browsers.\n//\n\nhr {\n  -moz-box-sizing: content-box;\n  box-sizing: content-box;\n  height: 0;\n}\n\n//\n// Contain overflow in all browsers.\n//\n\npre {\n  overflow: auto;\n}\n\n//\n// Address odd `em`-unit font size rendering in all browsers.\n//\n\ncode,\nkbd,\npre,\nsamp {\n  font-family: monospace, monospace;\n  font-size: 1em;\n}\n\n// Forms\n// ==========================================================================\n\n//\n// Known limitation: by default, Chrome and Safari on OS X allow very limited\n// styling of `select`, unless a `border` property is set.\n//\n\n//\n// 1. Correct color not being inherited.\n//    Known issue: affects color of disabled elements.\n// 2. Correct font properties not being inherited.\n// 3. Address margins set differently in Firefox 4+, Safari, and Chrome.\n//\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n  color: inherit; // 1\n  font: inherit; // 2\n  margin: 0; // 3\n}\n\n//\n// Address `overflow` set to `hidden` in IE 8/9/10/11.\n//\n\nbutton {\n  overflow: visible;\n}\n\n//\n// Address inconsistent `text-transform` inheritance for `button` and `select`.\n// All other form control elements do not inherit `text-transform` values.\n// Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera.\n// Correct `select` style inheritance in Firefox.\n//\n\nbutton,\nselect {\n  text-transform: none;\n}\n\n//\n// 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`\n//    and `video` controls.\n// 2. Correct inability to style clickable `input` types in iOS.\n// 3. Improve usability and consistency of cursor style between image-type\n//    `input` and others.\n//\n\nbutton,\nhtml input[type=\"button\"], // 1\ninput[type=\"reset\"],\ninput[type=\"submit\"] {\n  -webkit-appearance: button; // 2\n  cursor: pointer; // 3\n}\n\n//\n// Re-set default cursor for disabled elements.\n//\n\nbutton[disabled],\nhtml input[disabled] {\n  cursor: default;\n}\n\n//\n// Remove inner padding and border in Firefox 4+.\n//\n\nbutton::-moz-focus-inner,\ninput::-moz-focus-inner {\n  border: 0;\n  padding: 0;\n}\n\n//\n// Address Firefox 4+ setting `line-height` on `input` using `!important` in\n// the UA stylesheet.\n//\n\ninput {\n  line-height: normal;\n}\n\n//\n// It's recommended that you don't attempt to style these elements.\n// Firefox's implementation doesn't respect box-sizing, padding, or width.\n//\n// 1. Address box sizing set to `content-box` in IE 8/9/10.\n// 2. Remove excess padding in IE 8/9/10.\n//\n\ninput[type=\"checkbox\"],\ninput[type=\"radio\"] {\n  box-sizing: border-box; // 1\n  padding: 0; // 2\n}\n\n//\n// Fix the cursor style for Chrome's increment/decrement buttons. For certain\n// `font-size` values of the `input`, it causes the cursor style of the\n// decrement button to change from `default` to `text`.\n//\n\ninput[type=\"number\"]::-webkit-inner-spin-button,\ninput[type=\"number\"]::-webkit-outer-spin-button {\n  height: auto;\n}\n\n//\n// 1. Address `appearance` set to `searchfield` in Safari and Chrome.\n// 2. Address `box-sizing` set to `border-box` in Safari and Chrome\n//    (include `-moz` to future-proof).\n//\n\ninput[type=\"search\"] {\n  -webkit-appearance: textfield; // 1\n  -moz-box-sizing: content-box;\n  -webkit-box-sizing: content-box; // 2\n  box-sizing: content-box;\n}\n\n//\n// Remove inner padding and search cancel button in Safari and Chrome on OS X.\n// Safari (but not Chrome) clips the cancel button when the search input has\n// padding (and `textfield` appearance).\n//\n\ninput[type=\"search\"]::-webkit-search-cancel-button,\ninput[type=\"search\"]::-webkit-search-decoration {\n  -webkit-appearance: none;\n}\n\n//\n// Define consistent border, margin, and padding.\n//\n\nfieldset {\n  border: 1px solid #c0c0c0;\n  margin: 0 2px;\n  padding: 0.35em 0.625em 0.75em;\n}\n\n//\n// 1. Correct `color` not being inherited in IE 8/9/10/11.\n// 2. Remove padding so people aren't caught out if they zero out fieldsets.\n//\n\nlegend {\n  border: 0; // 1\n  padding: 0; // 2\n}\n\n//\n// Remove default vertical scrollbar in IE 8/9/10/11.\n//\n\ntextarea {\n  overflow: auto;\n}\n\n//\n// Don't inherit the `font-weight` (applied by a rule above).\n// NOTE: the default cannot safely be changed in Chrome and Safari on OS X.\n//\n\noptgroup {\n  font-weight: bold;\n}\n\n// Tables\n// ==========================================================================\n\n//\n// Remove most spacing between table cells.\n//\n\ntable {\n  border-collapse: collapse;\n  border-spacing: 0;\n}\n\ntd,\nth {\n  padding: 0;\n}\n"
  },
  {
    "path": "themes/bootstrap-2/less/pager.less",
    "content": "//\n// Pager pagination\n// --------------------------------------------------\n\n\n.pager {\n  padding-left: 0;\n  margin: @line-height-computed 0;\n  list-style: none;\n  text-align: center;\n  &:extend(.clearfix all);\n  li {\n    display: inline;\n    > a,\n    > span {\n      display: inline-block;\n      padding: 5px 14px;\n      background-color: @pager-bg;\n      border: 1px solid @pager-border;\n      border-radius: @pager-border-radius;\n    }\n\n    > a:hover,\n    > a:focus {\n      text-decoration: none;\n      background-color: @pager-hover-bg;\n    }\n  }\n\n  .next {\n    > a,\n    > span {\n      float: right;\n    }\n  }\n\n  .previous {\n    > a,\n    > span {\n      float: left;\n    }\n  }\n\n  .disabled {\n    > a,\n    > a:hover,\n    > a:focus,\n    > span {\n      color: @pager-disabled-color;\n      background-color: @pager-bg;\n      cursor: not-allowed;\n    }\n  }\n\n}\n"
  },
  {
    "path": "themes/bootstrap-2/less/pagination.less",
    "content": "//\n// Pagination (multiple pages)\n// --------------------------------------------------\n.pagination {\n  display: inline-block;\n  padding-left: 0;\n  margin: @line-height-computed 0;\n  border-radius: @border-radius-base;\n\n  > li {\n    display: inline; // Remove list-style and block-level defaults\n    > a,\n    > span {\n      position: relative;\n      float: left; // Collapse white-space\n      padding: @padding-base-vertical @padding-base-horizontal;\n      line-height: @line-height-base;\n      text-decoration: none;\n      color: @pagination-color;\n      background-color: @pagination-bg;\n      border: 1px solid @pagination-border;\n      margin-left: -1px;\n    }\n    &:first-child {\n      > a,\n      > span {\n        margin-left: 0;\n        .border-left-radius(@border-radius-base);\n      }\n    }\n    &:last-child {\n      > a,\n      > span {\n        .border-right-radius(@border-radius-base);\n      }\n    }\n  }\n\n  > li > a,\n  > li > span {\n    &:hover,\n    &:focus {\n      color: @pagination-hover-color;\n      background-color: @pagination-hover-bg;\n      border-color: @pagination-hover-border;\n    }\n  }\n\n  > .active > a,\n  > .active > span {\n    &,\n    &:hover,\n    &:focus {\n      z-index: 2;\n      color: @pagination-active-color;\n      background-color: @pagination-active-bg;\n      border-color: @pagination-active-border;\n      cursor: default;\n    }\n  }\n\n  > .disabled {\n    > span,\n    > span:hover,\n    > span:focus,\n    > a,\n    > a:hover,\n    > a:focus {\n      color: @pagination-disabled-color;\n      background-color: @pagination-disabled-bg;\n      border-color: @pagination-disabled-border;\n      cursor: not-allowed;\n    }\n  }\n}\n\n// Sizing\n// --------------------------------------------------\n\n// Large\n.pagination-lg {\n  .pagination-size(@padding-large-vertical; @padding-large-horizontal; @font-size-large; @border-radius-large);\n}\n\n// Small\n.pagination-sm {\n  .pagination-size(@padding-small-vertical; @padding-small-horizontal; @font-size-small; @border-radius-small);\n}\n"
  },
  {
    "path": "themes/bootstrap-2/less/panels.less",
    "content": "//\n// Panels\n// --------------------------------------------------\n\n\n// Base class\n.panel {\n  margin-bottom: @line-height-computed;\n  background-color: @panel-bg;\n  border: 1px solid transparent;\n  border-radius: @panel-border-radius;\n  .box-shadow(0 1px 1px rgba(0,0,0,.05));\n}\n\n// Panel contents\n.panel-body {\n  padding: @panel-body-padding;\n  &:extend(.clearfix all);\n}\n\n// Optional heading\n.panel-heading {\n  padding: @panel-heading-padding;\n  border-bottom: 1px solid transparent;\n  .border-top-radius((@panel-border-radius - 1));\n\n  > .dropdown .dropdown-toggle {\n    color: inherit;\n  }\n}\n\n// Within heading, strip any `h*` tag of its default margins for spacing.\n.panel-title {\n  margin-top: 0;\n  margin-bottom: 0;\n  font-size: ceil((@font-size-base * 1.125));\n  color: inherit;\n\n  > a {\n    color: inherit;\n  }\n}\n\n// Optional footer (stays gray in every modifier class)\n.panel-footer {\n  padding: @panel-footer-padding;\n  background-color: @panel-footer-bg;\n  border-top: 1px solid @panel-inner-border;\n  .border-bottom-radius((@panel-border-radius - 1));\n}\n\n\n// List groups in panels\n//\n// By default, space out list group content from panel headings to account for\n// any kind of custom content between the two.\n\n.panel {\n  > .list-group {\n    margin-bottom: 0;\n\n    .list-group-item {\n      border-width: 1px 0;\n      border-radius: 0;\n    }\n\n    // Add border top radius for first one\n    &:first-child {\n      .list-group-item:first-child {\n        border-top: 0;\n        .border-top-radius((@panel-border-radius - 1));\n      }\n    }\n    // Add border bottom radius for last one\n    &:last-child {\n      .list-group-item:last-child {\n        border-bottom: 0;\n        .border-bottom-radius((@panel-border-radius - 1));\n      }\n    }\n  }\n}\n// Collapse space between when there's no additional content.\n.panel-heading + .list-group {\n  .list-group-item:first-child {\n    border-top-width: 0;\n  }\n}\n.list-group + .panel-footer {\n  border-top-width: 0;\n}\n\n// Tables in panels\n//\n// Place a non-bordered `.table` within a panel (not within a `.panel-body`) and\n// watch it go full width.\n\n.panel {\n  > .table,\n  > .table-responsive > .table,\n  > .panel-collapse > .table {\n    margin-bottom: 0;\n  }\n  // Add border top radius for first one\n  > .table:first-child,\n  > .table-responsive:first-child > .table:first-child {\n    .border-top-radius((@panel-border-radius - 1));\n\n    > thead:first-child,\n    > tbody:first-child {\n      > tr:first-child {\n        td:first-child,\n        th:first-child {\n          border-top-left-radius: (@panel-border-radius - 1);\n        }\n        td:last-child,\n        th:last-child {\n          border-top-right-radius: (@panel-border-radius - 1);\n        }\n      }\n    }\n  }\n  // Add border bottom radius for last one\n  > .table:last-child,\n  > .table-responsive:last-child > .table:last-child {\n    .border-bottom-radius((@panel-border-radius - 1));\n\n    > tbody:last-child,\n    > tfoot:last-child {\n      > tr:last-child {\n        td:first-child,\n        th:first-child {\n          border-bottom-left-radius: (@panel-border-radius - 1);\n        }\n        td:last-child,\n        th:last-child {\n          border-bottom-right-radius: (@panel-border-radius - 1);\n        }\n      }\n    }\n  }\n  > .panel-body + .table,\n  > .panel-body + .table-responsive {\n    border-top: 1px solid @table-border-color;\n  }\n  > .table > tbody:first-child > tr:first-child th,\n  > .table > tbody:first-child > tr:first-child td {\n    border-top: 0;\n  }\n  > .table-bordered,\n  > .table-responsive > .table-bordered {\n    border: 0;\n    > thead,\n    > tbody,\n    > tfoot {\n      > tr {\n        > th:first-child,\n        > td:first-child {\n          border-left: 0;\n        }\n        > th:last-child,\n        > td:last-child {\n          border-right: 0;\n        }\n      }\n    }\n    > thead,\n    > tbody {\n      > tr:first-child {\n        > td,\n        > th {\n          border-bottom: 0;\n        }\n      }\n    }\n    > tbody,\n    > tfoot {\n      > tr:last-child {\n        > td,\n        > th {\n          border-bottom: 0;\n        }\n      }\n    }\n  }\n  > .table-responsive {\n    border: 0;\n    margin-bottom: 0;\n  }\n}\n\n\n// Collapsable panels (aka, accordion)\n//\n// Wrap a series of panels in `.panel-group` to turn them into an accordion with\n// the help of our collapse JavaScript plugin.\n\n.panel-group {\n  margin-bottom: @line-height-computed;\n\n  // Tighten up margin so it's only between panels\n  .panel {\n    margin-bottom: 0;\n    border-radius: @panel-border-radius;\n    + .panel {\n      margin-top: 5px;\n    }\n  }\n\n  .panel-heading {\n    border-bottom: 0;\n    + .panel-collapse > .panel-body {\n      border-top: 1px solid @panel-inner-border;\n    }\n  }\n  .panel-footer {\n    border-top: 0;\n    + .panel-collapse .panel-body {\n      border-bottom: 1px solid @panel-inner-border;\n    }\n  }\n}\n\n\n// Contextual variations\n.panel-default {\n  .panel-variant(@panel-default-border; @panel-default-text; @panel-default-heading-bg; @panel-default-border);\n}\n.panel-primary {\n  .panel-variant(@panel-primary-border; @panel-primary-text; @panel-primary-heading-bg; @panel-primary-border);\n}\n.panel-success {\n  .panel-variant(@panel-success-border; @panel-success-text; @panel-success-heading-bg; @panel-success-border);\n}\n.panel-info {\n  .panel-variant(@panel-info-border; @panel-info-text; @panel-info-heading-bg; @panel-info-border);\n}\n.panel-warning {\n  .panel-variant(@panel-warning-border; @panel-warning-text; @panel-warning-heading-bg; @panel-warning-border);\n}\n.panel-danger {\n  .panel-variant(@panel-danger-border; @panel-danger-text; @panel-danger-heading-bg; @panel-danger-border);\n}\n"
  },
  {
    "path": "themes/bootstrap-2/less/popovers.less",
    "content": "//\n// Popovers\n// --------------------------------------------------\n\n\n.popover {\n  position: absolute;\n  top: 0;\n  left: 0;\n  z-index: @zindex-popover;\n  display: none;\n  max-width: @popover-max-width;\n  padding: 1px;\n  text-align: left; // Reset given new insertion method\n  background-color: @popover-bg;\n  background-clip: padding-box;\n  border: 1px solid @popover-fallback-border-color;\n  border: 1px solid @popover-border-color;\n  border-radius: @border-radius-large;\n  .box-shadow(0 5px 10px rgba(0,0,0,.2));\n\n  // Overrides for proper insertion\n  white-space: normal;\n\n  // Offset the popover to account for the popover arrow\n  &.top     { margin-top: -@popover-arrow-width; }\n  &.right   { margin-left: @popover-arrow-width; }\n  &.bottom  { margin-top: @popover-arrow-width; }\n  &.left    { margin-left: -@popover-arrow-width; }\n}\n\n.popover-title {\n  margin: 0; // reset heading margin\n  padding: 8px 14px;\n  font-size: @font-size-base;\n  font-weight: normal;\n  line-height: 18px;\n  background-color: @popover-title-bg;\n  border-bottom: 1px solid darken(@popover-title-bg, 5%);\n  border-radius: (@border-radius-large - 1) (@border-radius-large - 1) 0 0;\n}\n\n.popover-content {\n  padding: 9px 14px;\n}\n\n// Arrows\n//\n// .arrow is outer, .arrow:after is inner\n\n.popover > .arrow {\n  &,\n  &:after {\n    position: absolute;\n    display: block;\n    width: 0;\n    height: 0;\n    border-color: transparent;\n    border-style: solid;\n  }\n}\n.popover > .arrow {\n  border-width: @popover-arrow-outer-width;\n}\n.popover > .arrow:after {\n  border-width: @popover-arrow-width;\n  content: \"\";\n}\n\n.popover {\n  &.top > .arrow {\n    left: 50%;\n    margin-left: -@popover-arrow-outer-width;\n    border-bottom-width: 0;\n    border-top-color: @popover-arrow-outer-fallback-color; // IE8 fallback\n    border-top-color: @popover-arrow-outer-color;\n    bottom: -@popover-arrow-outer-width;\n    &:after {\n      content: \" \";\n      bottom: 1px;\n      margin-left: -@popover-arrow-width;\n      border-bottom-width: 0;\n      border-top-color: @popover-arrow-color;\n    }\n  }\n  &.right > .arrow {\n    top: 50%;\n    left: -@popover-arrow-outer-width;\n    margin-top: -@popover-arrow-outer-width;\n    border-left-width: 0;\n    border-right-color: @popover-arrow-outer-fallback-color; // IE8 fallback\n    border-right-color: @popover-arrow-outer-color;\n    &:after {\n      content: \" \";\n      left: 1px;\n      bottom: -@popover-arrow-width;\n      border-left-width: 0;\n      border-right-color: @popover-arrow-color;\n    }\n  }\n  &.bottom > .arrow {\n    left: 50%;\n    margin-left: -@popover-arrow-outer-width;\n    border-top-width: 0;\n    border-bottom-color: @popover-arrow-outer-fallback-color; // IE8 fallback\n    border-bottom-color: @popover-arrow-outer-color;\n    top: -@popover-arrow-outer-width;\n    &:after {\n      content: \" \";\n      top: 1px;\n      margin-left: -@popover-arrow-width;\n      border-top-width: 0;\n      border-bottom-color: @popover-arrow-color;\n    }\n  }\n\n  &.left > .arrow {\n    top: 50%;\n    right: -@popover-arrow-outer-width;\n    margin-top: -@popover-arrow-outer-width;\n    border-right-width: 0;\n    border-left-color: @popover-arrow-outer-fallback-color; // IE8 fallback\n    border-left-color: @popover-arrow-outer-color;\n    &:after {\n      content: \" \";\n      right: 1px;\n      border-right-width: 0;\n      border-left-color: @popover-arrow-color;\n      bottom: -@popover-arrow-width;\n    }\n  }\n\n}\n"
  },
  {
    "path": "themes/bootstrap-2/less/print.less",
    "content": "//\n// Basic print styles\n// --------------------------------------------------\n// Source: https://github.com/h5bp/html5-boilerplate/blob/master/css/main.css\n\n@media print {\n\n  * {\n    text-shadow: none !important;\n    color: #000 !important; // Black prints faster: h5bp.com/s\n    background: transparent !important;\n    box-shadow: none !important;\n  }\n\n  a,\n  a:visited {\n    text-decoration: underline;\n  }\n\n  a[href]:after {\n    content: \" (\" attr(href) \")\";\n  }\n\n  abbr[title]:after {\n    content: \" (\" attr(title) \")\";\n  }\n\n  // Don't show links for images, or javascript/internal links\n  a[href^=\"javascript:\"]:after,\n  a[href^=\"#\"]:after {\n    content: \"\";\n  }\n\n  pre,\n  blockquote {\n    border: 1px solid #999;\n    page-break-inside: avoid;\n  }\n\n  thead {\n    display: table-header-group; // h5bp.com/t\n  }\n\n  tr,\n  img {\n    page-break-inside: avoid;\n  }\n\n  img {\n    max-width: 100% !important;\n  }\n\n  p,\n  h2,\n  h3 {\n    orphans: 3;\n    widows: 3;\n  }\n\n  h2,\n  h3 {\n    page-break-after: avoid;\n  }\n\n  // Chrome (OSX) fix for https://github.com/twbs/bootstrap/issues/11245\n  // Once fixed, we can just straight up remove this.\n  select {\n    background: #fff !important;\n  }\n\n  // Bootstrap components\n  .navbar {\n    display: none;\n  }\n  .table {\n    td,\n    th {\n      background-color: #fff !important;\n    }\n  }\n  .btn,\n  .dropup > .btn {\n    > .caret {\n      border-top-color: #000 !important;\n    }\n  }\n  .label {\n    border: 1px solid #000;\n  }\n\n  .table {\n    border-collapse: collapse !important;\n  }\n  .table-bordered {\n    th,\n    td {\n      border: 1px solid #ddd !important;\n    }\n  }\n\n}\n"
  },
  {
    "path": "themes/bootstrap-2/less/progress-bars.less",
    "content": "//\n// Progress bars\n// --------------------------------------------------\n\n\n// Bar animations\n// -------------------------\n\n// WebKit\n@-webkit-keyframes progress-bar-stripes {\n  from  { background-position: 40px 0; }\n  to    { background-position: 0 0; }\n}\n\n// Spec and IE10+\n@keyframes progress-bar-stripes {\n  from  { background-position: 40px 0; }\n  to    { background-position: 0 0; }\n}\n\n\n\n// Bar itself\n// -------------------------\n\n// Outer container\n.progress {\n  overflow: hidden;\n  height: @line-height-computed;\n  margin-bottom: @line-height-computed;\n  background-color: @progress-bg;\n  border-radius: @border-radius-base;\n  .box-shadow(inset 0 1px 2px rgba(0,0,0,.1));\n}\n\n// Bar of progress\n.progress-bar {\n  float: left;\n  width: 0%;\n  height: 100%;\n  font-size: @font-size-small;\n  line-height: @line-height-computed;\n  color: @progress-bar-color;\n  text-align: center;\n  background-color: @progress-bar-bg;\n  .box-shadow(inset 0 -1px 0 rgba(0,0,0,.15));\n  .transition(width .6s ease);\n}\n\n// Striped bars\n//\n// `.progress-striped .progress-bar` is deprecated as of v3.2.0 in favor of the\n// `.progress-bar-striped` class, which you just add to an existing\n// `.progress-bar`.\n.progress-striped .progress-bar,\n.progress-bar-striped {\n  #gradient > .striped();\n  background-size: 40px 40px;\n}\n\n// Call animation for the active one\n//\n// `.progress.active .progress-bar` is deprecated as of v3.2.0 in favor of the\n// `.progress-bar.active` approach.\n.progress.active .progress-bar,\n.progress-bar.active {\n  .animation(progress-bar-stripes 2s linear infinite);\n}\n\n// Account for lower percentages\n.progress-bar {\n  &[aria-valuenow=\"1\"],\n  &[aria-valuenow=\"2\"] {\n    min-width: 30px;\n  }\n\n  &[aria-valuenow=\"0\"] {\n    color: @gray-light;\n    min-width: 30px;\n    background-color: transparent;\n    background-image: none;\n    box-shadow: none;\n  }\n}\n\n\n\n// Variations\n// -------------------------\n\n.progress-bar-success {\n  .progress-bar-variant(@progress-bar-success-bg);\n}\n\n.progress-bar-info {\n  .progress-bar-variant(@progress-bar-info-bg);\n}\n\n.progress-bar-warning {\n  .progress-bar-variant(@progress-bar-warning-bg);\n}\n\n.progress-bar-danger {\n  .progress-bar-variant(@progress-bar-danger-bg);\n}\n"
  },
  {
    "path": "themes/bootstrap-2/less/responsive-embed.less",
    "content": "// Embeds responsive\n//\n// Credit: Nicolas Gallagher and SUIT CSS.\n\n.embed-responsive {\n  position: relative;\n  display: block;\n  height: 0;\n  padding: 0;\n  overflow: hidden;\n\n  .embed-responsive-item,\n  iframe,\n  embed,\n  object {\n    position: absolute;\n    top: 0;\n    left: 0;\n    bottom: 0;\n    height: 100%;\n    width: 100%;\n    border: 0;\n  }\n\n  // Modifier class for 16:9 aspect ratio\n  &.embed-responsive-16by9 {\n    padding-bottom: 56.25%;\n  }\n\n  // Modifier class for 4:3 aspect ratio\n  &.embed-responsive-4by3 {\n    padding-bottom: 75%;\n  }\n}\n"
  },
  {
    "path": "themes/bootstrap-2/less/responsive-utilities.less",
    "content": "//\n// Responsive: Utility classes\n// --------------------------------------------------\n\n\n// IE10 in Windows (Phone) 8\n//\n// Support for responsive views via media queries is kind of borked in IE10, for\n// Surface/desktop in split view and for Windows Phone 8. This particular fix\n// must be accompanied by a snippet of JavaScript to sniff the user agent and\n// apply some conditional CSS to *only* the Surface/desktop Windows 8. Look at\n// our Getting Started page for more information on this bug.\n//\n// For more information, see the following:\n//\n// Issue: https://github.com/twbs/bootstrap/issues/10497\n// Docs: http://getbootstrap.com/getting-started/#support-ie10-width\n// Source: http://timkadlec.com/2013/01/windows-phone-8-and-device-width/\n// Source: http://timkadlec.com/2012/10/ie10-snap-mode-and-responsive-design/\n\n@-ms-viewport {\n  width: device-width;\n}\n\n\n// Visibility utilities\n// Note: Deprecated .visible-xs, .visible-sm, .visible-md, and .visible-lg as of v3.2.0\n.visible-xs,\n.visible-sm,\n.visible-md,\n.visible-lg {\n  .responsive-invisibility();\n}\n\n.visible-xs-block,\n.visible-xs-inline,\n.visible-xs-inline-block,\n.visible-sm-block,\n.visible-sm-inline,\n.visible-sm-inline-block,\n.visible-md-block,\n.visible-md-inline,\n.visible-md-inline-block,\n.visible-lg-block,\n.visible-lg-inline,\n.visible-lg-inline-block {\n  display: none !important;\n}\n\n.visible-xs {\n  @media (max-width: @screen-xs-max) {\n    .responsive-visibility();\n  }\n}\n.visible-xs-block {\n  @media (max-width: @screen-xs-max) {\n    display: block !important;\n  }\n}\n.visible-xs-inline {\n  @media (max-width: @screen-xs-max) {\n    display: inline !important;\n  }\n}\n.visible-xs-inline-block {\n  @media (max-width: @screen-xs-max) {\n    display: inline-block !important;\n  }\n}\n\n.visible-sm {\n  @media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) {\n    .responsive-visibility();\n  }\n}\n.visible-sm-block {\n  @media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) {\n    display: block !important;\n  }\n}\n.visible-sm-inline {\n  @media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) {\n    display: inline !important;\n  }\n}\n.visible-sm-inline-block {\n  @media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) {\n    display: inline-block !important;\n  }\n}\n\n.visible-md {\n  @media (min-width: @screen-md-min) and (max-width: @screen-md-max) {\n    .responsive-visibility();\n  }\n}\n.visible-md-block {\n  @media (min-width: @screen-md-min) and (max-width: @screen-md-max) {\n    display: block !important;\n  }\n}\n.visible-md-inline {\n  @media (min-width: @screen-md-min) and (max-width: @screen-md-max) {\n    display: inline !important;\n  }\n}\n.visible-md-inline-block {\n  @media (min-width: @screen-md-min) and (max-width: @screen-md-max) {\n    display: inline-block !important;\n  }\n}\n\n.visible-lg {\n  @media (min-width: @screen-lg-min) {\n    .responsive-visibility();\n  }\n}\n.visible-lg-block {\n  @media (min-width: @screen-lg-min) {\n    display: block !important;\n  }\n}\n.visible-lg-inline {\n  @media (min-width: @screen-lg-min) {\n    display: inline !important;\n  }\n}\n.visible-lg-inline-block {\n  @media (min-width: @screen-lg-min) {\n    display: inline-block !important;\n  }\n}\n\n.hidden-xs {\n  @media (max-width: @screen-xs-max) {\n    .responsive-invisibility();\n  }\n}\n.hidden-sm {\n  @media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) {\n    .responsive-invisibility();\n  }\n}\n.hidden-md {\n  @media (min-width: @screen-md-min) and (max-width: @screen-md-max) {\n    .responsive-invisibility();\n  }\n}\n.hidden-lg {\n  @media (min-width: @screen-lg-min) {\n    .responsive-invisibility();\n  }\n}\n\n\n// Print utilities\n//\n// Media queries are placed on the inside to be mixin-friendly.\n\n// Note: Deprecated .visible-print as of v3.2.0\n.visible-print {\n  .responsive-invisibility();\n\n  @media print {\n    .responsive-visibility();\n  }\n}\n.visible-print-block {\n  display: none !important;\n\n  @media print {\n    display: block !important;\n  }\n}\n.visible-print-inline {\n  display: none !important;\n\n  @media print {\n    display: inline !important;\n  }\n}\n.visible-print-inline-block {\n  display: none !important;\n\n  @media print {\n    display: inline-block !important;\n  }\n}\n\n.hidden-print {\n  @media print {\n    .responsive-invisibility();\n  }\n}\n"
  },
  {
    "path": "themes/bootstrap-2/less/scaffolding.less",
    "content": "//\n// Scaffolding\n// --------------------------------------------------\n\n\n// Reset the box-sizing\n//\n// Heads up! This reset may cause conflicts with some third-party widgets.\n// For recommendations on resolving such conflicts, see\n// http://getbootstrap.com/getting-started/#third-box-sizing\n* {\n  .box-sizing(border-box);\n}\n*:before,\n*:after {\n  .box-sizing(border-box);\n}\n\n\n// Body reset\n\nhtml {\n  font-size: 10px;\n  -webkit-tap-highlight-color: rgba(0,0,0,0);\n}\n\nbody {\n  font-family: @font-family-base;\n  font-size: @font-size-base;\n  line-height: @line-height-base;\n  color: @text-color;\n  background-color: @body-bg;\n}\n\n// Reset fonts for relevant elements\ninput,\nbutton,\nselect,\ntextarea {\n  font-family: inherit;\n  font-size: inherit;\n  line-height: inherit;\n}\n\n\n// Links\n\na {\n  color: @link-color;\n  text-decoration: none;\n\n  &:hover,\n  &:focus {\n    color: @link-hover-color;\n    text-decoration: underline;\n  }\n\n  &:focus {\n    .tab-focus();\n  }\n}\n\n\n// Figures\n//\n// We reset this here because previously Normalize had no `figure` margins. This\n// ensures we don't break anyone's use of the element.\n\nfigure {\n  margin: 0;\n}\n\n\n// Images\n\nimg {\n  vertical-align: middle;\n}\n\n// Responsive images (ensure images don't scale beyond their parents)\n.img-responsive {\n  .img-responsive();\n}\n\n// Rounded corners\n.img-rounded {\n  border-radius: @border-radius-large;\n}\n\n// Image thumbnails\n//\n// Heads up! This is mixin-ed into thumbnails.less for `.thumbnail`.\n.img-thumbnail {\n  padding: @thumbnail-padding;\n  line-height: @line-height-base;\n  background-color: @thumbnail-bg;\n  border: 1px solid @thumbnail-border;\n  border-radius: @thumbnail-border-radius;\n  .transition(all .2s ease-in-out);\n\n  // Keep them at most 100% wide\n  .img-responsive(inline-block);\n}\n\n// Perfect circle\n.img-circle {\n  border-radius: 50%; // set radius in percents\n}\n\n\n// Horizontal rules\n\nhr {\n  margin-top:    @line-height-computed;\n  margin-bottom: @line-height-computed;\n  border: 0;\n  border-top: 1px solid @hr-border;\n}\n\n\n// Only display content to screen readers\n//\n// See: http://a11yproject.com/posts/how-to-hide-content/\n\n.sr-only {\n  position: absolute;\n  width: 1px;\n  height: 1px;\n  margin: -1px;\n  padding: 0;\n  overflow: hidden;\n  clip: rect(0,0,0,0);\n  border: 0;\n}\n\n// Use in conjunction with .sr-only to only display content when it's focused.\n// Useful for \"Skip to main content\" links; see http://www.w3.org/TR/2013/NOTE-WCAG20-TECHS-20130905/G1\n// Credit: HTML5 Boilerplate\n\n.sr-only-focusable {\n  &:active,\n  &:focus {\n    position: static;\n    width: auto;\n    height: auto;\n    margin: 0;\n    overflow: visible;\n    clip: auto;\n  }\n}\n"
  },
  {
    "path": "themes/bootstrap-2/less/tables.less",
    "content": "//\n// Tables\n// --------------------------------------------------\n\n\ntable {\n  background-color: @table-bg;\n}\nth {\n  text-align: left;\n}\n\n\n// Baseline styles\n\n.table {\n  width: 100%;\n  max-width: 100%;\n  margin-bottom: @line-height-computed;\n  // Cells\n  > thead,\n  > tbody,\n  > tfoot {\n    > tr {\n      > th,\n      > td {\n        padding: @table-cell-padding;\n        line-height: @line-height-base;\n        vertical-align: top;\n        border-top: 1px solid @table-border-color;\n      }\n    }\n  }\n  // Bottom align for column headings\n  > thead > tr > th {\n    vertical-align: bottom;\n    border-bottom: 2px solid @table-border-color;\n  }\n  // Remove top border from thead by default\n  > caption + thead,\n  > colgroup + thead,\n  > thead:first-child {\n    > tr:first-child {\n      > th,\n      > td {\n        border-top: 0;\n      }\n    }\n  }\n  // Account for multiple tbody instances\n  > tbody + tbody {\n    border-top: 2px solid @table-border-color;\n  }\n\n  // Nesting\n  .table {\n    background-color: @body-bg;\n  }\n}\n\n\n// Condensed table w/ half padding\n\n.table-condensed {\n  > thead,\n  > tbody,\n  > tfoot {\n    > tr {\n      > th,\n      > td {\n        padding: @table-condensed-cell-padding;\n      }\n    }\n  }\n}\n\n\n// Bordered version\n//\n// Add borders all around the table and between all the columns.\n\n.table-bordered {\n  border: 1px solid @table-border-color;\n  > thead,\n  > tbody,\n  > tfoot {\n    > tr {\n      > th,\n      > td {\n        border: 1px solid @table-border-color;\n      }\n    }\n  }\n  > thead > tr {\n    > th,\n    > td {\n      border-bottom-width: 2px;\n    }\n  }\n}\n\n\n// Zebra-striping\n//\n// Default zebra-stripe styles (alternating gray and transparent backgrounds)\n\n.table-striped {\n  > tbody > tr:nth-child(odd) {\n    > td,\n    > th {\n      background-color: @table-bg-accent;\n    }\n  }\n}\n\n\n// Hover effect\n//\n// Placed here since it has to come after the potential zebra striping\n\n.table-hover {\n  > tbody > tr:hover {\n    > td,\n    > th {\n      background-color: @table-bg-hover;\n    }\n  }\n}\n\n\n// Table cell sizing\n//\n// Reset default table behavior\n\ntable col[class*=\"col-\"] {\n  position: static; // Prevent border hiding in Firefox and IE9/10 (see https://github.com/twbs/bootstrap/issues/11623)\n  float: none;\n  display: table-column;\n}\ntable {\n  td,\n  th {\n    &[class*=\"col-\"] {\n      position: static; // Prevent border hiding in Firefox and IE9/10 (see https://github.com/twbs/bootstrap/issues/11623)\n      float: none;\n      display: table-cell;\n    }\n  }\n}\n\n\n// Table backgrounds\n//\n// Exact selectors below required to override `.table-striped` and prevent\n// inheritance to nested tables.\n\n// Generate the contextual variants\n.table-row-variant(active; @table-bg-active);\n.table-row-variant(success; @state-success-bg);\n.table-row-variant(info; @state-info-bg);\n.table-row-variant(warning; @state-warning-bg);\n.table-row-variant(danger; @state-danger-bg);\n\n\n// Responsive tables\n//\n// Wrap your tables in `.table-responsive` and we'll make them mobile friendly\n// by enabling horizontal scrolling. Only applies <768px. Everything above that\n// will display normally.\n\n.table-responsive {\n  @media screen and (max-width: @screen-xs-max) {\n    width: 100%;\n    margin-bottom: (@line-height-computed * 0.75);\n    overflow-y: hidden;\n    overflow-x: auto;\n    -ms-overflow-style: -ms-autohiding-scrollbar;\n    border: 1px solid @table-border-color;\n    -webkit-overflow-scrolling: touch;\n\n    // Tighten up spacing\n    > .table {\n      margin-bottom: 0;\n\n      // Ensure the content doesn't wrap\n      > thead,\n      > tbody,\n      > tfoot {\n        > tr {\n          > th,\n          > td {\n            white-space: nowrap;\n          }\n        }\n      }\n    }\n\n    // Special overrides for the bordered tables\n    > .table-bordered {\n      border: 0;\n\n      // Nuke the appropriate borders so that the parent can handle them\n      > thead,\n      > tbody,\n      > tfoot {\n        > tr {\n          > th:first-child,\n          > td:first-child {\n            border-left: 0;\n          }\n          > th:last-child,\n          > td:last-child {\n            border-right: 0;\n          }\n        }\n      }\n\n      // Only nuke the last row's bottom-border in `tbody` and `tfoot` since\n      // chances are there will be only one `tr` in a `thead` and that would\n      // remove the border altogether.\n      > tbody,\n      > tfoot {\n        > tr:last-child {\n          > th,\n          > td {\n            border-bottom: 0;\n          }\n        }\n      }\n\n    }\n  }\n}\n"
  },
  {
    "path": "themes/bootstrap-2/less/theme.less",
    "content": "\n//\n// Load core variables and mixins\n// --------------------------------------------------\n\n@import \"variables.less\";\n@import \"mixins.less\";\n\n\n\n//\n// Buttons\n// --------------------------------------------------\n\n// Common styles\n.btn-default,\n.btn-primary,\n.btn-success,\n.btn-info,\n.btn-warning,\n.btn-danger {\n  text-shadow: 0 -1px 0 rgba(0,0,0,.2);\n  @shadow: inset 0 1px 0 rgba(255,255,255,.15), 0 1px 1px rgba(0,0,0,.075);\n  .box-shadow(@shadow);\n\n  // Reset the shadow\n  &:active,\n  &.active {\n    .box-shadow(inset 0 3px 5px rgba(0,0,0,.125));\n  }\n}\n\n// Mixin for generating new styles\n.btn-styles(@btn-color: #555) {\n  #gradient > .vertical(@start-color: @btn-color; @end-color: darken(@btn-color, 12%));\n  .reset-filter(); // Disable gradients for IE9 because filter bleeds through rounded corners\n  background-repeat: repeat-x;\n  border-color: darken(@btn-color, 14%);\n\n  &:hover,\n  &:focus  {\n    background-color: darken(@btn-color, 12%);\n    background-position: 0 -15px;\n  }\n\n  &:active,\n  &.active {\n    background-color: darken(@btn-color, 12%);\n    border-color: darken(@btn-color, 14%);\n  }\n\n  &:disabled,\n  &[disabled] {\n    background-color: darken(@btn-color, 12%);\n    background-image: none;\n  }\n}\n\n// Common styles\n.btn {\n  // Remove the gradient for the pressed/active state\n  &:active,\n  &.active {\n    background-image: none;\n  }\n}\n\n// Apply the mixin to the buttons\n.btn-default { .btn-styles(@btn-default-bg); text-shadow: 0 1px 0 #fff; border-color: #ccc; }\n.btn-primary { .btn-styles(@btn-primary-bg); }\n.btn-success { .btn-styles(@btn-success-bg); }\n.btn-info    { .btn-styles(@btn-info-bg); }\n.btn-warning { .btn-styles(@btn-warning-bg); }\n.btn-danger  { .btn-styles(@btn-danger-bg); }\n\n\n\n//\n// Images\n// --------------------------------------------------\n\n.thumbnail,\n.img-thumbnail {\n  .box-shadow(0 1px 2px rgba(0,0,0,.075));\n}\n\n\n\n//\n// Dropdowns\n// --------------------------------------------------\n\n.dropdown-menu > li > a:hover,\n.dropdown-menu > li > a:focus {\n  #gradient > .vertical(@start-color: @dropdown-link-hover-bg; @end-color: darken(@dropdown-link-hover-bg, 5%));\n  background-color: darken(@dropdown-link-hover-bg, 5%);\n}\n.dropdown-menu > .active > a,\n.dropdown-menu > .active > a:hover,\n.dropdown-menu > .active > a:focus {\n  #gradient > .vertical(@start-color: @dropdown-link-active-bg; @end-color: darken(@dropdown-link-active-bg, 5%));\n  background-color: darken(@dropdown-link-active-bg, 5%);\n}\n\n\n\n//\n// Navbar\n// --------------------------------------------------\n\n// Default navbar\n.navbar-default {\n  #gradient > .vertical(@start-color: lighten(@navbar-default-bg, 10%); @end-color: @navbar-default-bg);\n  .reset-filter(); // Remove gradient in IE<10 to fix bug where dropdowns don't get triggered\n  border-radius: @navbar-border-radius;\n  @shadow: inset 0 1px 0 rgba(255,255,255,.15), 0 1px 5px rgba(0,0,0,.075);\n  .box-shadow(@shadow);\n\n  .navbar-nav > .active > a {\n    #gradient > .vertical(@start-color: darken(@navbar-default-bg, 5%); @end-color: darken(@navbar-default-bg, 2%));\n    .box-shadow(inset 0 3px 9px rgba(0,0,0,.075));\n  }\n}\n.navbar-brand,\n.navbar-nav > li > a {\n  text-shadow: 0 1px 0 rgba(255,255,255,.25);\n}\n\n// Inverted navbar\n.navbar-inverse {\n  #gradient > .vertical(@start-color: lighten(@navbar-inverse-bg, 10%); @end-color: @navbar-inverse-bg);\n  .reset-filter(); // Remove gradient in IE<10 to fix bug where dropdowns don't get triggered\n\n  .navbar-nav > .active > a {\n    #gradient > .vertical(@start-color: @navbar-inverse-bg; @end-color: lighten(@navbar-inverse-bg, 2.5%));\n    .box-shadow(inset 0 3px 9px rgba(0,0,0,.25));\n  }\n\n  .navbar-brand,\n  .navbar-nav > li > a {\n    text-shadow: 0 -1px 0 rgba(0,0,0,.25);\n  }\n}\n\n// Undo rounded corners in static and fixed navbars\n.navbar-static-top,\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n  border-radius: 0;\n}\n\n\n\n//\n// Alerts\n// --------------------------------------------------\n\n// Common styles\n.alert {\n  text-shadow: 0 1px 0 rgba(255,255,255,.2);\n  @shadow: inset 0 1px 0 rgba(255,255,255,.25), 0 1px 2px rgba(0,0,0,.05);\n  .box-shadow(@shadow);\n}\n\n// Mixin for generating new styles\n.alert-styles(@color) {\n  #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 7.5%));\n  border-color: darken(@color, 15%);\n}\n\n// Apply the mixin to the alerts\n.alert-success    { .alert-styles(@alert-success-bg); }\n.alert-info       { .alert-styles(@alert-info-bg); }\n.alert-warning    { .alert-styles(@alert-warning-bg); }\n.alert-danger     { .alert-styles(@alert-danger-bg); }\n\n\n\n//\n// Progress bars\n// --------------------------------------------------\n\n// Give the progress background some depth\n.progress {\n  #gradient > .vertical(@start-color: darken(@progress-bg, 4%); @end-color: @progress-bg)\n}\n\n// Mixin for generating new styles\n.progress-bar-styles(@color) {\n  #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 10%));\n}\n\n// Apply the mixin to the progress bars\n.progress-bar            { .progress-bar-styles(@progress-bar-bg); }\n.progress-bar-success    { .progress-bar-styles(@progress-bar-success-bg); }\n.progress-bar-info       { .progress-bar-styles(@progress-bar-info-bg); }\n.progress-bar-warning    { .progress-bar-styles(@progress-bar-warning-bg); }\n.progress-bar-danger     { .progress-bar-styles(@progress-bar-danger-bg); }\n\n// Reset the striped class because our mixins don't do multiple gradients and\n// the above custom styles override the new `.progress-bar-striped` in v3.2.0.\n.progress-bar-striped {\n  #gradient > .striped();\n}\n\n\n//\n// List groups\n// --------------------------------------------------\n\n.list-group {\n  border-radius: @border-radius-base;\n  .box-shadow(0 1px 2px rgba(0,0,0,.075));\n}\n.list-group-item.active,\n.list-group-item.active:hover,\n.list-group-item.active:focus {\n  text-shadow: 0 -1px 0 darken(@list-group-active-bg, 10%);\n  #gradient > .vertical(@start-color: @list-group-active-bg; @end-color: darken(@list-group-active-bg, 7.5%));\n  border-color: darken(@list-group-active-border, 7.5%);\n}\n\n\n\n//\n// Panels\n// --------------------------------------------------\n\n// Common styles\n.panel {\n  .box-shadow(0 1px 2px rgba(0,0,0,.05));\n}\n\n// Mixin for generating new styles\n.panel-heading-styles(@color) {\n  #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 5%));\n}\n\n// Apply the mixin to the panel headings only\n.panel-default > .panel-heading   { .panel-heading-styles(@panel-default-heading-bg); }\n.panel-primary > .panel-heading   { .panel-heading-styles(@panel-primary-heading-bg); }\n.panel-success > .panel-heading   { .panel-heading-styles(@panel-success-heading-bg); }\n.panel-info > .panel-heading      { .panel-heading-styles(@panel-info-heading-bg); }\n.panel-warning > .panel-heading   { .panel-heading-styles(@panel-warning-heading-bg); }\n.panel-danger > .panel-heading    { .panel-heading-styles(@panel-danger-heading-bg); }\n\n\n\n//\n// Wells\n// --------------------------------------------------\n\n.well {\n  #gradient > .vertical(@start-color: darken(@well-bg, 5%); @end-color: @well-bg);\n  border-color: darken(@well-bg, 10%);\n  @shadow: inset 0 1px 3px rgba(0,0,0,.05), 0 1px 0 rgba(255,255,255,.1);\n  .box-shadow(@shadow);\n}\n"
  },
  {
    "path": "themes/bootstrap-2/less/thumbnails.less",
    "content": "//\n// Thumbnails\n// --------------------------------------------------\n\n\n// Mixin and adjust the regular image class\n.thumbnail {\n  display: block;\n  padding: @thumbnail-padding;\n  margin-bottom: @line-height-computed;\n  line-height: @line-height-base;\n  background-color: @thumbnail-bg;\n  border: 1px solid @thumbnail-border;\n  border-radius: @thumbnail-border-radius;\n  .transition(all .2s ease-in-out);\n\n  > img,\n  a > img {\n    &:extend(.img-responsive);\n    margin-left: auto;\n    margin-right: auto;\n  }\n\n  // Add a hover state for linked versions only\n  a&:hover,\n  a&:focus,\n  a&.active {\n    border-color: @link-color;\n  }\n\n  // Image captions\n  .caption {\n    padding: @thumbnail-caption-padding;\n    color: @thumbnail-caption-color;\n  }\n}\n"
  },
  {
    "path": "themes/bootstrap-2/less/tooltip.less",
    "content": "//\n// Tooltips\n// --------------------------------------------------\n\n\n// Base class\n.tooltip {\n  position: absolute;\n  z-index: @zindex-tooltip;\n  display: block;\n  visibility: visible;\n  font-size: @font-size-small;\n  line-height: 1.4;\n  .opacity(0);\n\n  &.in     { .opacity(@tooltip-opacity); }\n  &.top    { margin-top:  -3px; padding: @tooltip-arrow-width 0; }\n  &.right  { margin-left:  3px; padding: 0 @tooltip-arrow-width; }\n  &.bottom { margin-top:   3px; padding: @tooltip-arrow-width 0; }\n  &.left   { margin-left: -3px; padding: 0 @tooltip-arrow-width; }\n}\n\n// Wrapper for the tooltip content\n.tooltip-inner {\n  max-width: @tooltip-max-width;\n  padding: 3px 8px;\n  color: @tooltip-color;\n  text-align: center;\n  text-decoration: none;\n  background-color: @tooltip-bg;\n  border-radius: @border-radius-base;\n}\n\n// Arrows\n.tooltip-arrow {\n  position: absolute;\n  width: 0;\n  height: 0;\n  border-color: transparent;\n  border-style: solid;\n}\n.tooltip {\n  &.top .tooltip-arrow {\n    bottom: 0;\n    left: 50%;\n    margin-left: -@tooltip-arrow-width;\n    border-width: @tooltip-arrow-width @tooltip-arrow-width 0;\n    border-top-color: @tooltip-arrow-color;\n  }\n  &.top-left .tooltip-arrow {\n    bottom: 0;\n    left: @tooltip-arrow-width;\n    border-width: @tooltip-arrow-width @tooltip-arrow-width 0;\n    border-top-color: @tooltip-arrow-color;\n  }\n  &.top-right .tooltip-arrow {\n    bottom: 0;\n    right: @tooltip-arrow-width;\n    border-width: @tooltip-arrow-width @tooltip-arrow-width 0;\n    border-top-color: @tooltip-arrow-color;\n  }\n  &.right .tooltip-arrow {\n    top: 50%;\n    left: 0;\n    margin-top: -@tooltip-arrow-width;\n    border-width: @tooltip-arrow-width @tooltip-arrow-width @tooltip-arrow-width 0;\n    border-right-color: @tooltip-arrow-color;\n  }\n  &.left .tooltip-arrow {\n    top: 50%;\n    right: 0;\n    margin-top: -@tooltip-arrow-width;\n    border-width: @tooltip-arrow-width 0 @tooltip-arrow-width @tooltip-arrow-width;\n    border-left-color: @tooltip-arrow-color;\n  }\n  &.bottom .tooltip-arrow {\n    top: 0;\n    left: 50%;\n    margin-left: -@tooltip-arrow-width;\n    border-width: 0 @tooltip-arrow-width @tooltip-arrow-width;\n    border-bottom-color: @tooltip-arrow-color;\n  }\n  &.bottom-left .tooltip-arrow {\n    top: 0;\n    left: @tooltip-arrow-width;\n    border-width: 0 @tooltip-arrow-width @tooltip-arrow-width;\n    border-bottom-color: @tooltip-arrow-color;\n  }\n  &.bottom-right .tooltip-arrow {\n    top: 0;\n    right: @tooltip-arrow-width;\n    border-width: 0 @tooltip-arrow-width @tooltip-arrow-width;\n    border-bottom-color: @tooltip-arrow-color;\n  }\n}\n"
  },
  {
    "path": "themes/bootstrap-2/less/type.less",
    "content": "//\n// Typography\n// --------------------------------------------------\n\n\n// Headings\n// -------------------------\n\nh1, h2, h3, h4, h5, h6,\n.h1, .h2, .h3, .h4, .h5, .h6 {\n  font-family: @headings-font-family;\n  font-weight: @headings-font-weight;\n  line-height: @headings-line-height;\n  color: @headings-color;\n\n  small,\n  .small {\n    font-weight: normal;\n    line-height: 1;\n    color: @headings-small-color;\n  }\n}\n\nh1, .h1,\nh2, .h2,\nh3, .h3 {\n  margin-top: @line-height-computed;\n  margin-bottom: (@line-height-computed / 2);\n\n  small,\n  .small {\n    font-size: 65%;\n  }\n}\nh4, .h4,\nh5, .h5,\nh6, .h6 {\n  margin-top: (@line-height-computed / 2);\n  margin-bottom: (@line-height-computed / 2);\n\n  small,\n  .small {\n    font-size: 75%;\n  }\n}\n\nh1, .h1 { font-size: @font-size-h1; }\nh2, .h2 { font-size: @font-size-h2; }\nh3, .h3 { font-size: @font-size-h3; }\nh4, .h4 { font-size: @font-size-h4; }\nh5, .h5 { font-size: @font-size-h5; }\nh6, .h6 { font-size: @font-size-h6; }\n\n\n// Body text\n// -------------------------\n\np {\n  margin: 0 0 (@line-height-computed / 2);\n}\n\n.lead {\n  margin-bottom: @line-height-computed;\n  font-size: floor((@font-size-base * 1.15));\n  font-weight: 300;\n  line-height: 1.4;\n\n  @media (min-width: @screen-sm-min) {\n    font-size: (@font-size-base * 1.5);\n  }\n}\n\n\n// Emphasis & misc\n// -------------------------\n\n// Ex: (12px small font / 14px base font) * 100% = about 85%\nsmall,\n.small {\n  font-size: floor((100% * @font-size-small / @font-size-base));\n}\n\n// Undo browser default styling\ncite {\n  font-style: normal;\n}\n\nmark,\n.mark {\n  background-color: @state-warning-bg;\n  padding: .2em;\n}\n\n// Alignment\n.text-left           { text-align: left; }\n.text-right          { text-align: right; }\n.text-center         { text-align: center; }\n.text-justify        { text-align: justify; }\n.text-nowrap         { white-space: nowrap; }\n\n// Transformation\n.text-lowercase      { text-transform: lowercase; }\n.text-uppercase      { text-transform: uppercase; }\n.text-capitalize     { text-transform: capitalize; }\n\n// Contextual colors\n.text-muted {\n  color: @text-muted;\n}\n.text-primary {\n  .text-emphasis-variant(@brand-primary);\n}\n.text-success {\n  .text-emphasis-variant(@state-success-text);\n}\n.text-info {\n  .text-emphasis-variant(@state-info-text);\n}\n.text-warning {\n  .text-emphasis-variant(@state-warning-text);\n}\n.text-danger {\n  .text-emphasis-variant(@state-danger-text);\n}\n\n// Contextual backgrounds\n// For now we'll leave these alongside the text classes until v4 when we can\n// safely shift things around (per SemVer rules).\n.bg-primary {\n  // Given the contrast here, this is the only class to have its color inverted\n  // automatically.\n  color: #fff;\n  .bg-variant(@brand-primary);\n}\n.bg-success {\n  .bg-variant(@state-success-bg);\n}\n.bg-info {\n  .bg-variant(@state-info-bg);\n}\n.bg-warning {\n  .bg-variant(@state-warning-bg);\n}\n.bg-danger {\n  .bg-variant(@state-danger-bg);\n}\n\n\n// Page header\n// -------------------------\n\n.page-header {\n  padding-bottom: ((@line-height-computed / 2) - 1);\n  margin: (@line-height-computed * 2) 0 @line-height-computed;\n  border-bottom: 1px solid @page-header-border-color;\n}\n\n\n// Lists\n// -------------------------\n\n// Unordered and Ordered lists\nul,\nol {\n  margin-top: 0;\n  margin-bottom: (@line-height-computed / 2);\n  ul,\n  ol {\n    margin-bottom: 0;\n  }\n}\n\n// List options\n\n// Unstyled keeps list items block level, just removes default browser padding and list-style\n.list-unstyled {\n  padding-left: 0;\n  list-style: none;\n}\n\n// Inline turns list items into inline-block\n.list-inline {\n  .list-unstyled();\n  margin-left: -5px;\n\n  > li {\n    display: inline-block;\n    padding-left: 5px;\n    padding-right: 5px;\n  }\n}\n\n// Description Lists\ndl {\n  margin-top: 0; // Remove browser default\n  margin-bottom: @line-height-computed;\n}\ndt,\ndd {\n  line-height: @line-height-base;\n}\ndt {\n  font-weight: bold;\n}\ndd {\n  margin-left: 0; // Undo browser default\n}\n\n// Horizontal description lists\n//\n// Defaults to being stacked without any of the below styles applied, until the\n// grid breakpoint is reached (default of ~768px).\n\n.dl-horizontal {\n  dd {\n    &:extend(.clearfix all); // Clear the floated `dt` if an empty `dd` is present\n  }\n\n  @media (min-width: @grid-float-breakpoint) {\n    dt {\n      float: left;\n      width: (@dl-horizontal-offset - 20);\n      clear: left;\n      text-align: right;\n      .text-overflow();\n    }\n    dd {\n      margin-left: @dl-horizontal-offset;\n    }\n  }\n}\n\n\n// Misc\n// -------------------------\n\n// Abbreviations and acronyms\nabbr[title],\n// Add data-* attribute to help out our tooltip plugin, per https://github.com/twbs/bootstrap/issues/5257\nabbr[data-original-title] {\n  cursor: help;\n  border-bottom: 1px dotted @abbr-border-color;\n}\n.initialism {\n  font-size: 90%;\n  text-transform: uppercase;\n}\n\n// Blockquotes\nblockquote {\n  padding: (@line-height-computed / 2) @line-height-computed;\n  margin: 0 0 @line-height-computed;\n  font-size: @blockquote-font-size;\n  border-left: 5px solid @blockquote-border-color;\n\n  p,\n  ul,\n  ol {\n    &:last-child {\n      margin-bottom: 0;\n    }\n  }\n\n  // Note: Deprecated small and .small as of v3.1.0\n  // Context: https://github.com/twbs/bootstrap/issues/11660\n  footer,\n  small,\n  .small {\n    display: block;\n    font-size: 80%; // back to default font-size\n    line-height: @line-height-base;\n    color: @blockquote-small-color;\n\n    &:before {\n      content: '\\2014 \\00A0'; // em dash, nbsp\n    }\n  }\n}\n\n// Opposite alignment of blockquote\n//\n// Heads up: `blockquote.pull-right` has been deprecated as of v3.1.0.\n.blockquote-reverse,\nblockquote.pull-right {\n  padding-right: 15px;\n  padding-left: 0;\n  border-right: 5px solid @blockquote-border-color;\n  border-left: 0;\n  text-align: right;\n\n  // Account for citation\n  footer,\n  small,\n  .small {\n    &:before { content: ''; }\n    &:after {\n      content: '\\00A0 \\2014'; // nbsp, em dash\n    }\n  }\n}\n\n// Quotes\nblockquote:before,\nblockquote:after {\n  content: \"\";\n}\n\n// Addresses\naddress {\n  margin-bottom: @line-height-computed;\n  font-style: normal;\n  line-height: @line-height-base;\n}\n"
  },
  {
    "path": "themes/bootstrap-2/less/utilities.less",
    "content": "//\n// Utility classes\n// --------------------------------------------------\n\n\n// Floats\n// -------------------------\n\n.clearfix {\n  .clearfix();\n}\n.center-block {\n  .center-block();\n}\n.pull-right {\n  float: right !important;\n}\n.pull-left {\n  float: left !important;\n}\n\n\n// Toggling content\n// -------------------------\n\n// Note: Deprecated .hide in favor of .hidden or .sr-only (as appropriate) in v3.0.1\n.hide {\n  display: none !important;\n}\n.show {\n  display: block !important;\n}\n.invisible {\n  visibility: hidden;\n}\n.text-hide {\n  .text-hide();\n}\n\n\n// Hide from screenreaders and browsers\n//\n// Credit: HTML5 Boilerplate\n\n.hidden {\n  display: none !important;\n  visibility: hidden !important;\n}\n\n\n// For Affix plugin\n// -------------------------\n\n.affix {\n  position: fixed;\n  .translate3d(0, 0, 0);\n}\n"
  },
  {
    "path": "themes/bootstrap-2/less/variables.less",
    "content": "//\n// Variables\n// --------------------------------------------------\n\n\n//== Colors\n//\n//## Gray and brand colors for use across Bootstrap.\n\n@gray-darker:            lighten(#000, 13.5%); // #222\n@gray-dark:              lighten(#000, 20%);   // #333\n@gray:                   lighten(#000, 33.5%); // #555\n@gray-light:             lighten(#000, 46.7%); // #777\n@gray-lighter:           lighten(#000, 93.5%); // #eee\n\n@brand-primary:         #428bca;\n@brand-success:         #5cb85c;\n@brand-info:            #5bc0de;\n@brand-warning:         #f0ad4e;\n@brand-danger:          #d9534f;\n\n\n//== Scaffolding\n//\n//## Settings for some of the most global styles.\n\n//** Background color for `<body>`.\n@body-bg:               #fff;\n//** Global text color on `<body>`.\n@text-color:            @gray-dark;\n\n//** Global textual link color.\n@link-color:            @brand-primary;\n//** Link hover color set via `darken()` function.\n@link-hover-color:      darken(@link-color, 15%);\n\n\n//== Typography\n//\n//## Font, line-height, and color for body text, headings, and more.\n\n@font-family-sans-serif:  \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n@font-family-serif:       Georgia, \"Times New Roman\", Times, serif;\n//** Default monospace fonts for `<code>`, `<kbd>`, and `<pre>`.\n@font-family-monospace:   Menlo, Monaco, Consolas, \"Courier New\", monospace;\n@font-family-base:        @font-family-sans-serif;\n\n@font-size-base:          18px;\n@font-size-large:         ceil((@font-size-base * 1.25)); // ~18px\n@font-size-small:         ceil((@font-size-base * 0.85)); // ~12px\n\n@font-size-h1:            floor((@font-size-base * 2.6)); // ~36px\n@font-size-h2:            floor((@font-size-base * 2.15)); // ~30px\n@font-size-h3:            ceil((@font-size-base * 1.7)); // ~24px\n@font-size-h4:            ceil((@font-size-base * 1.25)); // ~18px\n@font-size-h5:            @font-size-base;\n@font-size-h6:            ceil((@font-size-base * 0.85)); // ~12px\n\n//** Unit-less `line-height` for use in components like buttons.\n@line-height-base:        1.428571429; // 20/14\n//** Computed \"line-height\" (`font-size` * `line-height`) for use with `margin`, `padding`, etc.\n@line-height-computed:    floor((@font-size-base * @line-height-base)); // ~20px\n\n//** By default, this inherits from the `<body>`.\n@headings-font-family:    inherit;\n@headings-font-weight:    500;\n@headings-line-height:    1.1;\n@headings-color:          inherit;\n\n\n//== Iconography\n//\n//## Specify custom location and filename of the included Glyphicons icon font. Useful for those including Bootstrap via Bower.\n\n//** Load fonts from this directory.\n@icon-font-path:          \"../fonts/\";\n//** File name for all font files.\n@icon-font-name:          \"glyphicons-halflings-regular\";\n//** Element ID within SVG icon file.\n@icon-font-svg-id:        \"glyphicons_halflingsregular\";\n\n\n//== Components\n//\n//## Define common padding and border radius sizes and more. Values based on 14px text and 1.428 line-height (~20px to start).\n\n@padding-base-vertical:     6px;\n@padding-base-horizontal:   12px;\n\n@padding-large-vertical:    10px;\n@padding-large-horizontal:  16px;\n\n@padding-small-vertical:    5px;\n@padding-small-horizontal:  10px;\n\n@padding-xs-vertical:       1px;\n@padding-xs-horizontal:     5px;\n\n@line-height-large:         1.33;\n@line-height-small:         1.5;\n\n@border-radius-base:        4px;\n@border-radius-large:       6px;\n@border-radius-small:       3px;\n\n//** Global color for active items (e.g., navs or dropdowns).\n@component-active-color:    #fff;\n//** Global background color for active items (e.g., navs or dropdowns).\n@component-active-bg:       @brand-primary;\n\n//** Width of the `border` for generating carets that indicator dropdowns.\n@caret-width-base:          4px;\n//** Carets increase slightly in size for larger components.\n@caret-width-large:         5px;\n\n\n//== Tables\n//\n//## Customizes the `.table` component with basic values, each used across all table variations.\n\n//** Padding for `<th>`s and `<td>`s.\n@table-cell-padding:            8px;\n//** Padding for cells in `.table-condensed`.\n@table-condensed-cell-padding:  5px;\n\n//** Default background color used for all tables.\n@table-bg:                      transparent;\n//** Background color used for `.table-striped`.\n@table-bg-accent:               #f9f9f9;\n//** Background color used for `.table-hover`.\n@table-bg-hover:                #f5f5f5;\n@table-bg-active:               @table-bg-hover;\n\n//** Border color for table and cell borders.\n@table-border-color:            #ddd;\n\n\n//== Buttons\n//\n//## For each of Bootstrap's buttons, define text, background and border color.\n\n@btn-font-weight:                normal;\n\n@btn-default-color:              #333;\n@btn-default-bg:                 #fff;\n@btn-default-border:             #ccc;\n\n@btn-primary-color:              #fff;\n@btn-primary-bg:                 @brand-primary;\n@btn-primary-border:             darken(@btn-primary-bg, 5%);\n\n@btn-success-color:              #fff;\n@btn-success-bg:                 @brand-success;\n@btn-success-border:             darken(@btn-success-bg, 5%);\n\n@btn-info-color:                 #fff;\n@btn-info-bg:                    @brand-info;\n@btn-info-border:                darken(@btn-info-bg, 5%);\n\n@btn-warning-color:              #fff;\n@btn-warning-bg:                 @brand-warning;\n@btn-warning-border:             darken(@btn-warning-bg, 5%);\n\n@btn-danger-color:               #fff;\n@btn-danger-bg:                  @brand-danger;\n@btn-danger-border:              darken(@btn-danger-bg, 5%);\n\n@btn-link-disabled-color:        @gray-light;\n\n\n//== Forms\n//\n//##\n\n//** `<input>` background color\n@input-bg:                       #fff;\n//** `<input disabled>` background color\n@input-bg-disabled:              @gray-lighter;\n\n//** Text color for `<input>`s\n@input-color:                    @gray;\n//** `<input>` border color\n@input-border:                   #ccc;\n//** `<input>` border radius\n@input-border-radius:            @border-radius-base;\n//** Border color for inputs on focus\n@input-border-focus:             #66afe9;\n\n//** Placeholder text color\n@input-color-placeholder:        @gray-light;\n\n//** Default `.form-control` height\n@input-height-base:              (@line-height-computed + (@padding-base-vertical * 2) + 2);\n//** Large `.form-control` height\n@input-height-large:             (ceil(@font-size-large * @line-height-large) + (@padding-large-vertical * 2) + 2);\n//** Small `.form-control` height\n@input-height-small:             (floor(@font-size-small * @line-height-small) + (@padding-small-vertical * 2) + 2);\n\n@legend-color:                   @gray-dark;\n@legend-border-color:            #e5e5e5;\n\n//** Background color for textual input addons\n@input-group-addon-bg:           @gray-lighter;\n//** Border color for textual input addons\n@input-group-addon-border-color: @input-border;\n\n\n//== Dropdowns\n//\n//## Dropdown menu container and contents.\n\n//** Background for the dropdown menu.\n@dropdown-bg:                    #fff;\n//** Dropdown menu `border-color`.\n@dropdown-border:                rgba(0,0,0,.15);\n//** Dropdown menu `border-color` **for IE8**.\n@dropdown-fallback-border:       #ccc;\n//** Divider color for between dropdown items.\n@dropdown-divider-bg:            #e5e5e5;\n\n//** Dropdown link text color.\n@dropdown-link-color:            @gray-dark;\n//** Hover color for dropdown links.\n@dropdown-link-hover-color:      darken(@gray-dark, 5%);\n//** Hover background for dropdown links.\n@dropdown-link-hover-bg:         #f5f5f5;\n\n//** Active dropdown menu item text color.\n@dropdown-link-active-color:     @component-active-color;\n//** Active dropdown menu item background color.\n@dropdown-link-active-bg:        @component-active-bg;\n\n//** Disabled dropdown menu item background color.\n@dropdown-link-disabled-color:   @gray-light;\n\n//** Text color for headers within dropdown menus.\n@dropdown-header-color:          @gray-light;\n\n//** Deprecated `@dropdown-caret-color` as of v3.1.0\n@dropdown-caret-color:           #000;\n\n\n//-- Z-index master list\n//\n// Warning: Avoid customizing these values. They're used for a bird's eye view\n// of components dependent on the z-axis and are designed to all work together.\n//\n// Note: These variables are not generated into the Customizer.\n\n@zindex-navbar:            1000;\n@zindex-dropdown:          1000;\n@zindex-popover:           1060;\n@zindex-tooltip:           1070;\n@zindex-navbar-fixed:      1030;\n@zindex-modal-background:  1040;\n@zindex-modal:             1050;\n\n\n//== Media queries breakpoints\n//\n//## Define the breakpoints at which your layout will change, adapting to different screen sizes.\n\n// Extra small screen / phone\n//** Deprecated `@screen-xs` as of v3.0.1\n@screen-xs:                  480px;\n//** Deprecated `@screen-xs-min` as of v3.2.0\n@screen-xs-min:              @screen-xs;\n//** Deprecated `@screen-phone` as of v3.0.1\n@screen-phone:               @screen-xs-min;\n\n// Small screen / tablet\n//** Deprecated `@screen-sm` as of v3.0.1\n@screen-sm:                  768px;\n@screen-sm-min:              @screen-sm;\n//** Deprecated `@screen-tablet` as of v3.0.1\n@screen-tablet:              @screen-sm-min;\n\n// Medium screen / desktop\n//** Deprecated `@screen-md` as of v3.0.1\n@screen-md:                  992px;\n@screen-md-min:              @screen-md;\n//** Deprecated `@screen-desktop` as of v3.0.1\n@screen-desktop:             @screen-md-min;\n\n// Large screen / wide desktop\n//** Deprecated `@screen-lg` as of v3.0.1\n@screen-lg:                  1200px;\n@screen-lg-min:              @screen-lg;\n//** Deprecated `@screen-lg-desktop` as of v3.0.1\n@screen-lg-desktop:          @screen-lg-min;\n\n// So media queries don't overlap when required, provide a maximum\n@screen-xs-max:              (@screen-sm-min - 1);\n@screen-sm-max:              (@screen-md-min - 1);\n@screen-md-max:              (@screen-lg-min - 1);\n\n\n//== Grid system\n//\n//## Define your custom responsive grid.\n\n//** Number of columns in the grid.\n@grid-columns:              12;\n//** Padding between columns. Gets divided in half for the left and right.\n@grid-gutter-width:         30px;\n// Navbar collapse\n//** Point at which the navbar becomes uncollapsed.\n@grid-float-breakpoint:     @screen-sm-min;\n//** Point at which the navbar begins collapsing.\n@grid-float-breakpoint-max: (@grid-float-breakpoint - 1);\n\n\n//== Container sizes\n//\n//## Define the maximum width of `.container` for different screen sizes.\n\n// Small screen / tablet\n@container-tablet:             ((720px + @grid-gutter-width));\n//** For `@screen-sm-min` and up.\n@container-sm:                 @container-tablet;\n\n// Medium screen / desktop\n@container-desktop:            ((940px + @grid-gutter-width));\n//** For `@screen-md-min` and up.\n@container-md:                 @container-desktop;\n\n// Large screen / wide desktop\n@container-large-desktop:      ((1140px + @grid-gutter-width));\n//** For `@screen-lg-min` and up.\n@container-lg:                 @container-large-desktop;\n\n\n//== Navbar\n//\n//##\n\n// Basics of a navbar\n@navbar-height:                    50px;\n@navbar-margin-bottom:             @line-height-computed;\n@navbar-border-radius:             @border-radius-base;\n@navbar-padding-horizontal:        floor((@grid-gutter-width / 2));\n@navbar-padding-vertical:          ((@navbar-height - @line-height-computed) / 2);\n@navbar-collapse-max-height:       340px;\n\n@navbar-default-color:             #777;\n@navbar-default-bg:                #f8f8f8;\n@navbar-default-border:            darken(@navbar-default-bg, 6.5%);\n\n// Navbar links\n@navbar-default-link-color:                #777;\n@navbar-default-link-hover-color:          #333;\n@navbar-default-link-hover-bg:             transparent;\n@navbar-default-link-active-color:         #555;\n@navbar-default-link-active-bg:            darken(@navbar-default-bg, 6.5%);\n@navbar-default-link-disabled-color:       #ccc;\n@navbar-default-link-disabled-bg:          transparent;\n\n// Navbar brand label\n@navbar-default-brand-color:               @navbar-default-link-color;\n@navbar-default-brand-hover-color:         darken(@navbar-default-brand-color, 10%);\n@navbar-default-brand-hover-bg:            transparent;\n\n// Navbar toggle\n@navbar-default-toggle-hover-bg:           #ddd;\n@navbar-default-toggle-icon-bar-bg:        #888;\n@navbar-default-toggle-border-color:       #ddd;\n\n\n// Inverted navbar\n// Reset inverted navbar basics\n@navbar-inverse-color:                      @gray-light;\n@navbar-inverse-bg:                         #222;\n@navbar-inverse-border:                     darken(@navbar-inverse-bg, 10%);\n\n// Inverted navbar links\n@navbar-inverse-link-color:                 @gray-light;\n@navbar-inverse-link-hover-color:           #fff;\n@navbar-inverse-link-hover-bg:              transparent;\n@navbar-inverse-link-active-color:          @navbar-inverse-link-hover-color;\n@navbar-inverse-link-active-bg:             darken(@navbar-inverse-bg, 10%);\n@navbar-inverse-link-disabled-color:        #444;\n@navbar-inverse-link-disabled-bg:           transparent;\n\n// Inverted navbar brand label\n@navbar-inverse-brand-color:                @navbar-inverse-link-color;\n@navbar-inverse-brand-hover-color:          #fff;\n@navbar-inverse-brand-hover-bg:             transparent;\n\n// Inverted navbar toggle\n@navbar-inverse-toggle-hover-bg:            #333;\n@navbar-inverse-toggle-icon-bar-bg:         #fff;\n@navbar-inverse-toggle-border-color:        #333;\n\n\n//== Navs\n//\n//##\n\n//=== Shared nav styles\n@nav-link-padding:                          10px 15px;\n@nav-link-hover-bg:                         @gray-lighter;\n\n@nav-disabled-link-color:                   @gray-light;\n@nav-disabled-link-hover-color:             @gray-light;\n\n@nav-open-link-hover-color:                 #fff;\n\n//== Tabs\n@nav-tabs-border-color:                     #ddd;\n\n@nav-tabs-link-hover-border-color:          @gray-lighter;\n\n@nav-tabs-active-link-hover-bg:             @body-bg;\n@nav-tabs-active-link-hover-color:          @gray;\n@nav-tabs-active-link-hover-border-color:   #ddd;\n\n@nav-tabs-justified-link-border-color:            #ddd;\n@nav-tabs-justified-active-link-border-color:     @body-bg;\n\n//== Pills\n@nav-pills-border-radius:                   @border-radius-base;\n@nav-pills-active-link-hover-bg:            @component-active-bg;\n@nav-pills-active-link-hover-color:         @component-active-color;\n\n\n//== Pagination\n//\n//##\n\n@pagination-color:                     @link-color;\n@pagination-bg:                        #fff;\n@pagination-border:                    #ddd;\n\n@pagination-hover-color:               @link-hover-color;\n@pagination-hover-bg:                  @gray-lighter;\n@pagination-hover-border:              #ddd;\n\n@pagination-active-color:              #fff;\n@pagination-active-bg:                 @brand-primary;\n@pagination-active-border:             @brand-primary;\n\n@pagination-disabled-color:            @gray-light;\n@pagination-disabled-bg:               #fff;\n@pagination-disabled-border:           #ddd;\n\n\n//== Pager\n//\n//##\n\n@pager-bg:                             @pagination-bg;\n@pager-border:                         @pagination-border;\n@pager-border-radius:                  15px;\n\n@pager-hover-bg:                       @pagination-hover-bg;\n\n@pager-active-bg:                      @pagination-active-bg;\n@pager-active-color:                   @pagination-active-color;\n\n@pager-disabled-color:                 @pagination-disabled-color;\n\n\n//== Jumbotron\n//\n//##\n\n@jumbotron-padding:              30px;\n@jumbotron-color:                inherit;\n@jumbotron-bg:                   @gray-lighter;\n@jumbotron-heading-color:        inherit;\n@jumbotron-font-size:            ceil((@font-size-base * 1.5));\n\n\n//== Form states and alerts\n//\n//## Define colors for form feedback states and, by default, alerts.\n\n@state-success-text:             #3c763d;\n@state-success-bg:               #dff0d8;\n@state-success-border:           darken(spin(@state-success-bg, -10), 5%);\n\n@state-info-text:                #31708f;\n@state-info-bg:                  #d9edf7;\n@state-info-border:              darken(spin(@state-info-bg, -10), 7%);\n\n@state-warning-text:             #8a6d3b;\n@state-warning-bg:               #fcf8e3;\n@state-warning-border:           darken(spin(@state-warning-bg, -10), 5%);\n\n@state-danger-text:              #a94442;\n@state-danger-bg:                #f2dede;\n@state-danger-border:            darken(spin(@state-danger-bg, -10), 5%);\n\n\n//== Tooltips\n//\n//##\n\n//** Tooltip max width\n@tooltip-max-width:           200px;\n//** Tooltip text color\n@tooltip-color:               #fff;\n//** Tooltip background color\n@tooltip-bg:                  #000;\n@tooltip-opacity:             .9;\n\n//** Tooltip arrow width\n@tooltip-arrow-width:         5px;\n//** Tooltip arrow color\n@tooltip-arrow-color:         @tooltip-bg;\n\n\n//== Popovers\n//\n//##\n\n//** Popover body background color\n@popover-bg:                          #fff;\n//** Popover maximum width\n@popover-max-width:                   276px;\n//** Popover border color\n@popover-border-color:                rgba(0,0,0,.2);\n//** Popover fallback border color\n@popover-fallback-border-color:       #ccc;\n\n//** Popover title background color\n@popover-title-bg:                    darken(@popover-bg, 3%);\n\n//** Popover arrow width\n@popover-arrow-width:                 10px;\n//** Popover arrow color\n@popover-arrow-color:                 #fff;\n\n//** Popover outer arrow width\n@popover-arrow-outer-width:           (@popover-arrow-width + 1);\n//** Popover outer arrow color\n@popover-arrow-outer-color:           fadein(@popover-border-color, 5%);\n//** Popover outer arrow fallback color\n@popover-arrow-outer-fallback-color:  darken(@popover-fallback-border-color, 20%);\n\n\n//== Labels\n//\n//##\n\n//** Default label background color\n@label-default-bg:            @gray-light;\n//** Primary label background color\n@label-primary-bg:            @brand-primary;\n//** Success label background color\n@label-success-bg:            @brand-success;\n//** Info label background color\n@label-info-bg:               @brand-info;\n//** Warning label background color\n@label-warning-bg:            @brand-warning;\n//** Danger label background color\n@label-danger-bg:             @brand-danger;\n\n//** Default label text color\n@label-color:                 #fff;\n//** Default text color of a linked label\n@label-link-hover-color:      #fff;\n\n\n//== Modals\n//\n//##\n\n//** Padding applied to the modal body\n@modal-inner-padding:         15px;\n\n//** Padding applied to the modal title\n@modal-title-padding:         15px;\n//** Modal title line-height\n@modal-title-line-height:     @line-height-base;\n\n//** Background color of modal content area\n@modal-content-bg:                             #fff;\n//** Modal content border color\n@modal-content-border-color:                   rgba(0,0,0,.2);\n//** Modal content border color **for IE8**\n@modal-content-fallback-border-color:          #999;\n\n//** Modal backdrop background color\n@modal-backdrop-bg:           #000;\n//** Modal backdrop opacity\n@modal-backdrop-opacity:      .5;\n//** Modal header border color\n@modal-header-border-color:   #e5e5e5;\n//** Modal footer border color\n@modal-footer-border-color:   @modal-header-border-color;\n\n@modal-lg:                    900px;\n@modal-md:                    600px;\n@modal-sm:                    300px;\n\n\n//== Alerts\n//\n//## Define alert colors, border radius, and padding.\n\n@alert-padding:               15px;\n@alert-border-radius:         @border-radius-base;\n@alert-link-font-weight:      bold;\n\n@alert-success-bg:            @state-success-bg;\n@alert-success-text:          @state-success-text;\n@alert-success-border:        @state-success-border;\n\n@alert-info-bg:               @state-info-bg;\n@alert-info-text:             @state-info-text;\n@alert-info-border:           @state-info-border;\n\n@alert-warning-bg:            @state-warning-bg;\n@alert-warning-text:          @state-warning-text;\n@alert-warning-border:        @state-warning-border;\n\n@alert-danger-bg:             @state-danger-bg;\n@alert-danger-text:           @state-danger-text;\n@alert-danger-border:         @state-danger-border;\n\n\n//== Progress bars\n//\n//##\n\n//** Background color of the whole progress component\n@progress-bg:                 #f5f5f5;\n//** Progress bar text color\n@progress-bar-color:          #fff;\n\n//** Default progress bar color\n@progress-bar-bg:             @brand-primary;\n//** Success progress bar color\n@progress-bar-success-bg:     @brand-success;\n//** Warning progress bar color\n@progress-bar-warning-bg:     @brand-warning;\n//** Danger progress bar color\n@progress-bar-danger-bg:      @brand-danger;\n//** Info progress bar color\n@progress-bar-info-bg:        @brand-info;\n\n\n//== List group\n//\n//##\n\n//** Background color on `.list-group-item`\n@list-group-bg:                 #fff;\n//** `.list-group-item` border color\n@list-group-border:             #ddd;\n//** List group border radius\n@list-group-border-radius:      @border-radius-base;\n\n//** Background color of single list items on hover\n@list-group-hover-bg:           #f5f5f5;\n//** Text color of active list items\n@list-group-active-color:       @component-active-color;\n//** Background color of active list items\n@list-group-active-bg:          @component-active-bg;\n//** Border color of active list elements\n@list-group-active-border:      @list-group-active-bg;\n//** Text color for content within active list items\n@list-group-active-text-color:  lighten(@list-group-active-bg, 40%);\n\n//** Text color of disabled list items\n@list-group-disabled-color:      @gray-light;\n//** Background color of disabled list items\n@list-group-disabled-bg:         @gray-lighter;\n//** Text color for content within disabled list items\n@list-group-disabled-text-color: @list-group-disabled-color;\n\n@list-group-link-color:         #555;\n@list-group-link-hover-color:   @list-group-link-color;\n@list-group-link-heading-color: #333;\n\n\n//== Panels\n//\n//##\n\n@panel-bg:                    #fff;\n@panel-body-padding:          15px;\n@panel-heading-padding:       10px 15px;\n@panel-footer-padding:        @panel-heading-padding;\n@panel-border-radius:         @border-radius-base;\n\n//** Border color for elements within panels\n@panel-inner-border:          #ddd;\n@panel-footer-bg:             #f5f5f5;\n\n@panel-default-text:          @gray-dark;\n@panel-default-border:        #ddd;\n@panel-default-heading-bg:    #f5f5f5;\n\n@panel-primary-text:          #fff;\n@panel-primary-border:        @brand-primary;\n@panel-primary-heading-bg:    @brand-primary;\n\n@panel-success-text:          @state-success-text;\n@panel-success-border:        @state-success-border;\n@panel-success-heading-bg:    @state-success-bg;\n\n@panel-info-text:             @state-info-text;\n@panel-info-border:           @state-info-border;\n@panel-info-heading-bg:       @state-info-bg;\n\n@panel-warning-text:          @state-warning-text;\n@panel-warning-border:        @state-warning-border;\n@panel-warning-heading-bg:    @state-warning-bg;\n\n@panel-danger-text:           @state-danger-text;\n@panel-danger-border:         @state-danger-border;\n@panel-danger-heading-bg:     @state-danger-bg;\n\n\n//== Thumbnails\n//\n//##\n\n//** Padding around the thumbnail image\n@thumbnail-padding:           4px;\n//** Thumbnail background color\n@thumbnail-bg:                @body-bg;\n//** Thumbnail border color\n@thumbnail-border:            #ddd;\n//** Thumbnail border radius\n@thumbnail-border-radius:     @border-radius-base;\n\n//** Custom text color for thumbnail captions\n@thumbnail-caption-color:     @text-color;\n//** Padding around the thumbnail caption\n@thumbnail-caption-padding:   9px;\n\n\n//== Wells\n//\n//##\n\n@well-bg:                     #f5f5f5;\n@well-border:                 darken(@well-bg, 7%);\n\n\n//== Badges\n//\n//##\n\n@badge-color:                 #fff;\n//** Linked badge text color on hover\n@badge-link-hover-color:      #fff;\n@badge-bg:                    @gray-light;\n\n//** Badge text color in active nav link\n@badge-active-color:          @link-color;\n//** Badge background color in active nav link\n@badge-active-bg:             #fff;\n\n@badge-font-weight:           bold;\n@badge-line-height:           1;\n@badge-border-radius:         10px;\n\n\n//== Breadcrumbs\n//\n//##\n\n@breadcrumb-padding-vertical:   8px;\n@breadcrumb-padding-horizontal: 15px;\n//** Breadcrumb background color\n@breadcrumb-bg:                 #f5f5f5;\n//** Breadcrumb text color\n@breadcrumb-color:              #ccc;\n//** Text color of current page in the breadcrumb\n@breadcrumb-active-color:       @gray-light;\n//** Textual separator for between breadcrumb elements\n@breadcrumb-separator:          \"/\";\n\n\n//== Carousel\n//\n//##\n\n@carousel-text-shadow:                        0 1px 2px rgba(0,0,0,.6);\n\n@carousel-control-color:                      #fff;\n@carousel-control-width:                      15%;\n@carousel-control-opacity:                    .5;\n@carousel-control-font-size:                  20px;\n\n@carousel-indicator-active-bg:                #fff;\n@carousel-indicator-border-color:             #fff;\n\n@carousel-caption-color:                      #fff;\n\n\n//== Close\n//\n//##\n\n@close-font-weight:           bold;\n@close-color:                 #000;\n@close-text-shadow:           0 1px 0 #fff;\n\n\n//== Code\n//\n//##\n\n@code-color:                  #c7254e;\n@code-bg:                     #f9f2f4;\n\n@kbd-color:                   #fff;\n@kbd-bg:                      #333;\n\n@pre-bg:                      #f5f5f5;\n@pre-color:                   @gray-dark;\n@pre-border-color:            #ccc;\n@pre-scrollable-max-height:   340px;\n\n\n//== Type\n//\n//##\n\n//** Horizontal offset for forms and lists.\n@component-offset-horizontal: 180px;\n//** Text muted color\n@text-muted:                  @gray-light;\n//** Abbreviations and acronyms border color\n@abbr-border-color:           @gray-light;\n//** Headings small color\n@headings-small-color:        @gray-light;\n//** Blockquote small color\n@blockquote-small-color:      @gray-light;\n//** Blockquote font size\n@blockquote-font-size:        (@font-size-base * 1.25);\n//** Blockquote border color\n@blockquote-border-color:     @gray-lighter;\n//** Page header border color\n@page-header-border-color:    @gray-lighter;\n//** Width of horizontal description list titles\n@dl-horizontal-offset:        @component-offset-horizontal;\n//** Horizontal line color.\n@hr-border:                   @gray-lighter;\n\n\n"
  },
  {
    "path": "themes/bootstrap-2/less/wells.less",
    "content": "//\n// Wells\n// --------------------------------------------------\n\n\n// Base class\n.well {\n  min-height: 20px;\n  padding: 19px;\n  margin-bottom: 20px;\n  background-color: @well-bg;\n  border: 1px solid @well-border;\n  border-radius: @border-radius-base;\n  .box-shadow(inset 0 1px 1px rgba(0,0,0,.05));\n  blockquote {\n    border-color: #ddd;\n    border-color: rgba(0,0,0,.15);\n  }\n}\n\n// Sizes\n.well-lg {\n  padding: 24px;\n  border-radius: @border-radius-large;\n}\n.well-sm {\n  padding: 9px;\n  border-radius: @border-radius-small;\n}\n"
  },
  {
    "path": "themes/bootstrap-2/stylesheets/bootstrap.css",
    "content": "/*! normalize.css v3.0.1 | MIT License | git.io/normalize */\nhtml {\n  font-family: sans-serif;\n  -ms-text-size-adjust: 100%;\n  -webkit-text-size-adjust: 100%;\n}\nbody {\n  margin: 0;\n}\narticle,\naside,\ndetails,\nfigcaption,\nfigure,\nfooter,\nheader,\nhgroup,\nmain,\nnav,\nsection,\nsummary {\n  display: block;\n}\naudio,\ncanvas,\nprogress,\nvideo {\n  display: inline-block;\n  vertical-align: baseline;\n}\naudio:not([controls]) {\n  display: none;\n  height: 0;\n}\n[hidden],\ntemplate {\n  display: none;\n}\na {\n  background: transparent;\n}\na:active,\na:hover {\n  outline: 0;\n}\nabbr[title] {\n  border-bottom: 1px dotted;\n}\nb,\nstrong {\n  font-weight: bold;\n}\ndfn {\n  font-style: italic;\n}\nh1 {\n  font-size: 2em;\n  margin: 0.67em 0;\n}\nmark {\n  background: #ff0;\n  color: #000;\n}\nsmall {\n  font-size: 80%;\n}\nsub,\nsup {\n  font-size: 75%;\n  line-height: 0;\n  position: relative;\n  vertical-align: baseline;\n}\nsup {\n  top: -0.5em;\n}\nsub {\n  bottom: -0.25em;\n}\nimg {\n  border: 0;\n}\nsvg:not(:root) {\n  overflow: hidden;\n}\nfigure {\n  margin: 1em 40px;\n}\nhr {\n  -moz-box-sizing: content-box;\n  box-sizing: content-box;\n  height: 0;\n}\npre {\n  overflow: auto;\n}\ncode,\nkbd,\npre,\nsamp {\n  font-family: monospace, monospace;\n  font-size: 1em;\n}\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n  color: inherit;\n  font: inherit;\n  margin: 0;\n}\nbutton {\n  overflow: visible;\n}\nbutton,\nselect {\n  text-transform: none;\n}\nbutton,\nhtml input[type=\"button\"],\ninput[type=\"reset\"],\ninput[type=\"submit\"] {\n  -webkit-appearance: button;\n  cursor: pointer;\n}\nbutton[disabled],\nhtml input[disabled] {\n  cursor: default;\n}\nbutton::-moz-focus-inner,\ninput::-moz-focus-inner {\n  border: 0;\n  padding: 0;\n}\ninput {\n  line-height: normal;\n}\ninput[type=\"checkbox\"],\ninput[type=\"radio\"] {\n  box-sizing: border-box;\n  padding: 0;\n}\ninput[type=\"number\"]::-webkit-inner-spin-button,\ninput[type=\"number\"]::-webkit-outer-spin-button {\n  height: auto;\n}\ninput[type=\"search\"] {\n  -webkit-appearance: textfield;\n  -moz-box-sizing: content-box;\n  -webkit-box-sizing: content-box;\n  box-sizing: content-box;\n}\ninput[type=\"search\"]::-webkit-search-cancel-button,\ninput[type=\"search\"]::-webkit-search-decoration {\n  -webkit-appearance: none;\n}\nfieldset {\n  border: 1px solid #c0c0c0;\n  margin: 0 2px;\n  padding: 0.35em 0.625em 0.75em;\n}\nlegend {\n  border: 0;\n  padding: 0;\n}\ntextarea {\n  overflow: auto;\n}\noptgroup {\n  font-weight: bold;\n}\ntable {\n  border-collapse: collapse;\n  border-spacing: 0;\n}\ntd,\nth {\n  padding: 0;\n}\n@media print {\n  * {\n    text-shadow: none !important;\n    color: #000 !important;\n    background: transparent !important;\n    box-shadow: none !important;\n  }\n  a,\n  a:visited {\n    text-decoration: underline;\n  }\n  a[href]:after {\n    content: \" (\" attr(href) \")\";\n  }\n  abbr[title]:after {\n    content: \" (\" attr(title) \")\";\n  }\n  a[href^=\"javascript:\"]:after,\n  a[href^=\"#\"]:after {\n    content: \"\";\n  }\n  pre,\n  blockquote {\n    border: 1px solid #999;\n    page-break-inside: avoid;\n  }\n  thead {\n    display: table-header-group;\n  }\n  tr,\n  img {\n    page-break-inside: avoid;\n  }\n  img {\n    max-width: 100% !important;\n  }\n  p,\n  h2,\n  h3 {\n    orphans: 3;\n    widows: 3;\n  }\n  h2,\n  h3 {\n    page-break-after: avoid;\n  }\n  select {\n    background: #fff !important;\n  }\n  .navbar {\n    display: none;\n  }\n  .table td,\n  .table th {\n    background-color: #fff !important;\n  }\n  .btn > .caret,\n  .dropup > .btn > .caret {\n    border-top-color: #000 !important;\n  }\n  .label {\n    border: 1px solid #000;\n  }\n  .table {\n    border-collapse: collapse !important;\n  }\n  .table-bordered th,\n  .table-bordered td {\n    border: 1px solid #ddd !important;\n  }\n}\n@font-face {\n  font-family: 'Glyphicons Halflings';\n  src: url('../../fonts/theme/glyphicons-halflings-regular.eot');\n  src: url('../../fonts/theme/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), url('../../fonts/theme/glyphicons-halflings-regular.woff') format('woff'), url('../../fonts/theme/glyphicons-halflings-regular.ttf') format('truetype'), url('../../fonts/theme/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg');\n}\n.glyphicon {\n  position: relative;\n  top: 1px;\n  display: inline-block;\n  font-family: 'Glyphicons Halflings';\n  font-style: normal;\n  font-weight: normal;\n  line-height: 1;\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n}\n.glyphicon-asterisk:before {\n  content: \"\\2a\";\n}\n.glyphicon-plus:before {\n  content: \"\\2b\";\n}\n.glyphicon-euro:before {\n  content: \"\\20ac\";\n}\n.glyphicon-minus:before {\n  content: \"\\2212\";\n}\n.glyphicon-cloud:before {\n  content: \"\\2601\";\n}\n.glyphicon-envelope:before {\n  content: \"\\2709\";\n}\n.glyphicon-pencil:before {\n  content: \"\\270f\";\n}\n.glyphicon-glass:before {\n  content: \"\\e001\";\n}\n.glyphicon-music:before {\n  content: \"\\e002\";\n}\n.glyphicon-search:before {\n  content: \"\\e003\";\n}\n.glyphicon-heart:before {\n  content: \"\\e005\";\n}\n.glyphicon-star:before {\n  content: \"\\e006\";\n}\n.glyphicon-star-empty:before {\n  content: \"\\e007\";\n}\n.glyphicon-user:before {\n  content: \"\\e008\";\n}\n.glyphicon-film:before {\n  content: \"\\e009\";\n}\n.glyphicon-th-large:before {\n  content: \"\\e010\";\n}\n.glyphicon-th:before {\n  content: \"\\e011\";\n}\n.glyphicon-th-list:before {\n  content: \"\\e012\";\n}\n.glyphicon-ok:before {\n  content: \"\\e013\";\n}\n.glyphicon-remove:before {\n  content: \"\\e014\";\n}\n.glyphicon-zoom-in:before {\n  content: \"\\e015\";\n}\n.glyphicon-zoom-out:before {\n  content: \"\\e016\";\n}\n.glyphicon-off:before {\n  content: \"\\e017\";\n}\n.glyphicon-signal:before {\n  content: \"\\e018\";\n}\n.glyphicon-cog:before {\n  content: \"\\e019\";\n}\n.glyphicon-trash:before {\n  content: \"\\e020\";\n}\n.glyphicon-home:before {\n  content: \"\\e021\";\n}\n.glyphicon-file:before {\n  content: \"\\e022\";\n}\n.glyphicon-time:before {\n  content: \"\\e023\";\n}\n.glyphicon-road:before {\n  content: \"\\e024\";\n}\n.glyphicon-download-alt:before {\n  content: \"\\e025\";\n}\n.glyphicon-download:before {\n  content: \"\\e026\";\n}\n.glyphicon-upload:before {\n  content: \"\\e027\";\n}\n.glyphicon-inbox:before {\n  content: \"\\e028\";\n}\n.glyphicon-play-circle:before {\n  content: \"\\e029\";\n}\n.glyphicon-repeat:before {\n  content: \"\\e030\";\n}\n.glyphicon-refresh:before {\n  content: \"\\e031\";\n}\n.glyphicon-list-alt:before {\n  content: \"\\e032\";\n}\n.glyphicon-lock:before {\n  content: \"\\e033\";\n}\n.glyphicon-flag:before {\n  content: \"\\e034\";\n}\n.glyphicon-headphones:before {\n  content: \"\\e035\";\n}\n.glyphicon-volume-off:before {\n  content: \"\\e036\";\n}\n.glyphicon-volume-down:before {\n  content: \"\\e037\";\n}\n.glyphicon-volume-up:before {\n  content: \"\\e038\";\n}\n.glyphicon-qrcode:before {\n  content: \"\\e039\";\n}\n.glyphicon-barcode:before {\n  content: \"\\e040\";\n}\n.glyphicon-tag:before {\n  content: \"\\e041\";\n}\n.glyphicon-tags:before {\n  content: \"\\e042\";\n}\n.glyphicon-book:before {\n  content: \"\\e043\";\n}\n.glyphicon-bookmark:before {\n  content: \"\\e044\";\n}\n.glyphicon-print:before {\n  content: \"\\e045\";\n}\n.glyphicon-camera:before {\n  content: \"\\e046\";\n}\n.glyphicon-font:before {\n  content: \"\\e047\";\n}\n.glyphicon-bold:before {\n  content: \"\\e048\";\n}\n.glyphicon-italic:before {\n  content: \"\\e049\";\n}\n.glyphicon-text-height:before {\n  content: \"\\e050\";\n}\n.glyphicon-text-width:before {\n  content: \"\\e051\";\n}\n.glyphicon-align-left:before {\n  content: \"\\e052\";\n}\n.glyphicon-align-center:before {\n  content: \"\\e053\";\n}\n.glyphicon-align-right:before {\n  content: \"\\e054\";\n}\n.glyphicon-align-justify:before {\n  content: \"\\e055\";\n}\n.glyphicon-list:before {\n  content: \"\\e056\";\n}\n.glyphicon-indent-left:before {\n  content: \"\\e057\";\n}\n.glyphicon-indent-right:before {\n  content: \"\\e058\";\n}\n.glyphicon-facetime-video:before {\n  content: \"\\e059\";\n}\n.glyphicon-picture:before {\n  content: \"\\e060\";\n}\n.glyphicon-map-marker:before {\n  content: \"\\e062\";\n}\n.glyphicon-adjust:before {\n  content: \"\\e063\";\n}\n.glyphicon-tint:before {\n  content: \"\\e064\";\n}\n.glyphicon-edit:before {\n  content: \"\\e065\";\n}\n.glyphicon-share:before {\n  content: \"\\e066\";\n}\n.glyphicon-check:before {\n  content: \"\\e067\";\n}\n.glyphicon-move:before {\n  content: \"\\e068\";\n}\n.glyphicon-step-backward:before {\n  content: \"\\e069\";\n}\n.glyphicon-fast-backward:before {\n  content: \"\\e070\";\n}\n.glyphicon-backward:before {\n  content: \"\\e071\";\n}\n.glyphicon-play:before {\n  content: \"\\e072\";\n}\n.glyphicon-pause:before {\n  content: \"\\e073\";\n}\n.glyphicon-stop:before {\n  content: \"\\e074\";\n}\n.glyphicon-forward:before {\n  content: \"\\e075\";\n}\n.glyphicon-fast-forward:before {\n  content: \"\\e076\";\n}\n.glyphicon-step-forward:before {\n  content: \"\\e077\";\n}\n.glyphicon-eject:before {\n  content: \"\\e078\";\n}\n.glyphicon-chevron-left:before {\n  content: \"\\e079\";\n}\n.glyphicon-chevron-right:before {\n  content: \"\\e080\";\n}\n.glyphicon-plus-sign:before {\n  content: \"\\e081\";\n}\n.glyphicon-minus-sign:before {\n  content: \"\\e082\";\n}\n.glyphicon-remove-sign:before {\n  content: \"\\e083\";\n}\n.glyphicon-ok-sign:before {\n  content: \"\\e084\";\n}\n.glyphicon-question-sign:before {\n  content: \"\\e085\";\n}\n.glyphicon-info-sign:before {\n  content: \"\\e086\";\n}\n.glyphicon-screenshot:before {\n  content: \"\\e087\";\n}\n.glyphicon-remove-circle:before {\n  content: \"\\e088\";\n}\n.glyphicon-ok-circle:before {\n  content: \"\\e089\";\n}\n.glyphicon-ban-circle:before {\n  content: \"\\e090\";\n}\n.glyphicon-arrow-left:before {\n  content: \"\\e091\";\n}\n.glyphicon-arrow-right:before {\n  content: \"\\e092\";\n}\n.glyphicon-arrow-up:before {\n  content: \"\\e093\";\n}\n.glyphicon-arrow-down:before {\n  content: \"\\e094\";\n}\n.glyphicon-share-alt:before {\n  content: \"\\e095\";\n}\n.glyphicon-resize-full:before {\n  content: \"\\e096\";\n}\n.glyphicon-resize-small:before {\n  content: \"\\e097\";\n}\n.glyphicon-exclamation-sign:before {\n  content: \"\\e101\";\n}\n.glyphicon-gift:before {\n  content: \"\\e102\";\n}\n.glyphicon-leaf:before {\n  content: \"\\e103\";\n}\n.glyphicon-fire:before {\n  content: \"\\e104\";\n}\n.glyphicon-eye-open:before {\n  content: \"\\e105\";\n}\n.glyphicon-eye-close:before {\n  content: \"\\e106\";\n}\n.glyphicon-warning-sign:before {\n  content: \"\\e107\";\n}\n.glyphicon-plane:before {\n  content: \"\\e108\";\n}\n.glyphicon-calendar:before {\n  content: \"\\e109\";\n}\n.glyphicon-random:before {\n  content: \"\\e110\";\n}\n.glyphicon-comment:before {\n  content: \"\\e111\";\n}\n.glyphicon-magnet:before {\n  content: \"\\e112\";\n}\n.glyphicon-chevron-up:before {\n  content: \"\\e113\";\n}\n.glyphicon-chevron-down:before {\n  content: \"\\e114\";\n}\n.glyphicon-retweet:before {\n  content: \"\\e115\";\n}\n.glyphicon-shopping-cart:before {\n  content: \"\\e116\";\n}\n.glyphicon-folder-close:before {\n  content: \"\\e117\";\n}\n.glyphicon-folder-open:before {\n  content: \"\\e118\";\n}\n.glyphicon-resize-vertical:before {\n  content: \"\\e119\";\n}\n.glyphicon-resize-horizontal:before {\n  content: \"\\e120\";\n}\n.glyphicon-hdd:before {\n  content: \"\\e121\";\n}\n.glyphicon-bullhorn:before {\n  content: \"\\e122\";\n}\n.glyphicon-bell:before {\n  content: \"\\e123\";\n}\n.glyphicon-certificate:before {\n  content: \"\\e124\";\n}\n.glyphicon-thumbs-up:before {\n  content: \"\\e125\";\n}\n.glyphicon-thumbs-down:before {\n  content: \"\\e126\";\n}\n.glyphicon-hand-right:before {\n  content: \"\\e127\";\n}\n.glyphicon-hand-left:before {\n  content: \"\\e128\";\n}\n.glyphicon-hand-up:before {\n  content: \"\\e129\";\n}\n.glyphicon-hand-down:before {\n  content: \"\\e130\";\n}\n.glyphicon-circle-arrow-right:before {\n  content: \"\\e131\";\n}\n.glyphicon-circle-arrow-left:before {\n  content: \"\\e132\";\n}\n.glyphicon-circle-arrow-up:before {\n  content: \"\\e133\";\n}\n.glyphicon-circle-arrow-down:before {\n  content: \"\\e134\";\n}\n.glyphicon-globe:before {\n  content: \"\\e135\";\n}\n.glyphicon-wrench:before {\n  content: \"\\e136\";\n}\n.glyphicon-tasks:before {\n  content: \"\\e137\";\n}\n.glyphicon-filter:before {\n  content: \"\\e138\";\n}\n.glyphicon-briefcase:before {\n  content: \"\\e139\";\n}\n.glyphicon-fullscreen:before {\n  content: \"\\e140\";\n}\n.glyphicon-dashboard:before {\n  content: \"\\e141\";\n}\n.glyphicon-paperclip:before {\n  content: \"\\e142\";\n}\n.glyphicon-heart-empty:before {\n  content: \"\\e143\";\n}\n.glyphicon-link:before {\n  content: \"\\e144\";\n}\n.glyphicon-phone:before {\n  content: \"\\e145\";\n}\n.glyphicon-pushpin:before {\n  content: \"\\e146\";\n}\n.glyphicon-usd:before {\n  content: \"\\e148\";\n}\n.glyphicon-gbp:before {\n  content: \"\\e149\";\n}\n.glyphicon-sort:before {\n  content: \"\\e150\";\n}\n.glyphicon-sort-by-alphabet:before {\n  content: \"\\e151\";\n}\n.glyphicon-sort-by-alphabet-alt:before {\n  content: \"\\e152\";\n}\n.glyphicon-sort-by-order:before {\n  content: \"\\e153\";\n}\n.glyphicon-sort-by-order-alt:before {\n  content: \"\\e154\";\n}\n.glyphicon-sort-by-attributes:before {\n  content: \"\\e155\";\n}\n.glyphicon-sort-by-attributes-alt:before {\n  content: \"\\e156\";\n}\n.glyphicon-unchecked:before {\n  content: \"\\e157\";\n}\n.glyphicon-expand:before {\n  content: \"\\e158\";\n}\n.glyphicon-collapse-down:before {\n  content: \"\\e159\";\n}\n.glyphicon-collapse-up:before {\n  content: \"\\e160\";\n}\n.glyphicon-log-in:before {\n  content: \"\\e161\";\n}\n.glyphicon-flash:before {\n  content: \"\\e162\";\n}\n.glyphicon-log-out:before {\n  content: \"\\e163\";\n}\n.glyphicon-new-window:before {\n  content: \"\\e164\";\n}\n.glyphicon-record:before {\n  content: \"\\e165\";\n}\n.glyphicon-save:before {\n  content: \"\\e166\";\n}\n.glyphicon-open:before {\n  content: \"\\e167\";\n}\n.glyphicon-saved:before {\n  content: \"\\e168\";\n}\n.glyphicon-import:before {\n  content: \"\\e169\";\n}\n.glyphicon-export:before {\n  content: \"\\e170\";\n}\n.glyphicon-send:before {\n  content: \"\\e171\";\n}\n.glyphicon-floppy-disk:before {\n  content: \"\\e172\";\n}\n.glyphicon-floppy-saved:before {\n  content: \"\\e173\";\n}\n.glyphicon-floppy-remove:before {\n  content: \"\\e174\";\n}\n.glyphicon-floppy-save:before {\n  content: \"\\e175\";\n}\n.glyphicon-floppy-open:before {\n  content: \"\\e176\";\n}\n.glyphicon-credit-card:before {\n  content: \"\\e177\";\n}\n.glyphicon-transfer:before {\n  content: \"\\e178\";\n}\n.glyphicon-cutlery:before {\n  content: \"\\e179\";\n}\n.glyphicon-header:before {\n  content: \"\\e180\";\n}\n.glyphicon-compressed:before {\n  content: \"\\e181\";\n}\n.glyphicon-earphone:before {\n  content: \"\\e182\";\n}\n.glyphicon-phone-alt:before {\n  content: \"\\e183\";\n}\n.glyphicon-tower:before {\n  content: \"\\e184\";\n}\n.glyphicon-stats:before {\n  content: \"\\e185\";\n}\n.glyphicon-sd-video:before {\n  content: \"\\e186\";\n}\n.glyphicon-hd-video:before {\n  content: \"\\e187\";\n}\n.glyphicon-subtitles:before {\n  content: \"\\e188\";\n}\n.glyphicon-sound-stereo:before {\n  content: \"\\e189\";\n}\n.glyphicon-sound-dolby:before {\n  content: \"\\e190\";\n}\n.glyphicon-sound-5-1:before {\n  content: \"\\e191\";\n}\n.glyphicon-sound-6-1:before {\n  content: \"\\e192\";\n}\n.glyphicon-sound-7-1:before {\n  content: \"\\e193\";\n}\n.glyphicon-copyright-mark:before {\n  content: \"\\e194\";\n}\n.glyphicon-registration-mark:before {\n  content: \"\\e195\";\n}\n.glyphicon-cloud-download:before {\n  content: \"\\e197\";\n}\n.glyphicon-cloud-upload:before {\n  content: \"\\e198\";\n}\n.glyphicon-tree-conifer:before {\n  content: \"\\e199\";\n}\n.glyphicon-tree-deciduous:before {\n  content: \"\\e200\";\n}\n* {\n  -webkit-box-sizing: border-box;\n  -moz-box-sizing: border-box;\n  box-sizing: border-box;\n}\n*:before,\n*:after {\n  -webkit-box-sizing: border-box;\n  -moz-box-sizing: border-box;\n  box-sizing: border-box;\n}\nhtml {\n  font-size: 10px;\n  -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\nbody {\n  font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n  font-size: 18px;\n  line-height: 1.42857143;\n  color: #333333;\n  background-color: #ffffff;\n}\ninput,\nbutton,\nselect,\ntextarea {\n  font-family: inherit;\n  font-size: inherit;\n  line-height: inherit;\n}\na {\n  color: #428bca;\n  text-decoration: none;\n}\na:hover,\na:focus {\n  color: #2a6496;\n  text-decoration: underline;\n}\na:focus {\n  outline: thin dotted;\n  outline: 5px auto -webkit-focus-ring-color;\n  outline-offset: -2px;\n}\nfigure {\n  margin: 0;\n}\nimg {\n  vertical-align: middle;\n}\n.img-responsive,\n.thumbnail > img,\n.thumbnail a > img,\n.carousel-inner > .item > img,\n.carousel-inner > .item > a > img {\n  display: block;\n  width: 100% \\9;\n  max-width: 100%;\n  height: auto;\n}\n.img-rounded {\n  border-radius: 6px;\n}\n.img-thumbnail {\n  padding: 4px;\n  line-height: 1.42857143;\n  background-color: #ffffff;\n  border: 1px solid #dddddd;\n  border-radius: 4px;\n  -webkit-transition: all 0.2s ease-in-out;\n  -o-transition: all 0.2s ease-in-out;\n  transition: all 0.2s ease-in-out;\n  display: inline-block;\n  width: 100% \\9;\n  max-width: 100%;\n  height: auto;\n}\n.img-circle {\n  border-radius: 50%;\n}\nhr {\n  margin-top: 25px;\n  margin-bottom: 25px;\n  border: 0;\n  border-top: 1px solid #eeeeee;\n}\n.sr-only {\n  position: absolute;\n  width: 1px;\n  height: 1px;\n  margin: -1px;\n  padding: 0;\n  overflow: hidden;\n  clip: rect(0, 0, 0, 0);\n  border: 0;\n}\n.sr-only-focusable:active,\n.sr-only-focusable:focus {\n  position: static;\n  width: auto;\n  height: auto;\n  margin: 0;\n  overflow: visible;\n  clip: auto;\n}\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\n.h1,\n.h2,\n.h3,\n.h4,\n.h5,\n.h6 {\n  font-family: inherit;\n  font-weight: 500;\n  line-height: 1.1;\n  color: inherit;\n}\nh1 small,\nh2 small,\nh3 small,\nh4 small,\nh5 small,\nh6 small,\n.h1 small,\n.h2 small,\n.h3 small,\n.h4 small,\n.h5 small,\n.h6 small,\nh1 .small,\nh2 .small,\nh3 .small,\nh4 .small,\nh5 .small,\nh6 .small,\n.h1 .small,\n.h2 .small,\n.h3 .small,\n.h4 .small,\n.h5 .small,\n.h6 .small {\n  font-weight: normal;\n  line-height: 1;\n  color: #777777;\n}\nh1,\n.h1,\nh2,\n.h2,\nh3,\n.h3 {\n  margin-top: 25px;\n  margin-bottom: 12.5px;\n}\nh1 small,\n.h1 small,\nh2 small,\n.h2 small,\nh3 small,\n.h3 small,\nh1 .small,\n.h1 .small,\nh2 .small,\n.h2 .small,\nh3 .small,\n.h3 .small {\n  font-size: 65%;\n}\nh4,\n.h4,\nh5,\n.h5,\nh6,\n.h6 {\n  margin-top: 12.5px;\n  margin-bottom: 12.5px;\n}\nh4 small,\n.h4 small,\nh5 small,\n.h5 small,\nh6 small,\n.h6 small,\nh4 .small,\n.h4 .small,\nh5 .small,\n.h5 .small,\nh6 .small,\n.h6 .small {\n  font-size: 75%;\n}\nh1,\n.h1 {\n  font-size: 46px;\n}\nh2,\n.h2 {\n  font-size: 38px;\n}\nh3,\n.h3 {\n  font-size: 31px;\n}\nh4,\n.h4 {\n  font-size: 23px;\n}\nh5,\n.h5 {\n  font-size: 18px;\n}\nh6,\n.h6 {\n  font-size: 16px;\n}\np {\n  margin: 0 0 12.5px;\n}\n.lead {\n  margin-bottom: 25px;\n  font-size: 20px;\n  font-weight: 300;\n  line-height: 1.4;\n}\n@media (min-width: 768px) {\n  .lead {\n    font-size: 27px;\n  }\n}\nsmall,\n.small {\n  font-size: 88%;\n}\ncite {\n  font-style: normal;\n}\nmark,\n.mark {\n  background-color: #fcf8e3;\n  padding: .2em;\n}\n.text-left {\n  text-align: left;\n}\n.text-right {\n  text-align: right;\n}\n.text-center {\n  text-align: center;\n}\n.text-justify {\n  text-align: justify;\n}\n.text-nowrap {\n  white-space: nowrap;\n}\n.text-lowercase {\n  text-transform: lowercase;\n}\n.text-uppercase {\n  text-transform: uppercase;\n}\n.text-capitalize {\n  text-transform: capitalize;\n}\n.text-muted {\n  color: #777777;\n}\n.text-primary {\n  color: #428bca;\n}\na.text-primary:hover {\n  color: #3071a9;\n}\n.text-success {\n  color: #3c763d;\n}\na.text-success:hover {\n  color: #2b542c;\n}\n.text-info {\n  color: #31708f;\n}\na.text-info:hover {\n  color: #245269;\n}\n.text-warning {\n  color: #8a6d3b;\n}\na.text-warning:hover {\n  color: #66512c;\n}\n.text-danger {\n  color: #a94442;\n}\na.text-danger:hover {\n  color: #843534;\n}\n.bg-primary {\n  color: #fff;\n  background-color: #428bca;\n}\na.bg-primary:hover {\n  background-color: #3071a9;\n}\n.bg-success {\n  background-color: #dff0d8;\n}\na.bg-success:hover {\n  background-color: #c1e2b3;\n}\n.bg-info {\n  background-color: #d9edf7;\n}\na.bg-info:hover {\n  background-color: #afd9ee;\n}\n.bg-warning {\n  background-color: #fcf8e3;\n}\na.bg-warning:hover {\n  background-color: #f7ecb5;\n}\n.bg-danger {\n  background-color: #f2dede;\n}\na.bg-danger:hover {\n  background-color: #e4b9b9;\n}\n.page-header {\n  padding-bottom: 11.5px;\n  margin: 50px 0 25px;\n  border-bottom: 1px solid #eeeeee;\n}\nul,\nol {\n  margin-top: 0;\n  margin-bottom: 12.5px;\n}\nul ul,\nol ul,\nul ol,\nol ol {\n  margin-bottom: 0;\n}\n.list-unstyled {\n  padding-left: 0;\n  list-style: none;\n}\n.list-inline {\n  padding-left: 0;\n  list-style: none;\n  margin-left: -5px;\n}\n.list-inline > li {\n  display: inline-block;\n  padding-left: 5px;\n  padding-right: 5px;\n}\ndl {\n  margin-top: 0;\n  margin-bottom: 25px;\n}\ndt,\ndd {\n  line-height: 1.42857143;\n}\ndt {\n  font-weight: bold;\n}\ndd {\n  margin-left: 0;\n}\n@media (min-width: 768px) {\n  .dl-horizontal dt {\n    float: left;\n    width: 160px;\n    clear: left;\n    text-align: right;\n    overflow: hidden;\n    text-overflow: ellipsis;\n    white-space: nowrap;\n  }\n  .dl-horizontal dd {\n    margin-left: 180px;\n  }\n}\nabbr[title],\nabbr[data-original-title] {\n  cursor: help;\n  border-bottom: 1px dotted #777777;\n}\n.initialism {\n  font-size: 90%;\n  text-transform: uppercase;\n}\nblockquote {\n  padding: 12.5px 25px;\n  margin: 0 0 25px;\n  font-size: 22.5px;\n  border-left: 5px solid #eeeeee;\n}\nblockquote p:last-child,\nblockquote ul:last-child,\nblockquote ol:last-child {\n  margin-bottom: 0;\n}\nblockquote footer,\nblockquote small,\nblockquote .small {\n  display: block;\n  font-size: 80%;\n  line-height: 1.42857143;\n  color: #777777;\n}\nblockquote footer:before,\nblockquote small:before,\nblockquote .small:before {\n  content: '\\2014 \\00A0';\n}\n.blockquote-reverse,\nblockquote.pull-right {\n  padding-right: 15px;\n  padding-left: 0;\n  border-right: 5px solid #eeeeee;\n  border-left: 0;\n  text-align: right;\n}\n.blockquote-reverse footer:before,\nblockquote.pull-right footer:before,\n.blockquote-reverse small:before,\nblockquote.pull-right small:before,\n.blockquote-reverse .small:before,\nblockquote.pull-right .small:before {\n  content: '';\n}\n.blockquote-reverse footer:after,\nblockquote.pull-right footer:after,\n.blockquote-reverse small:after,\nblockquote.pull-right small:after,\n.blockquote-reverse .small:after,\nblockquote.pull-right .small:after {\n  content: '\\00A0 \\2014';\n}\nblockquote:before,\nblockquote:after {\n  content: \"\";\n}\naddress {\n  margin-bottom: 25px;\n  font-style: normal;\n  line-height: 1.42857143;\n}\ncode,\nkbd,\npre,\nsamp {\n  font-family: Menlo, Monaco, Consolas, \"Courier New\", monospace;\n}\ncode {\n  padding: 2px 4px;\n  font-size: 90%;\n  color: #c7254e;\n  background-color: #f9f2f4;\n  border-radius: 4px;\n}\nkbd {\n  padding: 2px 4px;\n  font-size: 90%;\n  color: #ffffff;\n  background-color: #333333;\n  border-radius: 3px;\n  box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.25);\n}\nkbd kbd {\n  padding: 0;\n  font-size: 100%;\n  box-shadow: none;\n}\npre {\n  display: block;\n  padding: 12px;\n  margin: 0 0 12.5px;\n  font-size: 17px;\n  line-height: 1.42857143;\n  word-break: break-all;\n  word-wrap: break-word;\n  color: #333333;\n  background-color: #f5f5f5;\n  border: 1px solid #cccccc;\n  border-radius: 4px;\n}\npre code {\n  padding: 0;\n  font-size: inherit;\n  color: inherit;\n  white-space: pre-wrap;\n  background-color: transparent;\n  border-radius: 0;\n}\n.pre-scrollable {\n  max-height: 340px;\n  overflow-y: scroll;\n}\n.container {\n  margin-right: auto;\n  margin-left: auto;\n  padding-left: 15px;\n  padding-right: 15px;\n}\n@media (min-width: 768px) {\n  .container {\n    width: 750px;\n  }\n}\n@media (min-width: 992px) {\n  .container {\n    width: 970px;\n  }\n}\n@media (min-width: 1200px) {\n  .container {\n    width: 1170px;\n  }\n}\n.container-fluid {\n  margin-right: auto;\n  margin-left: auto;\n  padding-left: 15px;\n  padding-right: 15px;\n}\n.row {\n  margin-left: -15px;\n  margin-right: -15px;\n}\n.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 {\n  position: relative;\n  min-height: 1px;\n  padding-left: 15px;\n  padding-right: 15px;\n}\n.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12 {\n  float: left;\n}\n.col-xs-12 {\n  width: 100%;\n}\n.col-xs-11 {\n  width: 91.66666667%;\n}\n.col-xs-10 {\n  width: 83.33333333%;\n}\n.col-xs-9 {\n  width: 75%;\n}\n.col-xs-8 {\n  width: 66.66666667%;\n}\n.col-xs-7 {\n  width: 58.33333333%;\n}\n.col-xs-6 {\n  width: 50%;\n}\n.col-xs-5 {\n  width: 41.66666667%;\n}\n.col-xs-4 {\n  width: 33.33333333%;\n}\n.col-xs-3 {\n  width: 25%;\n}\n.col-xs-2 {\n  width: 16.66666667%;\n}\n.col-xs-1 {\n  width: 8.33333333%;\n}\n.col-xs-pull-12 {\n  right: 100%;\n}\n.col-xs-pull-11 {\n  right: 91.66666667%;\n}\n.col-xs-pull-10 {\n  right: 83.33333333%;\n}\n.col-xs-pull-9 {\n  right: 75%;\n}\n.col-xs-pull-8 {\n  right: 66.66666667%;\n}\n.col-xs-pull-7 {\n  right: 58.33333333%;\n}\n.col-xs-pull-6 {\n  right: 50%;\n}\n.col-xs-pull-5 {\n  right: 41.66666667%;\n}\n.col-xs-pull-4 {\n  right: 33.33333333%;\n}\n.col-xs-pull-3 {\n  right: 25%;\n}\n.col-xs-pull-2 {\n  right: 16.66666667%;\n}\n.col-xs-pull-1 {\n  right: 8.33333333%;\n}\n.col-xs-pull-0 {\n  right: auto;\n}\n.col-xs-push-12 {\n  left: 100%;\n}\n.col-xs-push-11 {\n  left: 91.66666667%;\n}\n.col-xs-push-10 {\n  left: 83.33333333%;\n}\n.col-xs-push-9 {\n  left: 75%;\n}\n.col-xs-push-8 {\n  left: 66.66666667%;\n}\n.col-xs-push-7 {\n  left: 58.33333333%;\n}\n.col-xs-push-6 {\n  left: 50%;\n}\n.col-xs-push-5 {\n  left: 41.66666667%;\n}\n.col-xs-push-4 {\n  left: 33.33333333%;\n}\n.col-xs-push-3 {\n  left: 25%;\n}\n.col-xs-push-2 {\n  left: 16.66666667%;\n}\n.col-xs-push-1 {\n  left: 8.33333333%;\n}\n.col-xs-push-0 {\n  left: auto;\n}\n.col-xs-offset-12 {\n  margin-left: 100%;\n}\n.col-xs-offset-11 {\n  margin-left: 91.66666667%;\n}\n.col-xs-offset-10 {\n  margin-left: 83.33333333%;\n}\n.col-xs-offset-9 {\n  margin-left: 75%;\n}\n.col-xs-offset-8 {\n  margin-left: 66.66666667%;\n}\n.col-xs-offset-7 {\n  margin-left: 58.33333333%;\n}\n.col-xs-offset-6 {\n  margin-left: 50%;\n}\n.col-xs-offset-5 {\n  margin-left: 41.66666667%;\n}\n.col-xs-offset-4 {\n  margin-left: 33.33333333%;\n}\n.col-xs-offset-3 {\n  margin-left: 25%;\n}\n.col-xs-offset-2 {\n  margin-left: 16.66666667%;\n}\n.col-xs-offset-1 {\n  margin-left: 8.33333333%;\n}\n.col-xs-offset-0 {\n  margin-left: 0%;\n}\n@media (min-width: 768px) {\n  .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12 {\n    float: left;\n  }\n  .col-sm-12 {\n    width: 100%;\n  }\n  .col-sm-11 {\n    width: 91.66666667%;\n  }\n  .col-sm-10 {\n    width: 83.33333333%;\n  }\n  .col-sm-9 {\n    width: 75%;\n  }\n  .col-sm-8 {\n    width: 66.66666667%;\n  }\n  .col-sm-7 {\n    width: 58.33333333%;\n  }\n  .col-sm-6 {\n    width: 50%;\n  }\n  .col-sm-5 {\n    width: 41.66666667%;\n  }\n  .col-sm-4 {\n    width: 33.33333333%;\n  }\n  .col-sm-3 {\n    width: 25%;\n  }\n  .col-sm-2 {\n    width: 16.66666667%;\n  }\n  .col-sm-1 {\n    width: 8.33333333%;\n  }\n  .col-sm-pull-12 {\n    right: 100%;\n  }\n  .col-sm-pull-11 {\n    right: 91.66666667%;\n  }\n  .col-sm-pull-10 {\n    right: 83.33333333%;\n  }\n  .col-sm-pull-9 {\n    right: 75%;\n  }\n  .col-sm-pull-8 {\n    right: 66.66666667%;\n  }\n  .col-sm-pull-7 {\n    right: 58.33333333%;\n  }\n  .col-sm-pull-6 {\n    right: 50%;\n  }\n  .col-sm-pull-5 {\n    right: 41.66666667%;\n  }\n  .col-sm-pull-4 {\n    right: 33.33333333%;\n  }\n  .col-sm-pull-3 {\n    right: 25%;\n  }\n  .col-sm-pull-2 {\n    right: 16.66666667%;\n  }\n  .col-sm-pull-1 {\n    right: 8.33333333%;\n  }\n  .col-sm-pull-0 {\n    right: auto;\n  }\n  .col-sm-push-12 {\n    left: 100%;\n  }\n  .col-sm-push-11 {\n    left: 91.66666667%;\n  }\n  .col-sm-push-10 {\n    left: 83.33333333%;\n  }\n  .col-sm-push-9 {\n    left: 75%;\n  }\n  .col-sm-push-8 {\n    left: 66.66666667%;\n  }\n  .col-sm-push-7 {\n    left: 58.33333333%;\n  }\n  .col-sm-push-6 {\n    left: 50%;\n  }\n  .col-sm-push-5 {\n    left: 41.66666667%;\n  }\n  .col-sm-push-4 {\n    left: 33.33333333%;\n  }\n  .col-sm-push-3 {\n    left: 25%;\n  }\n  .col-sm-push-2 {\n    left: 16.66666667%;\n  }\n  .col-sm-push-1 {\n    left: 8.33333333%;\n  }\n  .col-sm-push-0 {\n    left: auto;\n  }\n  .col-sm-offset-12 {\n    margin-left: 100%;\n  }\n  .col-sm-offset-11 {\n    margin-left: 91.66666667%;\n  }\n  .col-sm-offset-10 {\n    margin-left: 83.33333333%;\n  }\n  .col-sm-offset-9 {\n    margin-left: 75%;\n  }\n  .col-sm-offset-8 {\n    margin-left: 66.66666667%;\n  }\n  .col-sm-offset-7 {\n    margin-left: 58.33333333%;\n  }\n  .col-sm-offset-6 {\n    margin-left: 50%;\n  }\n  .col-sm-offset-5 {\n    margin-left: 41.66666667%;\n  }\n  .col-sm-offset-4 {\n    margin-left: 33.33333333%;\n  }\n  .col-sm-offset-3 {\n    margin-left: 25%;\n  }\n  .col-sm-offset-2 {\n    margin-left: 16.66666667%;\n  }\n  .col-sm-offset-1 {\n    margin-left: 8.33333333%;\n  }\n  .col-sm-offset-0 {\n    margin-left: 0%;\n  }\n}\n@media (min-width: 992px) {\n  .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12 {\n    float: left;\n  }\n  .col-md-12 {\n    width: 100%;\n  }\n  .col-md-11 {\n    width: 91.66666667%;\n  }\n  .col-md-10 {\n    width: 83.33333333%;\n  }\n  .col-md-9 {\n    width: 75%;\n  }\n  .col-md-8 {\n    width: 66.66666667%;\n  }\n  .col-md-7 {\n    width: 58.33333333%;\n  }\n  .col-md-6 {\n    width: 50%;\n  }\n  .col-md-5 {\n    width: 41.66666667%;\n  }\n  .col-md-4 {\n    width: 33.33333333%;\n  }\n  .col-md-3 {\n    width: 25%;\n  }\n  .col-md-2 {\n    width: 16.66666667%;\n  }\n  .col-md-1 {\n    width: 8.33333333%;\n  }\n  .col-md-pull-12 {\n    right: 100%;\n  }\n  .col-md-pull-11 {\n    right: 91.66666667%;\n  }\n  .col-md-pull-10 {\n    right: 83.33333333%;\n  }\n  .col-md-pull-9 {\n    right: 75%;\n  }\n  .col-md-pull-8 {\n    right: 66.66666667%;\n  }\n  .col-md-pull-7 {\n    right: 58.33333333%;\n  }\n  .col-md-pull-6 {\n    right: 50%;\n  }\n  .col-md-pull-5 {\n    right: 41.66666667%;\n  }\n  .col-md-pull-4 {\n    right: 33.33333333%;\n  }\n  .col-md-pull-3 {\n    right: 25%;\n  }\n  .col-md-pull-2 {\n    right: 16.66666667%;\n  }\n  .col-md-pull-1 {\n    right: 8.33333333%;\n  }\n  .col-md-pull-0 {\n    right: auto;\n  }\n  .col-md-push-12 {\n    left: 100%;\n  }\n  .col-md-push-11 {\n    left: 91.66666667%;\n  }\n  .col-md-push-10 {\n    left: 83.33333333%;\n  }\n  .col-md-push-9 {\n    left: 75%;\n  }\n  .col-md-push-8 {\n    left: 66.66666667%;\n  }\n  .col-md-push-7 {\n    left: 58.33333333%;\n  }\n  .col-md-push-6 {\n    left: 50%;\n  }\n  .col-md-push-5 {\n    left: 41.66666667%;\n  }\n  .col-md-push-4 {\n    left: 33.33333333%;\n  }\n  .col-md-push-3 {\n    left: 25%;\n  }\n  .col-md-push-2 {\n    left: 16.66666667%;\n  }\n  .col-md-push-1 {\n    left: 8.33333333%;\n  }\n  .col-md-push-0 {\n    left: auto;\n  }\n  .col-md-offset-12 {\n    margin-left: 100%;\n  }\n  .col-md-offset-11 {\n    margin-left: 91.66666667%;\n  }\n  .col-md-offset-10 {\n    margin-left: 83.33333333%;\n  }\n  .col-md-offset-9 {\n    margin-left: 75%;\n  }\n  .col-md-offset-8 {\n    margin-left: 66.66666667%;\n  }\n  .col-md-offset-7 {\n    margin-left: 58.33333333%;\n  }\n  .col-md-offset-6 {\n    margin-left: 50%;\n  }\n  .col-md-offset-5 {\n    margin-left: 41.66666667%;\n  }\n  .col-md-offset-4 {\n    margin-left: 33.33333333%;\n  }\n  .col-md-offset-3 {\n    margin-left: 25%;\n  }\n  .col-md-offset-2 {\n    margin-left: 16.66666667%;\n  }\n  .col-md-offset-1 {\n    margin-left: 8.33333333%;\n  }\n  .col-md-offset-0 {\n    margin-left: 0%;\n  }\n}\n@media (min-width: 1200px) {\n  .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12 {\n    float: left;\n  }\n  .col-lg-12 {\n    width: 100%;\n  }\n  .col-lg-11 {\n    width: 91.66666667%;\n  }\n  .col-lg-10 {\n    width: 83.33333333%;\n  }\n  .col-lg-9 {\n    width: 75%;\n  }\n  .col-lg-8 {\n    width: 66.66666667%;\n  }\n  .col-lg-7 {\n    width: 58.33333333%;\n  }\n  .col-lg-6 {\n    width: 50%;\n  }\n  .col-lg-5 {\n    width: 41.66666667%;\n  }\n  .col-lg-4 {\n    width: 33.33333333%;\n  }\n  .col-lg-3 {\n    width: 25%;\n  }\n  .col-lg-2 {\n    width: 16.66666667%;\n  }\n  .col-lg-1 {\n    width: 8.33333333%;\n  }\n  .col-lg-pull-12 {\n    right: 100%;\n  }\n  .col-lg-pull-11 {\n    right: 91.66666667%;\n  }\n  .col-lg-pull-10 {\n    right: 83.33333333%;\n  }\n  .col-lg-pull-9 {\n    right: 75%;\n  }\n  .col-lg-pull-8 {\n    right: 66.66666667%;\n  }\n  .col-lg-pull-7 {\n    right: 58.33333333%;\n  }\n  .col-lg-pull-6 {\n    right: 50%;\n  }\n  .col-lg-pull-5 {\n    right: 41.66666667%;\n  }\n  .col-lg-pull-4 {\n    right: 33.33333333%;\n  }\n  .col-lg-pull-3 {\n    right: 25%;\n  }\n  .col-lg-pull-2 {\n    right: 16.66666667%;\n  }\n  .col-lg-pull-1 {\n    right: 8.33333333%;\n  }\n  .col-lg-pull-0 {\n    right: auto;\n  }\n  .col-lg-push-12 {\n    left: 100%;\n  }\n  .col-lg-push-11 {\n    left: 91.66666667%;\n  }\n  .col-lg-push-10 {\n    left: 83.33333333%;\n  }\n  .col-lg-push-9 {\n    left: 75%;\n  }\n  .col-lg-push-8 {\n    left: 66.66666667%;\n  }\n  .col-lg-push-7 {\n    left: 58.33333333%;\n  }\n  .col-lg-push-6 {\n    left: 50%;\n  }\n  .col-lg-push-5 {\n    left: 41.66666667%;\n  }\n  .col-lg-push-4 {\n    left: 33.33333333%;\n  }\n  .col-lg-push-3 {\n    left: 25%;\n  }\n  .col-lg-push-2 {\n    left: 16.66666667%;\n  }\n  .col-lg-push-1 {\n    left: 8.33333333%;\n  }\n  .col-lg-push-0 {\n    left: auto;\n  }\n  .col-lg-offset-12 {\n    margin-left: 100%;\n  }\n  .col-lg-offset-11 {\n    margin-left: 91.66666667%;\n  }\n  .col-lg-offset-10 {\n    margin-left: 83.33333333%;\n  }\n  .col-lg-offset-9 {\n    margin-left: 75%;\n  }\n  .col-lg-offset-8 {\n    margin-left: 66.66666667%;\n  }\n  .col-lg-offset-7 {\n    margin-left: 58.33333333%;\n  }\n  .col-lg-offset-6 {\n    margin-left: 50%;\n  }\n  .col-lg-offset-5 {\n    margin-left: 41.66666667%;\n  }\n  .col-lg-offset-4 {\n    margin-left: 33.33333333%;\n  }\n  .col-lg-offset-3 {\n    margin-left: 25%;\n  }\n  .col-lg-offset-2 {\n    margin-left: 16.66666667%;\n  }\n  .col-lg-offset-1 {\n    margin-left: 8.33333333%;\n  }\n  .col-lg-offset-0 {\n    margin-left: 0%;\n  }\n}\ntable {\n  background-color: transparent;\n}\nth {\n  text-align: left;\n}\n.table {\n  width: 100%;\n  max-width: 100%;\n  margin-bottom: 25px;\n}\n.table > thead > tr > th,\n.table > tbody > tr > th,\n.table > tfoot > tr > th,\n.table > thead > tr > td,\n.table > tbody > tr > td,\n.table > tfoot > tr > td {\n  padding: 8px;\n  line-height: 1.42857143;\n  vertical-align: top;\n  border-top: 1px solid #dddddd;\n}\n.table > thead > tr > th {\n  vertical-align: bottom;\n  border-bottom: 2px solid #dddddd;\n}\n.table > caption + thead > tr:first-child > th,\n.table > colgroup + thead > tr:first-child > th,\n.table > thead:first-child > tr:first-child > th,\n.table > caption + thead > tr:first-child > td,\n.table > colgroup + thead > tr:first-child > td,\n.table > thead:first-child > tr:first-child > td {\n  border-top: 0;\n}\n.table > tbody + tbody {\n  border-top: 2px solid #dddddd;\n}\n.table .table {\n  background-color: #ffffff;\n}\n.table-condensed > thead > tr > th,\n.table-condensed > tbody > tr > th,\n.table-condensed > tfoot > tr > th,\n.table-condensed > thead > tr > td,\n.table-condensed > tbody > tr > td,\n.table-condensed > tfoot > tr > td {\n  padding: 5px;\n}\n.table-bordered {\n  border: 1px solid #dddddd;\n}\n.table-bordered > thead > tr > th,\n.table-bordered > tbody > tr > th,\n.table-bordered > tfoot > tr > th,\n.table-bordered > thead > tr > td,\n.table-bordered > tbody > tr > td,\n.table-bordered > tfoot > tr > td {\n  border: 1px solid #dddddd;\n}\n.table-bordered > thead > tr > th,\n.table-bordered > thead > tr > td {\n  border-bottom-width: 2px;\n}\n.table-striped > tbody > tr:nth-child(odd) > td,\n.table-striped > tbody > tr:nth-child(odd) > th {\n  background-color: #f9f9f9;\n}\n.table-hover > tbody > tr:hover > td,\n.table-hover > tbody > tr:hover > th {\n  background-color: #f5f5f5;\n}\ntable col[class*=\"col-\"] {\n  position: static;\n  float: none;\n  display: table-column;\n}\ntable td[class*=\"col-\"],\ntable th[class*=\"col-\"] {\n  position: static;\n  float: none;\n  display: table-cell;\n}\n.table > thead > tr > td.active,\n.table > tbody > tr > td.active,\n.table > tfoot > tr > td.active,\n.table > thead > tr > th.active,\n.table > tbody > tr > th.active,\n.table > tfoot > tr > th.active,\n.table > thead > tr.active > td,\n.table > tbody > tr.active > td,\n.table > tfoot > tr.active > td,\n.table > thead > tr.active > th,\n.table > tbody > tr.active > th,\n.table > tfoot > tr.active > th {\n  background-color: #f5f5f5;\n}\n.table-hover > tbody > tr > td.active:hover,\n.table-hover > tbody > tr > th.active:hover,\n.table-hover > tbody > tr.active:hover > td,\n.table-hover > tbody > tr:hover > .active,\n.table-hover > tbody > tr.active:hover > th {\n  background-color: #e8e8e8;\n}\n.table > thead > tr > td.success,\n.table > tbody > tr > td.success,\n.table > tfoot > tr > td.success,\n.table > thead > tr > th.success,\n.table > tbody > tr > th.success,\n.table > tfoot > tr > th.success,\n.table > thead > tr.success > td,\n.table > tbody > tr.success > td,\n.table > tfoot > tr.success > td,\n.table > thead > tr.success > th,\n.table > tbody > tr.success > th,\n.table > tfoot > tr.success > th {\n  background-color: #dff0d8;\n}\n.table-hover > tbody > tr > td.success:hover,\n.table-hover > tbody > tr > th.success:hover,\n.table-hover > tbody > tr.success:hover > td,\n.table-hover > tbody > tr:hover > .success,\n.table-hover > tbody > tr.success:hover > th {\n  background-color: #d0e9c6;\n}\n.table > thead > tr > td.info,\n.table > tbody > tr > td.info,\n.table > tfoot > tr > td.info,\n.table > thead > tr > th.info,\n.table > tbody > tr > th.info,\n.table > tfoot > tr > th.info,\n.table > thead > tr.info > td,\n.table > tbody > tr.info > td,\n.table > tfoot > tr.info > td,\n.table > thead > tr.info > th,\n.table > tbody > tr.info > th,\n.table > tfoot > tr.info > th {\n  background-color: #d9edf7;\n}\n.table-hover > tbody > tr > td.info:hover,\n.table-hover > tbody > tr > th.info:hover,\n.table-hover > tbody > tr.info:hover > td,\n.table-hover > tbody > tr:hover > .info,\n.table-hover > tbody > tr.info:hover > th {\n  background-color: #c4e3f3;\n}\n.table > thead > tr > td.warning,\n.table > tbody > tr > td.warning,\n.table > tfoot > tr > td.warning,\n.table > thead > tr > th.warning,\n.table > tbody > tr > th.warning,\n.table > tfoot > tr > th.warning,\n.table > thead > tr.warning > td,\n.table > tbody > tr.warning > td,\n.table > tfoot > tr.warning > td,\n.table > thead > tr.warning > th,\n.table > tbody > tr.warning > th,\n.table > tfoot > tr.warning > th {\n  background-color: #fcf8e3;\n}\n.table-hover > tbody > tr > td.warning:hover,\n.table-hover > tbody > tr > th.warning:hover,\n.table-hover > tbody > tr.warning:hover > td,\n.table-hover > tbody > tr:hover > .warning,\n.table-hover > tbody > tr.warning:hover > th {\n  background-color: #faf2cc;\n}\n.table > thead > tr > td.danger,\n.table > tbody > tr > td.danger,\n.table > tfoot > tr > td.danger,\n.table > thead > tr > th.danger,\n.table > tbody > tr > th.danger,\n.table > tfoot > tr > th.danger,\n.table > thead > tr.danger > td,\n.table > tbody > tr.danger > td,\n.table > tfoot > tr.danger > td,\n.table > thead > tr.danger > th,\n.table > tbody > tr.danger > th,\n.table > tfoot > tr.danger > th {\n  background-color: #f2dede;\n}\n.table-hover > tbody > tr > td.danger:hover,\n.table-hover > tbody > tr > th.danger:hover,\n.table-hover > tbody > tr.danger:hover > td,\n.table-hover > tbody > tr:hover > .danger,\n.table-hover > tbody > tr.danger:hover > th {\n  background-color: #ebcccc;\n}\n@media screen and (max-width: 767px) {\n  .table-responsive {\n    width: 100%;\n    margin-bottom: 18.75px;\n    overflow-y: hidden;\n    overflow-x: auto;\n    -ms-overflow-style: -ms-autohiding-scrollbar;\n    border: 1px solid #dddddd;\n    -webkit-overflow-scrolling: touch;\n  }\n  .table-responsive > .table {\n    margin-bottom: 0;\n  }\n  .table-responsive > .table > thead > tr > th,\n  .table-responsive > .table > tbody > tr > th,\n  .table-responsive > .table > tfoot > tr > th,\n  .table-responsive > .table > thead > tr > td,\n  .table-responsive > .table > tbody > tr > td,\n  .table-responsive > .table > tfoot > tr > td {\n    white-space: nowrap;\n  }\n  .table-responsive > .table-bordered {\n    border: 0;\n  }\n  .table-responsive > .table-bordered > thead > tr > th:first-child,\n  .table-responsive > .table-bordered > tbody > tr > th:first-child,\n  .table-responsive > .table-bordered > tfoot > tr > th:first-child,\n  .table-responsive > .table-bordered > thead > tr > td:first-child,\n  .table-responsive > .table-bordered > tbody > tr > td:first-child,\n  .table-responsive > .table-bordered > tfoot > tr > td:first-child {\n    border-left: 0;\n  }\n  .table-responsive > .table-bordered > thead > tr > th:last-child,\n  .table-responsive > .table-bordered > tbody > tr > th:last-child,\n  .table-responsive > .table-bordered > tfoot > tr > th:last-child,\n  .table-responsive > .table-bordered > thead > tr > td:last-child,\n  .table-responsive > .table-bordered > tbody > tr > td:last-child,\n  .table-responsive > .table-bordered > tfoot > tr > td:last-child {\n    border-right: 0;\n  }\n  .table-responsive > .table-bordered > tbody > tr:last-child > th,\n  .table-responsive > .table-bordered > tfoot > tr:last-child > th,\n  .table-responsive > .table-bordered > tbody > tr:last-child > td,\n  .table-responsive > .table-bordered > tfoot > tr:last-child > td {\n    border-bottom: 0;\n  }\n}\nfieldset {\n  padding: 0;\n  margin: 0;\n  border: 0;\n  min-width: 0;\n}\nlegend {\n  display: block;\n  width: 100%;\n  padding: 0;\n  margin-bottom: 25px;\n  font-size: 27px;\n  line-height: inherit;\n  color: #333333;\n  border: 0;\n  border-bottom: 1px solid #e5e5e5;\n}\nlabel {\n  display: inline-block;\n  max-width: 100%;\n  margin-bottom: 5px;\n  font-weight: bold;\n}\ninput[type=\"search\"] {\n  -webkit-box-sizing: border-box;\n  -moz-box-sizing: border-box;\n  box-sizing: border-box;\n}\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n  margin: 4px 0 0;\n  margin-top: 1px \\9;\n  line-height: normal;\n}\ninput[type=\"file\"] {\n  display: block;\n}\ninput[type=\"range\"] {\n  display: block;\n  width: 100%;\n}\nselect[multiple],\nselect[size] {\n  height: auto;\n}\ninput[type=\"file\"]:focus,\ninput[type=\"radio\"]:focus,\ninput[type=\"checkbox\"]:focus {\n  outline: thin dotted;\n  outline: 5px auto -webkit-focus-ring-color;\n  outline-offset: -2px;\n}\noutput {\n  display: block;\n  padding-top: 7px;\n  font-size: 18px;\n  line-height: 1.42857143;\n  color: #555555;\n}\n.form-control {\n  display: block;\n  width: 100%;\n  height: 39px;\n  padding: 6px 12px;\n  font-size: 18px;\n  line-height: 1.42857143;\n  color: #555555;\n  background-color: #ffffff;\n  background-image: none;\n  border: 1px solid #cccccc;\n  border-radius: 4px;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n  -webkit-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n  -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n  transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n}\n.form-control:focus {\n  border-color: #66afe9;\n  outline: 0;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6);\n  box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6);\n}\n.form-control::-moz-placeholder {\n  color: #777777;\n  opacity: 1;\n}\n.form-control:-ms-input-placeholder {\n  color: #777777;\n}\n.form-control::-webkit-input-placeholder {\n  color: #777777;\n}\n.form-control[disabled],\n.form-control[readonly],\nfieldset[disabled] .form-control {\n  cursor: not-allowed;\n  background-color: #eeeeee;\n  opacity: 1;\n}\ntextarea.form-control {\n  height: auto;\n}\ninput[type=\"search\"] {\n  -webkit-appearance: none;\n}\ninput[type=\"date\"],\ninput[type=\"time\"],\ninput[type=\"datetime-local\"],\ninput[type=\"month\"] {\n  line-height: 39px;\n  line-height: 1.42857143 \\0;\n}\ninput[type=\"date\"].input-sm,\ninput[type=\"time\"].input-sm,\ninput[type=\"datetime-local\"].input-sm,\ninput[type=\"month\"].input-sm {\n  line-height: 36px;\n}\ninput[type=\"date\"].input-lg,\ninput[type=\"time\"].input-lg,\ninput[type=\"datetime-local\"].input-lg,\ninput[type=\"month\"].input-lg {\n  line-height: 53px;\n}\n.form-group {\n  margin-bottom: 15px;\n}\n.radio,\n.checkbox {\n  position: relative;\n  display: block;\n  min-height: 25px;\n  margin-top: 10px;\n  margin-bottom: 10px;\n}\n.radio label,\n.checkbox label {\n  padding-left: 20px;\n  margin-bottom: 0;\n  font-weight: normal;\n  cursor: pointer;\n}\n.radio input[type=\"radio\"],\n.radio-inline input[type=\"radio\"],\n.checkbox input[type=\"checkbox\"],\n.checkbox-inline input[type=\"checkbox\"] {\n  position: absolute;\n  margin-left: -20px;\n  margin-top: 4px \\9;\n}\n.radio + .radio,\n.checkbox + .checkbox {\n  margin-top: -5px;\n}\n.radio-inline,\n.checkbox-inline {\n  display: inline-block;\n  padding-left: 20px;\n  margin-bottom: 0;\n  vertical-align: middle;\n  font-weight: normal;\n  cursor: pointer;\n}\n.radio-inline + .radio-inline,\n.checkbox-inline + .checkbox-inline {\n  margin-top: 0;\n  margin-left: 10px;\n}\ninput[type=\"radio\"][disabled],\ninput[type=\"checkbox\"][disabled],\ninput[type=\"radio\"].disabled,\ninput[type=\"checkbox\"].disabled,\nfieldset[disabled] input[type=\"radio\"],\nfieldset[disabled] input[type=\"checkbox\"] {\n  cursor: not-allowed;\n}\n.radio-inline.disabled,\n.checkbox-inline.disabled,\nfieldset[disabled] .radio-inline,\nfieldset[disabled] .checkbox-inline {\n  cursor: not-allowed;\n}\n.radio.disabled label,\n.checkbox.disabled label,\nfieldset[disabled] .radio label,\nfieldset[disabled] .checkbox label {\n  cursor: not-allowed;\n}\n.form-control-static {\n  padding-top: 7px;\n  padding-bottom: 7px;\n  margin-bottom: 0;\n}\n.form-control-static.input-lg,\n.form-control-static.input-sm {\n  padding-left: 0;\n  padding-right: 0;\n}\n.input-sm,\n.form-horizontal .form-group-sm .form-control {\n  height: 36px;\n  padding: 5px 10px;\n  font-size: 16px;\n  line-height: 1.5;\n  border-radius: 3px;\n}\nselect.input-sm {\n  height: 36px;\n  line-height: 36px;\n}\ntextarea.input-sm,\nselect[multiple].input-sm {\n  height: auto;\n}\n.input-lg,\n.form-horizontal .form-group-lg .form-control {\n  height: 53px;\n  padding: 10px 16px;\n  font-size: 23px;\n  line-height: 1.33;\n  border-radius: 6px;\n}\nselect.input-lg {\n  height: 53px;\n  line-height: 53px;\n}\ntextarea.input-lg,\nselect[multiple].input-lg {\n  height: auto;\n}\n.has-feedback {\n  position: relative;\n}\n.has-feedback .form-control {\n  padding-right: 48.75px;\n}\n.form-control-feedback {\n  position: absolute;\n  top: 30px;\n  right: 0;\n  z-index: 2;\n  display: block;\n  width: 39px;\n  height: 39px;\n  line-height: 39px;\n  text-align: center;\n}\n.input-lg + .form-control-feedback {\n  width: 53px;\n  height: 53px;\n  line-height: 53px;\n}\n.input-sm + .form-control-feedback {\n  width: 36px;\n  height: 36px;\n  line-height: 36px;\n}\n.has-success .help-block,\n.has-success .control-label,\n.has-success .radio,\n.has-success .checkbox,\n.has-success .radio-inline,\n.has-success .checkbox-inline {\n  color: #3c763d;\n}\n.has-success .form-control {\n  border-color: #3c763d;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n}\n.has-success .form-control:focus {\n  border-color: #2b542c;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168;\n  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168;\n}\n.has-success .input-group-addon {\n  color: #3c763d;\n  border-color: #3c763d;\n  background-color: #dff0d8;\n}\n.has-success .form-control-feedback {\n  color: #3c763d;\n}\n.has-warning .help-block,\n.has-warning .control-label,\n.has-warning .radio,\n.has-warning .checkbox,\n.has-warning .radio-inline,\n.has-warning .checkbox-inline {\n  color: #8a6d3b;\n}\n.has-warning .form-control {\n  border-color: #8a6d3b;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n}\n.has-warning .form-control:focus {\n  border-color: #66512c;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b;\n  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b;\n}\n.has-warning .input-group-addon {\n  color: #8a6d3b;\n  border-color: #8a6d3b;\n  background-color: #fcf8e3;\n}\n.has-warning .form-control-feedback {\n  color: #8a6d3b;\n}\n.has-error .help-block,\n.has-error .control-label,\n.has-error .radio,\n.has-error .checkbox,\n.has-error .radio-inline,\n.has-error .checkbox-inline {\n  color: #a94442;\n}\n.has-error .form-control {\n  border-color: #a94442;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n}\n.has-error .form-control:focus {\n  border-color: #843534;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483;\n  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483;\n}\n.has-error .input-group-addon {\n  color: #a94442;\n  border-color: #a94442;\n  background-color: #f2dede;\n}\n.has-error .form-control-feedback {\n  color: #a94442;\n}\n.has-feedback label.sr-only ~ .form-control-feedback {\n  top: 0;\n}\n.help-block {\n  display: block;\n  margin-top: 5px;\n  margin-bottom: 10px;\n  color: #737373;\n}\n@media (min-width: 768px) {\n  .form-inline .form-group {\n    display: inline-block;\n    margin-bottom: 0;\n    vertical-align: middle;\n  }\n  .form-inline .form-control {\n    display: inline-block;\n    width: auto;\n    vertical-align: middle;\n  }\n  .form-inline .input-group {\n    display: inline-table;\n    vertical-align: middle;\n  }\n  .form-inline .input-group .input-group-addon,\n  .form-inline .input-group .input-group-btn,\n  .form-inline .input-group .form-control {\n    width: auto;\n  }\n  .form-inline .input-group > .form-control {\n    width: 100%;\n  }\n  .form-inline .control-label {\n    margin-bottom: 0;\n    vertical-align: middle;\n  }\n  .form-inline .radio,\n  .form-inline .checkbox {\n    display: inline-block;\n    margin-top: 0;\n    margin-bottom: 0;\n    vertical-align: middle;\n  }\n  .form-inline .radio label,\n  .form-inline .checkbox label {\n    padding-left: 0;\n  }\n  .form-inline .radio input[type=\"radio\"],\n  .form-inline .checkbox input[type=\"checkbox\"] {\n    position: relative;\n    margin-left: 0;\n  }\n  .form-inline .has-feedback .form-control-feedback {\n    top: 0;\n  }\n}\n.form-horizontal .radio,\n.form-horizontal .checkbox,\n.form-horizontal .radio-inline,\n.form-horizontal .checkbox-inline {\n  margin-top: 0;\n  margin-bottom: 0;\n  padding-top: 7px;\n}\n.form-horizontal .radio,\n.form-horizontal .checkbox {\n  min-height: 32px;\n}\n.form-horizontal .form-group {\n  margin-left: -15px;\n  margin-right: -15px;\n}\n@media (min-width: 768px) {\n  .form-horizontal .control-label {\n    text-align: right;\n    margin-bottom: 0;\n    padding-top: 7px;\n  }\n}\n.form-horizontal .has-feedback .form-control-feedback {\n  top: 0;\n  right: 15px;\n}\n@media (min-width: 768px) {\n  .form-horizontal .form-group-lg .control-label {\n    padding-top: 14.3px;\n  }\n}\n@media (min-width: 768px) {\n  .form-horizontal .form-group-sm .control-label {\n    padding-top: 6px;\n  }\n}\n.btn {\n  display: inline-block;\n  margin-bottom: 0;\n  font-weight: normal;\n  text-align: center;\n  vertical-align: middle;\n  cursor: pointer;\n  background-image: none;\n  border: 1px solid transparent;\n  white-space: nowrap;\n  padding: 6px 12px;\n  font-size: 18px;\n  line-height: 1.42857143;\n  border-radius: 4px;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  user-select: none;\n}\n.btn:focus,\n.btn:active:focus,\n.btn.active:focus {\n  outline: thin dotted;\n  outline: 5px auto -webkit-focus-ring-color;\n  outline-offset: -2px;\n}\n.btn:hover,\n.btn:focus {\n  color: #333333;\n  text-decoration: none;\n}\n.btn:active,\n.btn.active {\n  outline: 0;\n  background-image: none;\n  -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n  box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n}\n.btn.disabled,\n.btn[disabled],\nfieldset[disabled] .btn {\n  cursor: not-allowed;\n  pointer-events: none;\n  opacity: 0.65;\n  filter: alpha(opacity=65);\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\n.btn-default {\n  color: #333333;\n  background-color: #ffffff;\n  border-color: #cccccc;\n}\n.btn-default:hover,\n.btn-default:focus,\n.btn-default:active,\n.btn-default.active,\n.open > .dropdown-toggle.btn-default {\n  color: #333333;\n  background-color: #e6e6e6;\n  border-color: #adadad;\n}\n.btn-default:active,\n.btn-default.active,\n.open > .dropdown-toggle.btn-default {\n  background-image: none;\n}\n.btn-default.disabled,\n.btn-default[disabled],\nfieldset[disabled] .btn-default,\n.btn-default.disabled:hover,\n.btn-default[disabled]:hover,\nfieldset[disabled] .btn-default:hover,\n.btn-default.disabled:focus,\n.btn-default[disabled]:focus,\nfieldset[disabled] .btn-default:focus,\n.btn-default.disabled:active,\n.btn-default[disabled]:active,\nfieldset[disabled] .btn-default:active,\n.btn-default.disabled.active,\n.btn-default[disabled].active,\nfieldset[disabled] .btn-default.active {\n  background-color: #ffffff;\n  border-color: #cccccc;\n}\n.btn-default .badge {\n  color: #ffffff;\n  background-color: #333333;\n}\n.btn-primary {\n  color: #ffffff;\n  background-color: #428bca;\n  border-color: #357ebd;\n}\n.btn-primary:hover,\n.btn-primary:focus,\n.btn-primary:active,\n.btn-primary.active,\n.open > .dropdown-toggle.btn-primary {\n  color: #ffffff;\n  background-color: #3071a9;\n  border-color: #285e8e;\n}\n.btn-primary:active,\n.btn-primary.active,\n.open > .dropdown-toggle.btn-primary {\n  background-image: none;\n}\n.btn-primary.disabled,\n.btn-primary[disabled],\nfieldset[disabled] .btn-primary,\n.btn-primary.disabled:hover,\n.btn-primary[disabled]:hover,\nfieldset[disabled] .btn-primary:hover,\n.btn-primary.disabled:focus,\n.btn-primary[disabled]:focus,\nfieldset[disabled] .btn-primary:focus,\n.btn-primary.disabled:active,\n.btn-primary[disabled]:active,\nfieldset[disabled] .btn-primary:active,\n.btn-primary.disabled.active,\n.btn-primary[disabled].active,\nfieldset[disabled] .btn-primary.active {\n  background-color: #428bca;\n  border-color: #357ebd;\n}\n.btn-primary .badge {\n  color: #428bca;\n  background-color: #ffffff;\n}\n.btn-success {\n  color: #ffffff;\n  background-color: #5cb85c;\n  border-color: #4cae4c;\n}\n.btn-success:hover,\n.btn-success:focus,\n.btn-success:active,\n.btn-success.active,\n.open > .dropdown-toggle.btn-success {\n  color: #ffffff;\n  background-color: #449d44;\n  border-color: #398439;\n}\n.btn-success:active,\n.btn-success.active,\n.open > .dropdown-toggle.btn-success {\n  background-image: none;\n}\n.btn-success.disabled,\n.btn-success[disabled],\nfieldset[disabled] .btn-success,\n.btn-success.disabled:hover,\n.btn-success[disabled]:hover,\nfieldset[disabled] .btn-success:hover,\n.btn-success.disabled:focus,\n.btn-success[disabled]:focus,\nfieldset[disabled] .btn-success:focus,\n.btn-success.disabled:active,\n.btn-success[disabled]:active,\nfieldset[disabled] .btn-success:active,\n.btn-success.disabled.active,\n.btn-success[disabled].active,\nfieldset[disabled] .btn-success.active {\n  background-color: #5cb85c;\n  border-color: #4cae4c;\n}\n.btn-success .badge {\n  color: #5cb85c;\n  background-color: #ffffff;\n}\n.btn-info {\n  color: #ffffff;\n  background-color: #5bc0de;\n  border-color: #46b8da;\n}\n.btn-info:hover,\n.btn-info:focus,\n.btn-info:active,\n.btn-info.active,\n.open > .dropdown-toggle.btn-info {\n  color: #ffffff;\n  background-color: #31b0d5;\n  border-color: #269abc;\n}\n.btn-info:active,\n.btn-info.active,\n.open > .dropdown-toggle.btn-info {\n  background-image: none;\n}\n.btn-info.disabled,\n.btn-info[disabled],\nfieldset[disabled] .btn-info,\n.btn-info.disabled:hover,\n.btn-info[disabled]:hover,\nfieldset[disabled] .btn-info:hover,\n.btn-info.disabled:focus,\n.btn-info[disabled]:focus,\nfieldset[disabled] .btn-info:focus,\n.btn-info.disabled:active,\n.btn-info[disabled]:active,\nfieldset[disabled] .btn-info:active,\n.btn-info.disabled.active,\n.btn-info[disabled].active,\nfieldset[disabled] .btn-info.active {\n  background-color: #5bc0de;\n  border-color: #46b8da;\n}\n.btn-info .badge {\n  color: #5bc0de;\n  background-color: #ffffff;\n}\n.btn-warning {\n  color: #ffffff;\n  background-color: #f0ad4e;\n  border-color: #eea236;\n}\n.btn-warning:hover,\n.btn-warning:focus,\n.btn-warning:active,\n.btn-warning.active,\n.open > .dropdown-toggle.btn-warning {\n  color: #ffffff;\n  background-color: #ec971f;\n  border-color: #d58512;\n}\n.btn-warning:active,\n.btn-warning.active,\n.open > .dropdown-toggle.btn-warning {\n  background-image: none;\n}\n.btn-warning.disabled,\n.btn-warning[disabled],\nfieldset[disabled] .btn-warning,\n.btn-warning.disabled:hover,\n.btn-warning[disabled]:hover,\nfieldset[disabled] .btn-warning:hover,\n.btn-warning.disabled:focus,\n.btn-warning[disabled]:focus,\nfieldset[disabled] .btn-warning:focus,\n.btn-warning.disabled:active,\n.btn-warning[disabled]:active,\nfieldset[disabled] .btn-warning:active,\n.btn-warning.disabled.active,\n.btn-warning[disabled].active,\nfieldset[disabled] .btn-warning.active {\n  background-color: #f0ad4e;\n  border-color: #eea236;\n}\n.btn-warning .badge {\n  color: #f0ad4e;\n  background-color: #ffffff;\n}\n.btn-danger {\n  color: #ffffff;\n  background-color: #d9534f;\n  border-color: #d43f3a;\n}\n.btn-danger:hover,\n.btn-danger:focus,\n.btn-danger:active,\n.btn-danger.active,\n.open > .dropdown-toggle.btn-danger {\n  color: #ffffff;\n  background-color: #c9302c;\n  border-color: #ac2925;\n}\n.btn-danger:active,\n.btn-danger.active,\n.open > .dropdown-toggle.btn-danger {\n  background-image: none;\n}\n.btn-danger.disabled,\n.btn-danger[disabled],\nfieldset[disabled] .btn-danger,\n.btn-danger.disabled:hover,\n.btn-danger[disabled]:hover,\nfieldset[disabled] .btn-danger:hover,\n.btn-danger.disabled:focus,\n.btn-danger[disabled]:focus,\nfieldset[disabled] .btn-danger:focus,\n.btn-danger.disabled:active,\n.btn-danger[disabled]:active,\nfieldset[disabled] .btn-danger:active,\n.btn-danger.disabled.active,\n.btn-danger[disabled].active,\nfieldset[disabled] .btn-danger.active {\n  background-color: #d9534f;\n  border-color: #d43f3a;\n}\n.btn-danger .badge {\n  color: #d9534f;\n  background-color: #ffffff;\n}\n.btn-link {\n  color: #428bca;\n  font-weight: normal;\n  cursor: pointer;\n  border-radius: 0;\n}\n.btn-link,\n.btn-link:active,\n.btn-link[disabled],\nfieldset[disabled] .btn-link {\n  background-color: transparent;\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\n.btn-link,\n.btn-link:hover,\n.btn-link:focus,\n.btn-link:active {\n  border-color: transparent;\n}\n.btn-link:hover,\n.btn-link:focus {\n  color: #2a6496;\n  text-decoration: underline;\n  background-color: transparent;\n}\n.btn-link[disabled]:hover,\nfieldset[disabled] .btn-link:hover,\n.btn-link[disabled]:focus,\nfieldset[disabled] .btn-link:focus {\n  color: #777777;\n  text-decoration: none;\n}\n.btn-lg,\n.btn-group-lg > .btn {\n  padding: 10px 16px;\n  font-size: 23px;\n  line-height: 1.33;\n  border-radius: 6px;\n}\n.btn-sm,\n.btn-group-sm > .btn {\n  padding: 5px 10px;\n  font-size: 16px;\n  line-height: 1.5;\n  border-radius: 3px;\n}\n.btn-xs,\n.btn-group-xs > .btn {\n  padding: 1px 5px;\n  font-size: 16px;\n  line-height: 1.5;\n  border-radius: 3px;\n}\n.btn-block {\n  display: block;\n  width: 100%;\n}\n.btn-block + .btn-block {\n  margin-top: 5px;\n}\ninput[type=\"submit\"].btn-block,\ninput[type=\"reset\"].btn-block,\ninput[type=\"button\"].btn-block {\n  width: 100%;\n}\n.fade {\n  opacity: 0;\n  -webkit-transition: opacity 0.15s linear;\n  -o-transition: opacity 0.15s linear;\n  transition: opacity 0.15s linear;\n}\n.fade.in {\n  opacity: 1;\n}\n.collapse {\n  display: none;\n}\n.collapse.in {\n  display: block;\n}\ntr.collapse.in {\n  display: table-row;\n}\ntbody.collapse.in {\n  display: table-row-group;\n}\n.collapsing {\n  position: relative;\n  height: 0;\n  overflow: hidden;\n  -webkit-transition: height 0.35s ease;\n  -o-transition: height 0.35s ease;\n  transition: height 0.35s ease;\n}\n.caret {\n  display: inline-block;\n  width: 0;\n  height: 0;\n  margin-left: 2px;\n  vertical-align: middle;\n  border-top: 4px solid;\n  border-right: 4px solid transparent;\n  border-left: 4px solid transparent;\n}\n.dropdown {\n  position: relative;\n}\n.dropdown-toggle:focus {\n  outline: 0;\n}\n.dropdown-menu {\n  position: absolute;\n  top: 100%;\n  left: 0;\n  z-index: 1000;\n  display: none;\n  float: left;\n  min-width: 160px;\n  padding: 5px 0;\n  margin: 2px 0 0;\n  list-style: none;\n  font-size: 18px;\n  text-align: left;\n  background-color: #ffffff;\n  border: 1px solid #cccccc;\n  border: 1px solid rgba(0, 0, 0, 0.15);\n  border-radius: 4px;\n  -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);\n  box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);\n  background-clip: padding-box;\n}\n.dropdown-menu.pull-right {\n  right: 0;\n  left: auto;\n}\n.dropdown-menu .divider {\n  height: 1px;\n  margin: 11.5px 0;\n  overflow: hidden;\n  background-color: #e5e5e5;\n}\n.dropdown-menu > li > a {\n  display: block;\n  padding: 3px 20px;\n  clear: both;\n  font-weight: normal;\n  line-height: 1.42857143;\n  color: #333333;\n  white-space: nowrap;\n}\n.dropdown-menu > li > a:hover,\n.dropdown-menu > li > a:focus {\n  text-decoration: none;\n  color: #262626;\n  background-color: #f5f5f5;\n}\n.dropdown-menu > .active > a,\n.dropdown-menu > .active > a:hover,\n.dropdown-menu > .active > a:focus {\n  color: #ffffff;\n  text-decoration: none;\n  outline: 0;\n  background-color: #428bca;\n}\n.dropdown-menu > .disabled > a,\n.dropdown-menu > .disabled > a:hover,\n.dropdown-menu > .disabled > a:focus {\n  color: #777777;\n}\n.dropdown-menu > .disabled > a:hover,\n.dropdown-menu > .disabled > a:focus {\n  text-decoration: none;\n  background-color: transparent;\n  background-image: none;\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n  cursor: not-allowed;\n}\n.open > .dropdown-menu {\n  display: block;\n}\n.open > a {\n  outline: 0;\n}\n.dropdown-menu-right {\n  left: auto;\n  right: 0;\n}\n.dropdown-menu-left {\n  left: 0;\n  right: auto;\n}\n.dropdown-header {\n  display: block;\n  padding: 3px 20px;\n  font-size: 16px;\n  line-height: 1.42857143;\n  color: #777777;\n  white-space: nowrap;\n}\n.dropdown-backdrop {\n  position: fixed;\n  left: 0;\n  right: 0;\n  bottom: 0;\n  top: 0;\n  z-index: 990;\n}\n.pull-right > .dropdown-menu {\n  right: 0;\n  left: auto;\n}\n.dropup .caret,\n.navbar-fixed-bottom .dropdown .caret {\n  border-top: 0;\n  border-bottom: 4px solid;\n  content: \"\";\n}\n.dropup .dropdown-menu,\n.navbar-fixed-bottom .dropdown .dropdown-menu {\n  top: auto;\n  bottom: 100%;\n  margin-bottom: 1px;\n}\n@media (min-width: 768px) {\n  .navbar-right .dropdown-menu {\n    left: auto;\n    right: 0;\n  }\n  .navbar-right .dropdown-menu-left {\n    left: 0;\n    right: auto;\n  }\n}\n.btn-group,\n.btn-group-vertical {\n  position: relative;\n  display: inline-block;\n  vertical-align: middle;\n}\n.btn-group > .btn,\n.btn-group-vertical > .btn {\n  position: relative;\n  float: left;\n}\n.btn-group > .btn:hover,\n.btn-group-vertical > .btn:hover,\n.btn-group > .btn:focus,\n.btn-group-vertical > .btn:focus,\n.btn-group > .btn:active,\n.btn-group-vertical > .btn:active,\n.btn-group > .btn.active,\n.btn-group-vertical > .btn.active {\n  z-index: 2;\n}\n.btn-group > .btn:focus,\n.btn-group-vertical > .btn:focus {\n  outline: 0;\n}\n.btn-group .btn + .btn,\n.btn-group .btn + .btn-group,\n.btn-group .btn-group + .btn,\n.btn-group .btn-group + .btn-group {\n  margin-left: -1px;\n}\n.btn-toolbar {\n  margin-left: -5px;\n}\n.btn-toolbar .btn-group,\n.btn-toolbar .input-group {\n  float: left;\n}\n.btn-toolbar > .btn,\n.btn-toolbar > .btn-group,\n.btn-toolbar > .input-group {\n  margin-left: 5px;\n}\n.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {\n  border-radius: 0;\n}\n.btn-group > .btn:first-child {\n  margin-left: 0;\n}\n.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) {\n  border-bottom-right-radius: 0;\n  border-top-right-radius: 0;\n}\n.btn-group > .btn:last-child:not(:first-child),\n.btn-group > .dropdown-toggle:not(:first-child) {\n  border-bottom-left-radius: 0;\n  border-top-left-radius: 0;\n}\n.btn-group > .btn-group {\n  float: left;\n}\n.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {\n  border-radius: 0;\n}\n.btn-group > .btn-group:first-child > .btn:last-child,\n.btn-group > .btn-group:first-child > .dropdown-toggle {\n  border-bottom-right-radius: 0;\n  border-top-right-radius: 0;\n}\n.btn-group > .btn-group:last-child > .btn:first-child {\n  border-bottom-left-radius: 0;\n  border-top-left-radius: 0;\n}\n.btn-group .dropdown-toggle:active,\n.btn-group.open .dropdown-toggle {\n  outline: 0;\n}\n.btn-group > .btn + .dropdown-toggle {\n  padding-left: 8px;\n  padding-right: 8px;\n}\n.btn-group > .btn-lg + .dropdown-toggle {\n  padding-left: 12px;\n  padding-right: 12px;\n}\n.btn-group.open .dropdown-toggle {\n  -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n  box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n}\n.btn-group.open .dropdown-toggle.btn-link {\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\n.btn .caret {\n  margin-left: 0;\n}\n.btn-lg .caret {\n  border-width: 5px 5px 0;\n  border-bottom-width: 0;\n}\n.dropup .btn-lg .caret {\n  border-width: 0 5px 5px;\n}\n.btn-group-vertical > .btn,\n.btn-group-vertical > .btn-group,\n.btn-group-vertical > .btn-group > .btn {\n  display: block;\n  float: none;\n  width: 100%;\n  max-width: 100%;\n}\n.btn-group-vertical > .btn-group > .btn {\n  float: none;\n}\n.btn-group-vertical > .btn + .btn,\n.btn-group-vertical > .btn + .btn-group,\n.btn-group-vertical > .btn-group + .btn,\n.btn-group-vertical > .btn-group + .btn-group {\n  margin-top: -1px;\n  margin-left: 0;\n}\n.btn-group-vertical > .btn:not(:first-child):not(:last-child) {\n  border-radius: 0;\n}\n.btn-group-vertical > .btn:first-child:not(:last-child) {\n  border-top-right-radius: 4px;\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 0;\n}\n.btn-group-vertical > .btn:last-child:not(:first-child) {\n  border-bottom-left-radius: 4px;\n  border-top-right-radius: 0;\n  border-top-left-radius: 0;\n}\n.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {\n  border-radius: 0;\n}\n.btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child,\n.btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle {\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 0;\n}\n.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child {\n  border-top-right-radius: 0;\n  border-top-left-radius: 0;\n}\n.btn-group-justified {\n  display: table;\n  width: 100%;\n  table-layout: fixed;\n  border-collapse: separate;\n}\n.btn-group-justified > .btn,\n.btn-group-justified > .btn-group {\n  float: none;\n  display: table-cell;\n  width: 1%;\n}\n.btn-group-justified > .btn-group .btn {\n  width: 100%;\n}\n.btn-group-justified > .btn-group .dropdown-menu {\n  left: auto;\n}\n[data-toggle=\"buttons\"] > .btn > input[type=\"radio\"],\n[data-toggle=\"buttons\"] > .btn > input[type=\"checkbox\"] {\n  position: absolute;\n  z-index: -1;\n  opacity: 0;\n  filter: alpha(opacity=0);\n}\n.input-group {\n  position: relative;\n  display: table;\n  border-collapse: separate;\n}\n.input-group[class*=\"col-\"] {\n  float: none;\n  padding-left: 0;\n  padding-right: 0;\n}\n.input-group .form-control {\n  position: relative;\n  z-index: 2;\n  float: left;\n  width: 100%;\n  margin-bottom: 0;\n}\n.input-group-lg > .form-control,\n.input-group-lg > .input-group-addon,\n.input-group-lg > .input-group-btn > .btn {\n  height: 53px;\n  padding: 10px 16px;\n  font-size: 23px;\n  line-height: 1.33;\n  border-radius: 6px;\n}\nselect.input-group-lg > .form-control,\nselect.input-group-lg > .input-group-addon,\nselect.input-group-lg > .input-group-btn > .btn {\n  height: 53px;\n  line-height: 53px;\n}\ntextarea.input-group-lg > .form-control,\ntextarea.input-group-lg > .input-group-addon,\ntextarea.input-group-lg > .input-group-btn > .btn,\nselect[multiple].input-group-lg > .form-control,\nselect[multiple].input-group-lg > .input-group-addon,\nselect[multiple].input-group-lg > .input-group-btn > .btn {\n  height: auto;\n}\n.input-group-sm > .form-control,\n.input-group-sm > .input-group-addon,\n.input-group-sm > .input-group-btn > .btn {\n  height: 36px;\n  padding: 5px 10px;\n  font-size: 16px;\n  line-height: 1.5;\n  border-radius: 3px;\n}\nselect.input-group-sm > .form-control,\nselect.input-group-sm > .input-group-addon,\nselect.input-group-sm > .input-group-btn > .btn {\n  height: 36px;\n  line-height: 36px;\n}\ntextarea.input-group-sm > .form-control,\ntextarea.input-group-sm > .input-group-addon,\ntextarea.input-group-sm > .input-group-btn > .btn,\nselect[multiple].input-group-sm > .form-control,\nselect[multiple].input-group-sm > .input-group-addon,\nselect[multiple].input-group-sm > .input-group-btn > .btn {\n  height: auto;\n}\n.input-group-addon,\n.input-group-btn,\n.input-group .form-control {\n  display: table-cell;\n}\n.input-group-addon:not(:first-child):not(:last-child),\n.input-group-btn:not(:first-child):not(:last-child),\n.input-group .form-control:not(:first-child):not(:last-child) {\n  border-radius: 0;\n}\n.input-group-addon,\n.input-group-btn {\n  width: 1%;\n  white-space: nowrap;\n  vertical-align: middle;\n}\n.input-group-addon {\n  padding: 6px 12px;\n  font-size: 18px;\n  font-weight: normal;\n  line-height: 1;\n  color: #555555;\n  text-align: center;\n  background-color: #eeeeee;\n  border: 1px solid #cccccc;\n  border-radius: 4px;\n}\n.input-group-addon.input-sm {\n  padding: 5px 10px;\n  font-size: 16px;\n  border-radius: 3px;\n}\n.input-group-addon.input-lg {\n  padding: 10px 16px;\n  font-size: 23px;\n  border-radius: 6px;\n}\n.input-group-addon input[type=\"radio\"],\n.input-group-addon input[type=\"checkbox\"] {\n  margin-top: 0;\n}\n.input-group .form-control:first-child,\n.input-group-addon:first-child,\n.input-group-btn:first-child > .btn,\n.input-group-btn:first-child > .btn-group > .btn,\n.input-group-btn:first-child > .dropdown-toggle,\n.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle),\n.input-group-btn:last-child > .btn-group:not(:last-child) > .btn {\n  border-bottom-right-radius: 0;\n  border-top-right-radius: 0;\n}\n.input-group-addon:first-child {\n  border-right: 0;\n}\n.input-group .form-control:last-child,\n.input-group-addon:last-child,\n.input-group-btn:last-child > .btn,\n.input-group-btn:last-child > .btn-group > .btn,\n.input-group-btn:last-child > .dropdown-toggle,\n.input-group-btn:first-child > .btn:not(:first-child),\n.input-group-btn:first-child > .btn-group:not(:first-child) > .btn {\n  border-bottom-left-radius: 0;\n  border-top-left-radius: 0;\n}\n.input-group-addon:last-child {\n  border-left: 0;\n}\n.input-group-btn {\n  position: relative;\n  font-size: 0;\n  white-space: nowrap;\n}\n.input-group-btn > .btn {\n  position: relative;\n}\n.input-group-btn > .btn + .btn {\n  margin-left: -1px;\n}\n.input-group-btn > .btn:hover,\n.input-group-btn > .btn:focus,\n.input-group-btn > .btn:active {\n  z-index: 2;\n}\n.input-group-btn:first-child > .btn,\n.input-group-btn:first-child > .btn-group {\n  margin-right: -1px;\n}\n.input-group-btn:last-child > .btn,\n.input-group-btn:last-child > .btn-group {\n  margin-left: -1px;\n}\n.nav {\n  margin-bottom: 0;\n  padding-left: 0;\n  list-style: none;\n}\n.nav > li {\n  position: relative;\n  display: block;\n}\n.nav > li > a {\n  position: relative;\n  display: block;\n  padding: 10px 15px;\n}\n.nav > li > a:hover,\n.nav > li > a:focus {\n  text-decoration: none;\n  background-color: #eeeeee;\n}\n.nav > li.disabled > a {\n  color: #777777;\n}\n.nav > li.disabled > a:hover,\n.nav > li.disabled > a:focus {\n  color: #777777;\n  text-decoration: none;\n  background-color: transparent;\n  cursor: not-allowed;\n}\n.nav .open > a,\n.nav .open > a:hover,\n.nav .open > a:focus {\n  background-color: #eeeeee;\n  border-color: #428bca;\n}\n.nav .nav-divider {\n  height: 1px;\n  margin: 11.5px 0;\n  overflow: hidden;\n  background-color: #e5e5e5;\n}\n.nav > li > a > img {\n  max-width: none;\n}\n.nav-tabs {\n  border-bottom: 1px solid #dddddd;\n}\n.nav-tabs > li {\n  float: left;\n  margin-bottom: -1px;\n}\n.nav-tabs > li > a {\n  margin-right: 2px;\n  line-height: 1.42857143;\n  border: 1px solid transparent;\n  border-radius: 4px 4px 0 0;\n}\n.nav-tabs > li > a:hover {\n  border-color: #eeeeee #eeeeee #dddddd;\n}\n.nav-tabs > li.active > a,\n.nav-tabs > li.active > a:hover,\n.nav-tabs > li.active > a:focus {\n  color: #555555;\n  background-color: #ffffff;\n  border: 1px solid #dddddd;\n  border-bottom-color: transparent;\n  cursor: default;\n}\n.nav-tabs.nav-justified {\n  width: 100%;\n  border-bottom: 0;\n}\n.nav-tabs.nav-justified > li {\n  float: none;\n}\n.nav-tabs.nav-justified > li > a {\n  text-align: center;\n  margin-bottom: 5px;\n}\n.nav-tabs.nav-justified > .dropdown .dropdown-menu {\n  top: auto;\n  left: auto;\n}\n@media (min-width: 768px) {\n  .nav-tabs.nav-justified > li {\n    display: table-cell;\n    width: 1%;\n  }\n  .nav-tabs.nav-justified > li > a {\n    margin-bottom: 0;\n  }\n}\n.nav-tabs.nav-justified > li > a {\n  margin-right: 0;\n  border-radius: 4px;\n}\n.nav-tabs.nav-justified > .active > a,\n.nav-tabs.nav-justified > .active > a:hover,\n.nav-tabs.nav-justified > .active > a:focus {\n  border: 1px solid #dddddd;\n}\n@media (min-width: 768px) {\n  .nav-tabs.nav-justified > li > a {\n    border-bottom: 1px solid #dddddd;\n    border-radius: 4px 4px 0 0;\n  }\n  .nav-tabs.nav-justified > .active > a,\n  .nav-tabs.nav-justified > .active > a:hover,\n  .nav-tabs.nav-justified > .active > a:focus {\n    border-bottom-color: #ffffff;\n  }\n}\n.nav-pills > li {\n  float: left;\n}\n.nav-pills > li > a {\n  border-radius: 4px;\n}\n.nav-pills > li + li {\n  margin-left: 2px;\n}\n.nav-pills > li.active > a,\n.nav-pills > li.active > a:hover,\n.nav-pills > li.active > a:focus {\n  color: #ffffff;\n  background-color: #428bca;\n}\n.nav-stacked > li {\n  float: none;\n}\n.nav-stacked > li + li {\n  margin-top: 2px;\n  margin-left: 0;\n}\n.nav-justified {\n  width: 100%;\n}\n.nav-justified > li {\n  float: none;\n}\n.nav-justified > li > a {\n  text-align: center;\n  margin-bottom: 5px;\n}\n.nav-justified > .dropdown .dropdown-menu {\n  top: auto;\n  left: auto;\n}\n@media (min-width: 768px) {\n  .nav-justified > li {\n    display: table-cell;\n    width: 1%;\n  }\n  .nav-justified > li > a {\n    margin-bottom: 0;\n  }\n}\n.nav-tabs-justified {\n  border-bottom: 0;\n}\n.nav-tabs-justified > li > a {\n  margin-right: 0;\n  border-radius: 4px;\n}\n.nav-tabs-justified > .active > a,\n.nav-tabs-justified > .active > a:hover,\n.nav-tabs-justified > .active > a:focus {\n  border: 1px solid #dddddd;\n}\n@media (min-width: 768px) {\n  .nav-tabs-justified > li > a {\n    border-bottom: 1px solid #dddddd;\n    border-radius: 4px 4px 0 0;\n  }\n  .nav-tabs-justified > .active > a,\n  .nav-tabs-justified > .active > a:hover,\n  .nav-tabs-justified > .active > a:focus {\n    border-bottom-color: #ffffff;\n  }\n}\n.tab-content > .tab-pane {\n  display: none;\n}\n.tab-content > .active {\n  display: block;\n}\n.nav-tabs .dropdown-menu {\n  margin-top: -1px;\n  border-top-right-radius: 0;\n  border-top-left-radius: 0;\n}\n.navbar {\n  position: relative;\n  min-height: 50px;\n  margin-bottom: 25px;\n  border: 1px solid transparent;\n}\n@media (min-width: 768px) {\n  .navbar {\n    border-radius: 4px;\n  }\n}\n@media (min-width: 768px) {\n  .navbar-header {\n    float: left;\n  }\n}\n.navbar-collapse {\n  overflow-x: visible;\n  padding-right: 15px;\n  padding-left: 15px;\n  border-top: 1px solid transparent;\n  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1);\n  -webkit-overflow-scrolling: touch;\n}\n.navbar-collapse.in {\n  overflow-y: auto;\n}\n@media (min-width: 768px) {\n  .navbar-collapse {\n    width: auto;\n    border-top: 0;\n    box-shadow: none;\n  }\n  .navbar-collapse.collapse {\n    display: block !important;\n    height: auto !important;\n    padding-bottom: 0;\n    overflow: visible !important;\n  }\n  .navbar-collapse.in {\n    overflow-y: visible;\n  }\n  .navbar-fixed-top .navbar-collapse,\n  .navbar-static-top .navbar-collapse,\n  .navbar-fixed-bottom .navbar-collapse {\n    padding-left: 0;\n    padding-right: 0;\n  }\n}\n.navbar-fixed-top .navbar-collapse,\n.navbar-fixed-bottom .navbar-collapse {\n  max-height: 340px;\n}\n@media (max-width: 480px) and (orientation: landscape) {\n  .navbar-fixed-top .navbar-collapse,\n  .navbar-fixed-bottom .navbar-collapse {\n    max-height: 200px;\n  }\n}\n.container > .navbar-header,\n.container-fluid > .navbar-header,\n.container > .navbar-collapse,\n.container-fluid > .navbar-collapse {\n  margin-right: -15px;\n  margin-left: -15px;\n}\n@media (min-width: 768px) {\n  .container > .navbar-header,\n  .container-fluid > .navbar-header,\n  .container > .navbar-collapse,\n  .container-fluid > .navbar-collapse {\n    margin-right: 0;\n    margin-left: 0;\n  }\n}\n.navbar-static-top {\n  z-index: 1000;\n  border-width: 0 0 1px;\n}\n@media (min-width: 768px) {\n  .navbar-static-top {\n    border-radius: 0;\n  }\n}\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n  position: fixed;\n  right: 0;\n  left: 0;\n  z-index: 1030;\n  -webkit-transform: translate3d(0, 0, 0);\n  transform: translate3d(0, 0, 0);\n}\n@media (min-width: 768px) {\n  .navbar-fixed-top,\n  .navbar-fixed-bottom {\n    border-radius: 0;\n  }\n}\n.navbar-fixed-top {\n  top: 0;\n  border-width: 0 0 1px;\n}\n.navbar-fixed-bottom {\n  bottom: 0;\n  margin-bottom: 0;\n  border-width: 1px 0 0;\n}\n.navbar-brand {\n  float: left;\n  padding: 12.5px 15px;\n  font-size: 23px;\n  line-height: 25px;\n  height: 50px;\n}\n.navbar-brand:hover,\n.navbar-brand:focus {\n  text-decoration: none;\n}\n@media (min-width: 768px) {\n  .navbar > .container .navbar-brand,\n  .navbar > .container-fluid .navbar-brand {\n    margin-left: -15px;\n  }\n}\n.navbar-toggle {\n  position: relative;\n  float: right;\n  margin-right: 15px;\n  padding: 9px 10px;\n  margin-top: 8px;\n  margin-bottom: 8px;\n  background-color: transparent;\n  background-image: none;\n  border: 1px solid transparent;\n  border-radius: 4px;\n}\n.navbar-toggle:focus {\n  outline: 0;\n}\n.navbar-toggle .icon-bar {\n  display: block;\n  width: 22px;\n  height: 2px;\n  border-radius: 1px;\n}\n.navbar-toggle .icon-bar + .icon-bar {\n  margin-top: 4px;\n}\n@media (min-width: 768px) {\n  .navbar-toggle {\n    display: none;\n  }\n}\n.navbar-nav {\n  margin: 6.25px -15px;\n}\n.navbar-nav > li > a {\n  padding-top: 10px;\n  padding-bottom: 10px;\n  line-height: 25px;\n}\n@media (max-width: 767px) {\n  .navbar-nav .open .dropdown-menu {\n    position: static;\n    float: none;\n    width: auto;\n    margin-top: 0;\n    background-color: transparent;\n    border: 0;\n    box-shadow: none;\n  }\n  .navbar-nav .open .dropdown-menu > li > a,\n  .navbar-nav .open .dropdown-menu .dropdown-header {\n    padding: 5px 15px 5px 25px;\n  }\n  .navbar-nav .open .dropdown-menu > li > a {\n    line-height: 25px;\n  }\n  .navbar-nav .open .dropdown-menu > li > a:hover,\n  .navbar-nav .open .dropdown-menu > li > a:focus {\n    background-image: none;\n  }\n}\n@media (min-width: 768px) {\n  .navbar-nav {\n    float: left;\n    margin: 0;\n  }\n  .navbar-nav > li {\n    float: left;\n  }\n  .navbar-nav > li > a {\n    padding-top: 12.5px;\n    padding-bottom: 12.5px;\n  }\n  .navbar-nav.navbar-right:last-child {\n    margin-right: -15px;\n  }\n}\n@media (min-width: 768px) {\n  .navbar-left {\n    float: left !important;\n  }\n  .navbar-right {\n    float: right !important;\n  }\n}\n.navbar-form {\n  margin-left: -15px;\n  margin-right: -15px;\n  padding: 10px 15px;\n  border-top: 1px solid transparent;\n  border-bottom: 1px solid transparent;\n  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);\n  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);\n  margin-top: 5.5px;\n  margin-bottom: 5.5px;\n}\n@media (min-width: 768px) {\n  .navbar-form .form-group {\n    display: inline-block;\n    margin-bottom: 0;\n    vertical-align: middle;\n  }\n  .navbar-form .form-control {\n    display: inline-block;\n    width: auto;\n    vertical-align: middle;\n  }\n  .navbar-form .input-group {\n    display: inline-table;\n    vertical-align: middle;\n  }\n  .navbar-form .input-group .input-group-addon,\n  .navbar-form .input-group .input-group-btn,\n  .navbar-form .input-group .form-control {\n    width: auto;\n  }\n  .navbar-form .input-group > .form-control {\n    width: 100%;\n  }\n  .navbar-form .control-label {\n    margin-bottom: 0;\n    vertical-align: middle;\n  }\n  .navbar-form .radio,\n  .navbar-form .checkbox {\n    display: inline-block;\n    margin-top: 0;\n    margin-bottom: 0;\n    vertical-align: middle;\n  }\n  .navbar-form .radio label,\n  .navbar-form .checkbox label {\n    padding-left: 0;\n  }\n  .navbar-form .radio input[type=\"radio\"],\n  .navbar-form .checkbox input[type=\"checkbox\"] {\n    position: relative;\n    margin-left: 0;\n  }\n  .navbar-form .has-feedback .form-control-feedback {\n    top: 0;\n  }\n}\n@media (max-width: 767px) {\n  .navbar-form .form-group {\n    margin-bottom: 5px;\n  }\n}\n@media (min-width: 768px) {\n  .navbar-form {\n    width: auto;\n    border: 0;\n    margin-left: 0;\n    margin-right: 0;\n    padding-top: 0;\n    padding-bottom: 0;\n    -webkit-box-shadow: none;\n    box-shadow: none;\n  }\n  .navbar-form.navbar-right:last-child {\n    margin-right: -15px;\n  }\n}\n.navbar-nav > li > .dropdown-menu {\n  margin-top: 0;\n  border-top-right-radius: 0;\n  border-top-left-radius: 0;\n}\n.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 0;\n}\n.navbar-btn {\n  margin-top: 5.5px;\n  margin-bottom: 5.5px;\n}\n.navbar-btn.btn-sm {\n  margin-top: 7px;\n  margin-bottom: 7px;\n}\n.navbar-btn.btn-xs {\n  margin-top: 14px;\n  margin-bottom: 14px;\n}\n.navbar-text {\n  margin-top: 12.5px;\n  margin-bottom: 12.5px;\n}\n@media (min-width: 768px) {\n  .navbar-text {\n    float: left;\n    margin-left: 15px;\n    margin-right: 15px;\n  }\n  .navbar-text.navbar-right:last-child {\n    margin-right: 0;\n  }\n}\n.navbar-default {\n  background-color: #f8f8f8;\n  border-color: #e7e7e7;\n}\n.navbar-default .navbar-brand {\n  color: #777777;\n}\n.navbar-default .navbar-brand:hover,\n.navbar-default .navbar-brand:focus {\n  color: #5e5e5e;\n  background-color: transparent;\n}\n.navbar-default .navbar-text {\n  color: #777777;\n}\n.navbar-default .navbar-nav > li > a {\n  color: #777777;\n}\n.navbar-default .navbar-nav > li > a:hover,\n.navbar-default .navbar-nav > li > a:focus {\n  color: #333333;\n  background-color: transparent;\n}\n.navbar-default .navbar-nav > .active > a,\n.navbar-default .navbar-nav > .active > a:hover,\n.navbar-default .navbar-nav > .active > a:focus {\n  color: #555555;\n  background-color: #e7e7e7;\n}\n.navbar-default .navbar-nav > .disabled > a,\n.navbar-default .navbar-nav > .disabled > a:hover,\n.navbar-default .navbar-nav > .disabled > a:focus {\n  color: #cccccc;\n  background-color: transparent;\n}\n.navbar-default .navbar-toggle {\n  border-color: #dddddd;\n}\n.navbar-default .navbar-toggle:hover,\n.navbar-default .navbar-toggle:focus {\n  background-color: #dddddd;\n}\n.navbar-default .navbar-toggle .icon-bar {\n  background-color: #888888;\n}\n.navbar-default .navbar-collapse,\n.navbar-default .navbar-form {\n  border-color: #e7e7e7;\n}\n.navbar-default .navbar-nav > .open > a,\n.navbar-default .navbar-nav > .open > a:hover,\n.navbar-default .navbar-nav > .open > a:focus {\n  background-color: #e7e7e7;\n  color: #555555;\n}\n@media (max-width: 767px) {\n  .navbar-default .navbar-nav .open .dropdown-menu > li > a {\n    color: #777777;\n  }\n  .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover,\n  .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus {\n    color: #333333;\n    background-color: transparent;\n  }\n  .navbar-default .navbar-nav .open .dropdown-menu > .active > a,\n  .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover,\n  .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus {\n    color: #555555;\n    background-color: #e7e7e7;\n  }\n  .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a,\n  .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover,\n  .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus {\n    color: #cccccc;\n    background-color: transparent;\n  }\n}\n.navbar-default .navbar-link {\n  color: #777777;\n}\n.navbar-default .navbar-link:hover {\n  color: #333333;\n}\n.navbar-default .btn-link {\n  color: #777777;\n}\n.navbar-default .btn-link:hover,\n.navbar-default .btn-link:focus {\n  color: #333333;\n}\n.navbar-default .btn-link[disabled]:hover,\nfieldset[disabled] .navbar-default .btn-link:hover,\n.navbar-default .btn-link[disabled]:focus,\nfieldset[disabled] .navbar-default .btn-link:focus {\n  color: #cccccc;\n}\n.navbar-inverse {\n  background-color: #222222;\n  border-color: #080808;\n}\n.navbar-inverse .navbar-brand {\n  color: #777777;\n}\n.navbar-inverse .navbar-brand:hover,\n.navbar-inverse .navbar-brand:focus {\n  color: #ffffff;\n  background-color: transparent;\n}\n.navbar-inverse .navbar-text {\n  color: #777777;\n}\n.navbar-inverse .navbar-nav > li > a {\n  color: #777777;\n}\n.navbar-inverse .navbar-nav > li > a:hover,\n.navbar-inverse .navbar-nav > li > a:focus {\n  color: #ffffff;\n  background-color: transparent;\n}\n.navbar-inverse .navbar-nav > .active > a,\n.navbar-inverse .navbar-nav > .active > a:hover,\n.navbar-inverse .navbar-nav > .active > a:focus {\n  color: #ffffff;\n  background-color: #080808;\n}\n.navbar-inverse .navbar-nav > .disabled > a,\n.navbar-inverse .navbar-nav > .disabled > a:hover,\n.navbar-inverse .navbar-nav > .disabled > a:focus {\n  color: #444444;\n  background-color: transparent;\n}\n.navbar-inverse .navbar-toggle {\n  border-color: #333333;\n}\n.navbar-inverse .navbar-toggle:hover,\n.navbar-inverse .navbar-toggle:focus {\n  background-color: #333333;\n}\n.navbar-inverse .navbar-toggle .icon-bar {\n  background-color: #ffffff;\n}\n.navbar-inverse .navbar-collapse,\n.navbar-inverse .navbar-form {\n  border-color: #101010;\n}\n.navbar-inverse .navbar-nav > .open > a,\n.navbar-inverse .navbar-nav > .open > a:hover,\n.navbar-inverse .navbar-nav > .open > a:focus {\n  background-color: #080808;\n  color: #ffffff;\n}\n@media (max-width: 767px) {\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header {\n    border-color: #080808;\n  }\n  .navbar-inverse .navbar-nav .open .dropdown-menu .divider {\n    background-color: #080808;\n  }\n  .navbar-inverse .navbar-nav .open .dropdown-menu > li > a {\n    color: #777777;\n  }\n  .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover,\n  .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus {\n    color: #ffffff;\n    background-color: transparent;\n  }\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a,\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover,\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus {\n    color: #ffffff;\n    background-color: #080808;\n  }\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a,\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover,\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus {\n    color: #444444;\n    background-color: transparent;\n  }\n}\n.navbar-inverse .navbar-link {\n  color: #777777;\n}\n.navbar-inverse .navbar-link:hover {\n  color: #ffffff;\n}\n.navbar-inverse .btn-link {\n  color: #777777;\n}\n.navbar-inverse .btn-link:hover,\n.navbar-inverse .btn-link:focus {\n  color: #ffffff;\n}\n.navbar-inverse .btn-link[disabled]:hover,\nfieldset[disabled] .navbar-inverse .btn-link:hover,\n.navbar-inverse .btn-link[disabled]:focus,\nfieldset[disabled] .navbar-inverse .btn-link:focus {\n  color: #444444;\n}\n.breadcrumb {\n  padding: 8px 15px;\n  margin-bottom: 25px;\n  list-style: none;\n  background-color: #f5f5f5;\n  border-radius: 4px;\n}\n.breadcrumb > li {\n  display: inline-block;\n}\n.breadcrumb > li + li:before {\n  content: \"/\\00a0\";\n  padding: 0 5px;\n  color: #cccccc;\n}\n.breadcrumb > .active {\n  color: #777777;\n}\n.pagination {\n  display: inline-block;\n  padding-left: 0;\n  margin: 25px 0;\n  border-radius: 4px;\n}\n.pagination > li {\n  display: inline;\n}\n.pagination > li > a,\n.pagination > li > span {\n  position: relative;\n  float: left;\n  padding: 6px 12px;\n  line-height: 1.42857143;\n  text-decoration: none;\n  color: #428bca;\n  background-color: #ffffff;\n  border: 1px solid #dddddd;\n  margin-left: -1px;\n}\n.pagination > li:first-child > a,\n.pagination > li:first-child > span {\n  margin-left: 0;\n  border-bottom-left-radius: 4px;\n  border-top-left-radius: 4px;\n}\n.pagination > li:last-child > a,\n.pagination > li:last-child > span {\n  border-bottom-right-radius: 4px;\n  border-top-right-radius: 4px;\n}\n.pagination > li > a:hover,\n.pagination > li > span:hover,\n.pagination > li > a:focus,\n.pagination > li > span:focus {\n  color: #2a6496;\n  background-color: #eeeeee;\n  border-color: #dddddd;\n}\n.pagination > .active > a,\n.pagination > .active > span,\n.pagination > .active > a:hover,\n.pagination > .active > span:hover,\n.pagination > .active > a:focus,\n.pagination > .active > span:focus {\n  z-index: 2;\n  color: #ffffff;\n  background-color: #428bca;\n  border-color: #428bca;\n  cursor: default;\n}\n.pagination > .disabled > span,\n.pagination > .disabled > span:hover,\n.pagination > .disabled > span:focus,\n.pagination > .disabled > a,\n.pagination > .disabled > a:hover,\n.pagination > .disabled > a:focus {\n  color: #777777;\n  background-color: #ffffff;\n  border-color: #dddddd;\n  cursor: not-allowed;\n}\n.pagination-lg > li > a,\n.pagination-lg > li > span {\n  padding: 10px 16px;\n  font-size: 23px;\n}\n.pagination-lg > li:first-child > a,\n.pagination-lg > li:first-child > span {\n  border-bottom-left-radius: 6px;\n  border-top-left-radius: 6px;\n}\n.pagination-lg > li:last-child > a,\n.pagination-lg > li:last-child > span {\n  border-bottom-right-radius: 6px;\n  border-top-right-radius: 6px;\n}\n.pagination-sm > li > a,\n.pagination-sm > li > span {\n  padding: 5px 10px;\n  font-size: 16px;\n}\n.pagination-sm > li:first-child > a,\n.pagination-sm > li:first-child > span {\n  border-bottom-left-radius: 3px;\n  border-top-left-radius: 3px;\n}\n.pagination-sm > li:last-child > a,\n.pagination-sm > li:last-child > span {\n  border-bottom-right-radius: 3px;\n  border-top-right-radius: 3px;\n}\n.pager {\n  padding-left: 0;\n  margin: 25px 0;\n  list-style: none;\n  text-align: center;\n}\n.pager li {\n  display: inline;\n}\n.pager li > a,\n.pager li > span {\n  display: inline-block;\n  padding: 5px 14px;\n  background-color: #ffffff;\n  border: 1px solid #dddddd;\n  border-radius: 15px;\n}\n.pager li > a:hover,\n.pager li > a:focus {\n  text-decoration: none;\n  background-color: #eeeeee;\n}\n.pager .next > a,\n.pager .next > span {\n  float: right;\n}\n.pager .previous > a,\n.pager .previous > span {\n  float: left;\n}\n.pager .disabled > a,\n.pager .disabled > a:hover,\n.pager .disabled > a:focus,\n.pager .disabled > span {\n  color: #777777;\n  background-color: #ffffff;\n  cursor: not-allowed;\n}\n.label {\n  display: inline;\n  padding: .2em .6em .3em;\n  font-size: 75%;\n  font-weight: bold;\n  line-height: 1;\n  color: #ffffff;\n  text-align: center;\n  white-space: nowrap;\n  vertical-align: baseline;\n  border-radius: .25em;\n}\na.label:hover,\na.label:focus {\n  color: #ffffff;\n  text-decoration: none;\n  cursor: pointer;\n}\n.label:empty {\n  display: none;\n}\n.btn .label {\n  position: relative;\n  top: -1px;\n}\n.label-default {\n  background-color: #777777;\n}\n.label-default[href]:hover,\n.label-default[href]:focus {\n  background-color: #5e5e5e;\n}\n.label-primary {\n  background-color: #428bca;\n}\n.label-primary[href]:hover,\n.label-primary[href]:focus {\n  background-color: #3071a9;\n}\n.label-success {\n  background-color: #5cb85c;\n}\n.label-success[href]:hover,\n.label-success[href]:focus {\n  background-color: #449d44;\n}\n.label-info {\n  background-color: #5bc0de;\n}\n.label-info[href]:hover,\n.label-info[href]:focus {\n  background-color: #31b0d5;\n}\n.label-warning {\n  background-color: #f0ad4e;\n}\n.label-warning[href]:hover,\n.label-warning[href]:focus {\n  background-color: #ec971f;\n}\n.label-danger {\n  background-color: #d9534f;\n}\n.label-danger[href]:hover,\n.label-danger[href]:focus {\n  background-color: #c9302c;\n}\n.badge {\n  display: inline-block;\n  min-width: 10px;\n  padding: 3px 7px;\n  font-size: 16px;\n  font-weight: bold;\n  color: #ffffff;\n  line-height: 1;\n  vertical-align: baseline;\n  white-space: nowrap;\n  text-align: center;\n  background-color: #777777;\n  border-radius: 10px;\n}\n.badge:empty {\n  display: none;\n}\n.btn .badge {\n  position: relative;\n  top: -1px;\n}\n.btn-xs .badge {\n  top: 0;\n  padding: 1px 5px;\n}\na.badge:hover,\na.badge:focus {\n  color: #ffffff;\n  text-decoration: none;\n  cursor: pointer;\n}\na.list-group-item.active > .badge,\n.nav-pills > .active > a > .badge {\n  color: #428bca;\n  background-color: #ffffff;\n}\n.nav-pills > li > a > .badge {\n  margin-left: 3px;\n}\n.jumbotron {\n  padding: 30px;\n  margin-bottom: 30px;\n  color: inherit;\n  background-color: #eeeeee;\n}\n.jumbotron h1,\n.jumbotron .h1 {\n  color: inherit;\n}\n.jumbotron p {\n  margin-bottom: 15px;\n  font-size: 27px;\n  font-weight: 200;\n}\n.jumbotron > hr {\n  border-top-color: #d5d5d5;\n}\n.container .jumbotron {\n  border-radius: 6px;\n}\n.jumbotron .container {\n  max-width: 100%;\n}\n@media screen and (min-width: 768px) {\n  .jumbotron {\n    padding-top: 48px;\n    padding-bottom: 48px;\n  }\n  .container .jumbotron {\n    padding-left: 60px;\n    padding-right: 60px;\n  }\n  .jumbotron h1,\n  .jumbotron .h1 {\n    font-size: 81px;\n  }\n}\n.thumbnail {\n  display: block;\n  padding: 4px;\n  margin-bottom: 25px;\n  line-height: 1.42857143;\n  background-color: #ffffff;\n  border: 1px solid #dddddd;\n  border-radius: 4px;\n  -webkit-transition: all 0.2s ease-in-out;\n  -o-transition: all 0.2s ease-in-out;\n  transition: all 0.2s ease-in-out;\n}\n.thumbnail > img,\n.thumbnail a > img {\n  margin-left: auto;\n  margin-right: auto;\n}\na.thumbnail:hover,\na.thumbnail:focus,\na.thumbnail.active {\n  border-color: #428bca;\n}\n.thumbnail .caption {\n  padding: 9px;\n  color: #333333;\n}\n.alert {\n  padding: 15px;\n  margin-bottom: 25px;\n  border: 1px solid transparent;\n  border-radius: 4px;\n}\n.alert h4 {\n  margin-top: 0;\n  color: inherit;\n}\n.alert .alert-link {\n  font-weight: bold;\n}\n.alert > p,\n.alert > ul {\n  margin-bottom: 0;\n}\n.alert > p + p {\n  margin-top: 5px;\n}\n.alert-dismissable,\n.alert-dismissible {\n  padding-right: 35px;\n}\n.alert-dismissable .close,\n.alert-dismissible .close {\n  position: relative;\n  top: -2px;\n  right: -21px;\n  color: inherit;\n}\n.alert-success {\n  background-color: #dff0d8;\n  border-color: #d6e9c6;\n  color: #3c763d;\n}\n.alert-success hr {\n  border-top-color: #c9e2b3;\n}\n.alert-success .alert-link {\n  color: #2b542c;\n}\n.alert-info {\n  background-color: #d9edf7;\n  border-color: #bce8f1;\n  color: #31708f;\n}\n.alert-info hr {\n  border-top-color: #a6e1ec;\n}\n.alert-info .alert-link {\n  color: #245269;\n}\n.alert-warning {\n  background-color: #fcf8e3;\n  border-color: #faebcc;\n  color: #8a6d3b;\n}\n.alert-warning hr {\n  border-top-color: #f7e1b5;\n}\n.alert-warning .alert-link {\n  color: #66512c;\n}\n.alert-danger {\n  background-color: #f2dede;\n  border-color: #ebccd1;\n  color: #a94442;\n}\n.alert-danger hr {\n  border-top-color: #e4b9c0;\n}\n.alert-danger .alert-link {\n  color: #843534;\n}\n@-webkit-keyframes progress-bar-stripes {\n  from {\n    background-position: 40px 0;\n  }\n  to {\n    background-position: 0 0;\n  }\n}\n@keyframes progress-bar-stripes {\n  from {\n    background-position: 40px 0;\n  }\n  to {\n    background-position: 0 0;\n  }\n}\n.progress {\n  overflow: hidden;\n  height: 25px;\n  margin-bottom: 25px;\n  background-color: #f5f5f5;\n  border-radius: 4px;\n  -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);\n  box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);\n}\n.progress-bar {\n  float: left;\n  width: 0%;\n  height: 100%;\n  font-size: 16px;\n  line-height: 25px;\n  color: #ffffff;\n  text-align: center;\n  background-color: #428bca;\n  -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);\n  box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);\n  -webkit-transition: width 0.6s ease;\n  -o-transition: width 0.6s ease;\n  transition: width 0.6s ease;\n}\n.progress-striped .progress-bar,\n.progress-bar-striped {\n  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);\n  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);\n  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);\n  background-size: 40px 40px;\n}\n.progress.active .progress-bar,\n.progress-bar.active {\n  -webkit-animation: progress-bar-stripes 2s linear infinite;\n  -o-animation: progress-bar-stripes 2s linear infinite;\n  animation: progress-bar-stripes 2s linear infinite;\n}\n.progress-bar[aria-valuenow=\"1\"],\n.progress-bar[aria-valuenow=\"2\"] {\n  min-width: 30px;\n}\n.progress-bar[aria-valuenow=\"0\"] {\n  color: #777777;\n  min-width: 30px;\n  background-color: transparent;\n  background-image: none;\n  box-shadow: none;\n}\n.progress-bar-success {\n  background-color: #5cb85c;\n}\n.progress-striped .progress-bar-success {\n  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);\n  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);\n  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);\n}\n.progress-bar-info {\n  background-color: #5bc0de;\n}\n.progress-striped .progress-bar-info {\n  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);\n  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);\n  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);\n}\n.progress-bar-warning {\n  background-color: #f0ad4e;\n}\n.progress-striped .progress-bar-warning {\n  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);\n  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);\n  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);\n}\n.progress-bar-danger {\n  background-color: #d9534f;\n}\n.progress-striped .progress-bar-danger {\n  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);\n  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);\n  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);\n}\n.media,\n.media-body {\n  overflow: hidden;\n  zoom: 1;\n}\n.media,\n.media .media {\n  margin-top: 15px;\n}\n.media:first-child {\n  margin-top: 0;\n}\n.media-object {\n  display: block;\n}\n.media-heading {\n  margin: 0 0 5px;\n}\n.media > .pull-left {\n  margin-right: 10px;\n}\n.media > .pull-right {\n  margin-left: 10px;\n}\n.media-list {\n  padding-left: 0;\n  list-style: none;\n}\n.list-group {\n  margin-bottom: 20px;\n  padding-left: 0;\n}\n.list-group-item {\n  position: relative;\n  display: block;\n  padding: 10px 15px;\n  margin-bottom: -1px;\n  background-color: #ffffff;\n  border: 1px solid #dddddd;\n}\n.list-group-item:first-child {\n  border-top-right-radius: 4px;\n  border-top-left-radius: 4px;\n}\n.list-group-item:last-child {\n  margin-bottom: 0;\n  border-bottom-right-radius: 4px;\n  border-bottom-left-radius: 4px;\n}\n.list-group-item > .badge {\n  float: right;\n}\n.list-group-item > .badge + .badge {\n  margin-right: 5px;\n}\na.list-group-item {\n  color: #555555;\n}\na.list-group-item .list-group-item-heading {\n  color: #333333;\n}\na.list-group-item:hover,\na.list-group-item:focus {\n  text-decoration: none;\n  color: #555555;\n  background-color: #f5f5f5;\n}\n.list-group-item.disabled,\n.list-group-item.disabled:hover,\n.list-group-item.disabled:focus {\n  background-color: #eeeeee;\n  color: #777777;\n}\n.list-group-item.disabled .list-group-item-heading,\n.list-group-item.disabled:hover .list-group-item-heading,\n.list-group-item.disabled:focus .list-group-item-heading {\n  color: inherit;\n}\n.list-group-item.disabled .list-group-item-text,\n.list-group-item.disabled:hover .list-group-item-text,\n.list-group-item.disabled:focus .list-group-item-text {\n  color: #777777;\n}\n.list-group-item.active,\n.list-group-item.active:hover,\n.list-group-item.active:focus {\n  z-index: 2;\n  color: #ffffff;\n  background-color: #428bca;\n  border-color: #428bca;\n}\n.list-group-item.active .list-group-item-heading,\n.list-group-item.active:hover .list-group-item-heading,\n.list-group-item.active:focus .list-group-item-heading,\n.list-group-item.active .list-group-item-heading > small,\n.list-group-item.active:hover .list-group-item-heading > small,\n.list-group-item.active:focus .list-group-item-heading > small,\n.list-group-item.active .list-group-item-heading > .small,\n.list-group-item.active:hover .list-group-item-heading > .small,\n.list-group-item.active:focus .list-group-item-heading > .small {\n  color: inherit;\n}\n.list-group-item.active .list-group-item-text,\n.list-group-item.active:hover .list-group-item-text,\n.list-group-item.active:focus .list-group-item-text {\n  color: #e1edf7;\n}\n.list-group-item-success {\n  color: #3c763d;\n  background-color: #dff0d8;\n}\na.list-group-item-success {\n  color: #3c763d;\n}\na.list-group-item-success .list-group-item-heading {\n  color: inherit;\n}\na.list-group-item-success:hover,\na.list-group-item-success:focus {\n  color: #3c763d;\n  background-color: #d0e9c6;\n}\na.list-group-item-success.active,\na.list-group-item-success.active:hover,\na.list-group-item-success.active:focus {\n  color: #fff;\n  background-color: #3c763d;\n  border-color: #3c763d;\n}\n.list-group-item-info {\n  color: #31708f;\n  background-color: #d9edf7;\n}\na.list-group-item-info {\n  color: #31708f;\n}\na.list-group-item-info .list-group-item-heading {\n  color: inherit;\n}\na.list-group-item-info:hover,\na.list-group-item-info:focus {\n  color: #31708f;\n  background-color: #c4e3f3;\n}\na.list-group-item-info.active,\na.list-group-item-info.active:hover,\na.list-group-item-info.active:focus {\n  color: #fff;\n  background-color: #31708f;\n  border-color: #31708f;\n}\n.list-group-item-warning {\n  color: #8a6d3b;\n  background-color: #fcf8e3;\n}\na.list-group-item-warning {\n  color: #8a6d3b;\n}\na.list-group-item-warning .list-group-item-heading {\n  color: inherit;\n}\na.list-group-item-warning:hover,\na.list-group-item-warning:focus {\n  color: #8a6d3b;\n  background-color: #faf2cc;\n}\na.list-group-item-warning.active,\na.list-group-item-warning.active:hover,\na.list-group-item-warning.active:focus {\n  color: #fff;\n  background-color: #8a6d3b;\n  border-color: #8a6d3b;\n}\n.list-group-item-danger {\n  color: #a94442;\n  background-color: #f2dede;\n}\na.list-group-item-danger {\n  color: #a94442;\n}\na.list-group-item-danger .list-group-item-heading {\n  color: inherit;\n}\na.list-group-item-danger:hover,\na.list-group-item-danger:focus {\n  color: #a94442;\n  background-color: #ebcccc;\n}\na.list-group-item-danger.active,\na.list-group-item-danger.active:hover,\na.list-group-item-danger.active:focus {\n  color: #fff;\n  background-color: #a94442;\n  border-color: #a94442;\n}\n.list-group-item-heading {\n  margin-top: 0;\n  margin-bottom: 5px;\n}\n.list-group-item-text {\n  margin-bottom: 0;\n  line-height: 1.3;\n}\n.panel {\n  margin-bottom: 25px;\n  background-color: #ffffff;\n  border: 1px solid transparent;\n  border-radius: 4px;\n  -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);\n  box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);\n}\n.panel-body {\n  padding: 15px;\n}\n.panel-heading {\n  padding: 10px 15px;\n  border-bottom: 1px solid transparent;\n  border-top-right-radius: 3px;\n  border-top-left-radius: 3px;\n}\n.panel-heading > .dropdown .dropdown-toggle {\n  color: inherit;\n}\n.panel-title {\n  margin-top: 0;\n  margin-bottom: 0;\n  font-size: 21px;\n  color: inherit;\n}\n.panel-title > a {\n  color: inherit;\n}\n.panel-footer {\n  padding: 10px 15px;\n  background-color: #f5f5f5;\n  border-top: 1px solid #dddddd;\n  border-bottom-right-radius: 3px;\n  border-bottom-left-radius: 3px;\n}\n.panel > .list-group {\n  margin-bottom: 0;\n}\n.panel > .list-group .list-group-item {\n  border-width: 1px 0;\n  border-radius: 0;\n}\n.panel > .list-group:first-child .list-group-item:first-child {\n  border-top: 0;\n  border-top-right-radius: 3px;\n  border-top-left-radius: 3px;\n}\n.panel > .list-group:last-child .list-group-item:last-child {\n  border-bottom: 0;\n  border-bottom-right-radius: 3px;\n  border-bottom-left-radius: 3px;\n}\n.panel-heading + .list-group .list-group-item:first-child {\n  border-top-width: 0;\n}\n.list-group + .panel-footer {\n  border-top-width: 0;\n}\n.panel > .table,\n.panel > .table-responsive > .table,\n.panel > .panel-collapse > .table {\n  margin-bottom: 0;\n}\n.panel > .table:first-child,\n.panel > .table-responsive:first-child > .table:first-child {\n  border-top-right-radius: 3px;\n  border-top-left-radius: 3px;\n}\n.panel > .table:first-child > thead:first-child > tr:first-child td:first-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child td:first-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:first-child,\n.panel > .table:first-child > thead:first-child > tr:first-child th:first-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:first-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child th:first-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:first-child {\n  border-top-left-radius: 3px;\n}\n.panel > .table:first-child > thead:first-child > tr:first-child td:last-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:last-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child td:last-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:last-child,\n.panel > .table:first-child > thead:first-child > tr:first-child th:last-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:last-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child th:last-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child {\n  border-top-right-radius: 3px;\n}\n.panel > .table:last-child,\n.panel > .table-responsive:last-child > .table:last-child {\n  border-bottom-right-radius: 3px;\n  border-bottom-left-radius: 3px;\n}\n.panel > .table:last-child > tbody:last-child > tr:last-child td:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:first-child,\n.panel > .table:last-child > tbody:last-child > tr:last-child th:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:first-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child th:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:first-child {\n  border-bottom-left-radius: 3px;\n}\n.panel > .table:last-child > tbody:last-child > tr:last-child td:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:last-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child td:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:last-child,\n.panel > .table:last-child > tbody:last-child > tr:last-child th:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:last-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child th:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:last-child {\n  border-bottom-right-radius: 3px;\n}\n.panel > .panel-body + .table,\n.panel > .panel-body + .table-responsive {\n  border-top: 1px solid #dddddd;\n}\n.panel > .table > tbody:first-child > tr:first-child th,\n.panel > .table > tbody:first-child > tr:first-child td {\n  border-top: 0;\n}\n.panel > .table-bordered,\n.panel > .table-responsive > .table-bordered {\n  border: 0;\n}\n.panel > .table-bordered > thead > tr > th:first-child,\n.panel > .table-responsive > .table-bordered > thead > tr > th:first-child,\n.panel > .table-bordered > tbody > tr > th:first-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > th:first-child,\n.panel > .table-bordered > tfoot > tr > th:first-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child,\n.panel > .table-bordered > thead > tr > td:first-child,\n.panel > .table-responsive > .table-bordered > thead > tr > td:first-child,\n.panel > .table-bordered > tbody > tr > td:first-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > td:first-child,\n.panel > .table-bordered > tfoot > tr > td:first-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child {\n  border-left: 0;\n}\n.panel > .table-bordered > thead > tr > th:last-child,\n.panel > .table-responsive > .table-bordered > thead > tr > th:last-child,\n.panel > .table-bordered > tbody > tr > th:last-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > th:last-child,\n.panel > .table-bordered > tfoot > tr > th:last-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child,\n.panel > .table-bordered > thead > tr > td:last-child,\n.panel > .table-responsive > .table-bordered > thead > tr > td:last-child,\n.panel > .table-bordered > tbody > tr > td:last-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > td:last-child,\n.panel > .table-bordered > tfoot > tr > td:last-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child {\n  border-right: 0;\n}\n.panel > .table-bordered > thead > tr:first-child > td,\n.panel > .table-responsive > .table-bordered > thead > tr:first-child > td,\n.panel > .table-bordered > tbody > tr:first-child > td,\n.panel > .table-responsive > .table-bordered > tbody > tr:first-child > td,\n.panel > .table-bordered > thead > tr:first-child > th,\n.panel > .table-responsive > .table-bordered > thead > tr:first-child > th,\n.panel > .table-bordered > tbody > tr:first-child > th,\n.panel > .table-responsive > .table-bordered > tbody > tr:first-child > th {\n  border-bottom: 0;\n}\n.panel > .table-bordered > tbody > tr:last-child > td,\n.panel > .table-responsive > .table-bordered > tbody > tr:last-child > td,\n.panel > .table-bordered > tfoot > tr:last-child > td,\n.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td,\n.panel > .table-bordered > tbody > tr:last-child > th,\n.panel > .table-responsive > .table-bordered > tbody > tr:last-child > th,\n.panel > .table-bordered > tfoot > tr:last-child > th,\n.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th {\n  border-bottom: 0;\n}\n.panel > .table-responsive {\n  border: 0;\n  margin-bottom: 0;\n}\n.panel-group {\n  margin-bottom: 25px;\n}\n.panel-group .panel {\n  margin-bottom: 0;\n  border-radius: 4px;\n}\n.panel-group .panel + .panel {\n  margin-top: 5px;\n}\n.panel-group .panel-heading {\n  border-bottom: 0;\n}\n.panel-group .panel-heading + .panel-collapse > .panel-body {\n  border-top: 1px solid #dddddd;\n}\n.panel-group .panel-footer {\n  border-top: 0;\n}\n.panel-group .panel-footer + .panel-collapse .panel-body {\n  border-bottom: 1px solid #dddddd;\n}\n.panel-default {\n  border-color: #dddddd;\n}\n.panel-default > .panel-heading {\n  color: #333333;\n  background-color: #f5f5f5;\n  border-color: #dddddd;\n}\n.panel-default > .panel-heading + .panel-collapse > .panel-body {\n  border-top-color: #dddddd;\n}\n.panel-default > .panel-heading .badge {\n  color: #f5f5f5;\n  background-color: #333333;\n}\n.panel-default > .panel-footer + .panel-collapse > .panel-body {\n  border-bottom-color: #dddddd;\n}\n.panel-primary {\n  border-color: #428bca;\n}\n.panel-primary > .panel-heading {\n  color: #ffffff;\n  background-color: #428bca;\n  border-color: #428bca;\n}\n.panel-primary > .panel-heading + .panel-collapse > .panel-body {\n  border-top-color: #428bca;\n}\n.panel-primary > .panel-heading .badge {\n  color: #428bca;\n  background-color: #ffffff;\n}\n.panel-primary > .panel-footer + .panel-collapse > .panel-body {\n  border-bottom-color: #428bca;\n}\n.panel-success {\n  border-color: #d6e9c6;\n}\n.panel-success > .panel-heading {\n  color: #3c763d;\n  background-color: #dff0d8;\n  border-color: #d6e9c6;\n}\n.panel-success > .panel-heading + .panel-collapse > .panel-body {\n  border-top-color: #d6e9c6;\n}\n.panel-success > .panel-heading .badge {\n  color: #dff0d8;\n  background-color: #3c763d;\n}\n.panel-success > .panel-footer + .panel-collapse > .panel-body {\n  border-bottom-color: #d6e9c6;\n}\n.panel-info {\n  border-color: #bce8f1;\n}\n.panel-info > .panel-heading {\n  color: #31708f;\n  background-color: #d9edf7;\n  border-color: #bce8f1;\n}\n.panel-info > .panel-heading + .panel-collapse > .panel-body {\n  border-top-color: #bce8f1;\n}\n.panel-info > .panel-heading .badge {\n  color: #d9edf7;\n  background-color: #31708f;\n}\n.panel-info > .panel-footer + .panel-collapse > .panel-body {\n  border-bottom-color: #bce8f1;\n}\n.panel-warning {\n  border-color: #faebcc;\n}\n.panel-warning > .panel-heading {\n  color: #8a6d3b;\n  background-color: #fcf8e3;\n  border-color: #faebcc;\n}\n.panel-warning > .panel-heading + .panel-collapse > .panel-body {\n  border-top-color: #faebcc;\n}\n.panel-warning > .panel-heading .badge {\n  color: #fcf8e3;\n  background-color: #8a6d3b;\n}\n.panel-warning > .panel-footer + .panel-collapse > .panel-body {\n  border-bottom-color: #faebcc;\n}\n.panel-danger {\n  border-color: #ebccd1;\n}\n.panel-danger > .panel-heading {\n  color: #a94442;\n  background-color: #f2dede;\n  border-color: #ebccd1;\n}\n.panel-danger > .panel-heading + .panel-collapse > .panel-body {\n  border-top-color: #ebccd1;\n}\n.panel-danger > .panel-heading .badge {\n  color: #f2dede;\n  background-color: #a94442;\n}\n.panel-danger > .panel-footer + .panel-collapse > .panel-body {\n  border-bottom-color: #ebccd1;\n}\n.embed-responsive {\n  position: relative;\n  display: block;\n  height: 0;\n  padding: 0;\n  overflow: hidden;\n}\n.embed-responsive .embed-responsive-item,\n.embed-responsive iframe,\n.embed-responsive embed,\n.embed-responsive object {\n  position: absolute;\n  top: 0;\n  left: 0;\n  bottom: 0;\n  height: 100%;\n  width: 100%;\n  border: 0;\n}\n.embed-responsive.embed-responsive-16by9 {\n  padding-bottom: 56.25%;\n}\n.embed-responsive.embed-responsive-4by3 {\n  padding-bottom: 75%;\n}\n.well {\n  min-height: 20px;\n  padding: 19px;\n  margin-bottom: 20px;\n  background-color: #f5f5f5;\n  border: 1px solid #e3e3e3;\n  border-radius: 4px;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);\n  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);\n}\n.well blockquote {\n  border-color: #ddd;\n  border-color: rgba(0, 0, 0, 0.15);\n}\n.well-lg {\n  padding: 24px;\n  border-radius: 6px;\n}\n.well-sm {\n  padding: 9px;\n  border-radius: 3px;\n}\n.close {\n  float: right;\n  font-size: 27px;\n  font-weight: bold;\n  line-height: 1;\n  color: #000000;\n  text-shadow: 0 1px 0 #ffffff;\n  opacity: 0.2;\n  filter: alpha(opacity=20);\n}\n.close:hover,\n.close:focus {\n  color: #000000;\n  text-decoration: none;\n  cursor: pointer;\n  opacity: 0.5;\n  filter: alpha(opacity=50);\n}\nbutton.close {\n  padding: 0;\n  cursor: pointer;\n  background: transparent;\n  border: 0;\n  -webkit-appearance: none;\n}\n.modal-open {\n  overflow: hidden;\n}\n.modal {\n  display: none;\n  overflow: hidden;\n  position: fixed;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 1050;\n  -webkit-overflow-scrolling: touch;\n  outline: 0;\n}\n.modal.fade .modal-dialog {\n  -webkit-transform: translate3d(0, -25%, 0);\n  transform: translate3d(0, -25%, 0);\n  -webkit-transition: -webkit-transform 0.3s ease-out;\n  -moz-transition: -moz-transform 0.3s ease-out;\n  -o-transition: -o-transform 0.3s ease-out;\n  transition: transform 0.3s ease-out;\n}\n.modal.in .modal-dialog {\n  -webkit-transform: translate3d(0, 0, 0);\n  transform: translate3d(0, 0, 0);\n}\n.modal-open .modal {\n  overflow-x: hidden;\n  overflow-y: auto;\n}\n.modal-dialog {\n  position: relative;\n  width: auto;\n  margin: 10px;\n}\n.modal-content {\n  position: relative;\n  background-color: #ffffff;\n  border: 1px solid #999999;\n  border: 1px solid rgba(0, 0, 0, 0.2);\n  border-radius: 6px;\n  -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);\n  box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);\n  background-clip: padding-box;\n  outline: 0;\n}\n.modal-backdrop {\n  position: fixed;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 1040;\n  background-color: #000000;\n}\n.modal-backdrop.fade {\n  opacity: 0;\n  filter: alpha(opacity=0);\n}\n.modal-backdrop.in {\n  opacity: 0.5;\n  filter: alpha(opacity=50);\n}\n.modal-header {\n  padding: 15px;\n  border-bottom: 1px solid #e5e5e5;\n  min-height: 16.42857143px;\n}\n.modal-header .close {\n  margin-top: -2px;\n}\n.modal-title {\n  margin: 0;\n  line-height: 1.42857143;\n}\n.modal-body {\n  position: relative;\n  padding: 15px;\n}\n.modal-footer {\n  padding: 15px;\n  text-align: right;\n  border-top: 1px solid #e5e5e5;\n}\n.modal-footer .btn + .btn {\n  margin-left: 5px;\n  margin-bottom: 0;\n}\n.modal-footer .btn-group .btn + .btn {\n  margin-left: -1px;\n}\n.modal-footer .btn-block + .btn-block {\n  margin-left: 0;\n}\n.modal-scrollbar-measure {\n  position: absolute;\n  top: -9999px;\n  width: 50px;\n  height: 50px;\n  overflow: scroll;\n}\n@media (min-width: 768px) {\n  .modal-dialog {\n    width: 600px;\n    margin: 30px auto;\n  }\n  .modal-content {\n    -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5);\n    box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5);\n  }\n  .modal-sm {\n    width: 300px;\n  }\n}\n@media (min-width: 992px) {\n  .modal-lg {\n    width: 900px;\n  }\n}\n.tooltip {\n  position: absolute;\n  z-index: 1070;\n  display: block;\n  visibility: visible;\n  font-size: 16px;\n  line-height: 1.4;\n  opacity: 0;\n  filter: alpha(opacity=0);\n}\n.tooltip.in {\n  opacity: 0.9;\n  filter: alpha(opacity=90);\n}\n.tooltip.top {\n  margin-top: -3px;\n  padding: 5px 0;\n}\n.tooltip.right {\n  margin-left: 3px;\n  padding: 0 5px;\n}\n.tooltip.bottom {\n  margin-top: 3px;\n  padding: 5px 0;\n}\n.tooltip.left {\n  margin-left: -3px;\n  padding: 0 5px;\n}\n.tooltip-inner {\n  max-width: 200px;\n  padding: 3px 8px;\n  color: #ffffff;\n  text-align: center;\n  text-decoration: none;\n  background-color: #000000;\n  border-radius: 4px;\n}\n.tooltip-arrow {\n  position: absolute;\n  width: 0;\n  height: 0;\n  border-color: transparent;\n  border-style: solid;\n}\n.tooltip.top .tooltip-arrow {\n  bottom: 0;\n  left: 50%;\n  margin-left: -5px;\n  border-width: 5px 5px 0;\n  border-top-color: #000000;\n}\n.tooltip.top-left .tooltip-arrow {\n  bottom: 0;\n  left: 5px;\n  border-width: 5px 5px 0;\n  border-top-color: #000000;\n}\n.tooltip.top-right .tooltip-arrow {\n  bottom: 0;\n  right: 5px;\n  border-width: 5px 5px 0;\n  border-top-color: #000000;\n}\n.tooltip.right .tooltip-arrow {\n  top: 50%;\n  left: 0;\n  margin-top: -5px;\n  border-width: 5px 5px 5px 0;\n  border-right-color: #000000;\n}\n.tooltip.left .tooltip-arrow {\n  top: 50%;\n  right: 0;\n  margin-top: -5px;\n  border-width: 5px 0 5px 5px;\n  border-left-color: #000000;\n}\n.tooltip.bottom .tooltip-arrow {\n  top: 0;\n  left: 50%;\n  margin-left: -5px;\n  border-width: 0 5px 5px;\n  border-bottom-color: #000000;\n}\n.tooltip.bottom-left .tooltip-arrow {\n  top: 0;\n  left: 5px;\n  border-width: 0 5px 5px;\n  border-bottom-color: #000000;\n}\n.tooltip.bottom-right .tooltip-arrow {\n  top: 0;\n  right: 5px;\n  border-width: 0 5px 5px;\n  border-bottom-color: #000000;\n}\n.popover {\n  position: absolute;\n  top: 0;\n  left: 0;\n  z-index: 1060;\n  display: none;\n  max-width: 276px;\n  padding: 1px;\n  text-align: left;\n  background-color: #ffffff;\n  background-clip: padding-box;\n  border: 1px solid #cccccc;\n  border: 1px solid rgba(0, 0, 0, 0.2);\n  border-radius: 6px;\n  -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);\n  box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);\n  white-space: normal;\n}\n.popover.top {\n  margin-top: -10px;\n}\n.popover.right {\n  margin-left: 10px;\n}\n.popover.bottom {\n  margin-top: 10px;\n}\n.popover.left {\n  margin-left: -10px;\n}\n.popover-title {\n  margin: 0;\n  padding: 8px 14px;\n  font-size: 18px;\n  font-weight: normal;\n  line-height: 18px;\n  background-color: #f7f7f7;\n  border-bottom: 1px solid #ebebeb;\n  border-radius: 5px 5px 0 0;\n}\n.popover-content {\n  padding: 9px 14px;\n}\n.popover > .arrow,\n.popover > .arrow:after {\n  position: absolute;\n  display: block;\n  width: 0;\n  height: 0;\n  border-color: transparent;\n  border-style: solid;\n}\n.popover > .arrow {\n  border-width: 11px;\n}\n.popover > .arrow:after {\n  border-width: 10px;\n  content: \"\";\n}\n.popover.top > .arrow {\n  left: 50%;\n  margin-left: -11px;\n  border-bottom-width: 0;\n  border-top-color: #999999;\n  border-top-color: rgba(0, 0, 0, 0.25);\n  bottom: -11px;\n}\n.popover.top > .arrow:after {\n  content: \" \";\n  bottom: 1px;\n  margin-left: -10px;\n  border-bottom-width: 0;\n  border-top-color: #ffffff;\n}\n.popover.right > .arrow {\n  top: 50%;\n  left: -11px;\n  margin-top: -11px;\n  border-left-width: 0;\n  border-right-color: #999999;\n  border-right-color: rgba(0, 0, 0, 0.25);\n}\n.popover.right > .arrow:after {\n  content: \" \";\n  left: 1px;\n  bottom: -10px;\n  border-left-width: 0;\n  border-right-color: #ffffff;\n}\n.popover.bottom > .arrow {\n  left: 50%;\n  margin-left: -11px;\n  border-top-width: 0;\n  border-bottom-color: #999999;\n  border-bottom-color: rgba(0, 0, 0, 0.25);\n  top: -11px;\n}\n.popover.bottom > .arrow:after {\n  content: \" \";\n  top: 1px;\n  margin-left: -10px;\n  border-top-width: 0;\n  border-bottom-color: #ffffff;\n}\n.popover.left > .arrow {\n  top: 50%;\n  right: -11px;\n  margin-top: -11px;\n  border-right-width: 0;\n  border-left-color: #999999;\n  border-left-color: rgba(0, 0, 0, 0.25);\n}\n.popover.left > .arrow:after {\n  content: \" \";\n  right: 1px;\n  border-right-width: 0;\n  border-left-color: #ffffff;\n  bottom: -10px;\n}\n.carousel {\n  position: relative;\n}\n.carousel-inner {\n  position: relative;\n  overflow: hidden;\n  width: 100%;\n}\n.carousel-inner > .item {\n  display: none;\n  position: relative;\n  -webkit-transition: 0.6s ease-in-out left;\n  -o-transition: 0.6s ease-in-out left;\n  transition: 0.6s ease-in-out left;\n}\n.carousel-inner > .item > img,\n.carousel-inner > .item > a > img {\n  line-height: 1;\n}\n.carousel-inner > .active,\n.carousel-inner > .next,\n.carousel-inner > .prev {\n  display: block;\n}\n.carousel-inner > .active {\n  left: 0;\n}\n.carousel-inner > .next,\n.carousel-inner > .prev {\n  position: absolute;\n  top: 0;\n  width: 100%;\n}\n.carousel-inner > .next {\n  left: 100%;\n}\n.carousel-inner > .prev {\n  left: -100%;\n}\n.carousel-inner > .next.left,\n.carousel-inner > .prev.right {\n  left: 0;\n}\n.carousel-inner > .active.left {\n  left: -100%;\n}\n.carousel-inner > .active.right {\n  left: 100%;\n}\n.carousel-control {\n  position: absolute;\n  top: 0;\n  left: 0;\n  bottom: 0;\n  width: 15%;\n  opacity: 0.5;\n  filter: alpha(opacity=50);\n  font-size: 20px;\n  color: #ffffff;\n  text-align: center;\n  text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6);\n}\n.carousel-control.left {\n  background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%);\n  background-image: -o-linear-gradient(left, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%);\n  background-image: linear-gradient(to right, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%);\n  background-repeat: repeat-x;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);\n}\n.carousel-control.right {\n  left: auto;\n  right: 0;\n  background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%);\n  background-image: -o-linear-gradient(left, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%);\n  background-image: linear-gradient(to right, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%);\n  background-repeat: repeat-x;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);\n}\n.carousel-control:hover,\n.carousel-control:focus {\n  outline: 0;\n  color: #ffffff;\n  text-decoration: none;\n  opacity: 0.9;\n  filter: alpha(opacity=90);\n}\n.carousel-control .icon-prev,\n.carousel-control .icon-next,\n.carousel-control .glyphicon-chevron-left,\n.carousel-control .glyphicon-chevron-right {\n  position: absolute;\n  top: 50%;\n  z-index: 5;\n  display: inline-block;\n}\n.carousel-control .icon-prev,\n.carousel-control .glyphicon-chevron-left {\n  left: 50%;\n  margin-left: -10px;\n}\n.carousel-control .icon-next,\n.carousel-control .glyphicon-chevron-right {\n  right: 50%;\n  margin-right: -10px;\n}\n.carousel-control .icon-prev,\n.carousel-control .icon-next {\n  width: 20px;\n  height: 20px;\n  margin-top: -10px;\n  font-family: serif;\n}\n.carousel-control .icon-prev:before {\n  content: '\\2039';\n}\n.carousel-control .icon-next:before {\n  content: '\\203a';\n}\n.carousel-indicators {\n  position: absolute;\n  bottom: 10px;\n  left: 50%;\n  z-index: 15;\n  width: 60%;\n  margin-left: -30%;\n  padding-left: 0;\n  list-style: none;\n  text-align: center;\n}\n.carousel-indicators li {\n  display: inline-block;\n  width: 10px;\n  height: 10px;\n  margin: 1px;\n  text-indent: -999px;\n  border: 1px solid #ffffff;\n  border-radius: 10px;\n  cursor: pointer;\n  background-color: #000 \\9;\n  background-color: rgba(0, 0, 0, 0);\n}\n.carousel-indicators .active {\n  margin: 0;\n  width: 12px;\n  height: 12px;\n  background-color: #ffffff;\n}\n.carousel-caption {\n  position: absolute;\n  left: 15%;\n  right: 15%;\n  bottom: 20px;\n  z-index: 10;\n  padding-top: 20px;\n  padding-bottom: 20px;\n  color: #ffffff;\n  text-align: center;\n  text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6);\n}\n.carousel-caption .btn {\n  text-shadow: none;\n}\n@media screen and (min-width: 768px) {\n  .carousel-control .glyphicon-chevron-left,\n  .carousel-control .glyphicon-chevron-right,\n  .carousel-control .icon-prev,\n  .carousel-control .icon-next {\n    width: 30px;\n    height: 30px;\n    margin-top: -15px;\n    font-size: 30px;\n  }\n  .carousel-control .glyphicon-chevron-left,\n  .carousel-control .icon-prev {\n    margin-left: -15px;\n  }\n  .carousel-control .glyphicon-chevron-right,\n  .carousel-control .icon-next {\n    margin-right: -15px;\n  }\n  .carousel-caption {\n    left: 20%;\n    right: 20%;\n    padding-bottom: 30px;\n  }\n  .carousel-indicators {\n    bottom: 20px;\n  }\n}\n.clearfix:before,\n.clearfix:after,\n.dl-horizontal dd:before,\n.dl-horizontal dd:after,\n.container:before,\n.container:after,\n.container-fluid:before,\n.container-fluid:after,\n.row:before,\n.row:after,\n.form-horizontal .form-group:before,\n.form-horizontal .form-group:after,\n.btn-toolbar:before,\n.btn-toolbar:after,\n.btn-group-vertical > .btn-group:before,\n.btn-group-vertical > .btn-group:after,\n.nav:before,\n.nav:after,\n.navbar:before,\n.navbar:after,\n.navbar-header:before,\n.navbar-header:after,\n.navbar-collapse:before,\n.navbar-collapse:after,\n.pager:before,\n.pager:after,\n.panel-body:before,\n.panel-body:after,\n.modal-footer:before,\n.modal-footer:after {\n  content: \" \";\n  display: table;\n}\n.clearfix:after,\n.dl-horizontal dd:after,\n.container:after,\n.container-fluid:after,\n.row:after,\n.form-horizontal .form-group:after,\n.btn-toolbar:after,\n.btn-group-vertical > .btn-group:after,\n.nav:after,\n.navbar:after,\n.navbar-header:after,\n.navbar-collapse:after,\n.pager:after,\n.panel-body:after,\n.modal-footer:after {\n  clear: both;\n}\n.center-block {\n  display: block;\n  margin-left: auto;\n  margin-right: auto;\n}\n.pull-right {\n  float: right !important;\n}\n.pull-left {\n  float: left !important;\n}\n.hide {\n  display: none !important;\n}\n.show {\n  display: block !important;\n}\n.invisible {\n  visibility: hidden;\n}\n.text-hide {\n  font: 0/0 a;\n  color: transparent;\n  text-shadow: none;\n  background-color: transparent;\n  border: 0;\n}\n.hidden {\n  display: none !important;\n  visibility: hidden !important;\n}\n.affix {\n  position: fixed;\n  -webkit-transform: translate3d(0, 0, 0);\n  transform: translate3d(0, 0, 0);\n}\n@-ms-viewport {\n  width: device-width;\n}\n.visible-xs,\n.visible-sm,\n.visible-md,\n.visible-lg {\n  display: none !important;\n}\n.visible-xs-block,\n.visible-xs-inline,\n.visible-xs-inline-block,\n.visible-sm-block,\n.visible-sm-inline,\n.visible-sm-inline-block,\n.visible-md-block,\n.visible-md-inline,\n.visible-md-inline-block,\n.visible-lg-block,\n.visible-lg-inline,\n.visible-lg-inline-block {\n  display: none !important;\n}\n@media (max-width: 767px) {\n  .visible-xs {\n    display: block !important;\n  }\n  table.visible-xs {\n    display: table;\n  }\n  tr.visible-xs {\n    display: table-row !important;\n  }\n  th.visible-xs,\n  td.visible-xs {\n    display: table-cell !important;\n  }\n}\n@media (max-width: 767px) {\n  .visible-xs-block {\n    display: block !important;\n  }\n}\n@media (max-width: 767px) {\n  .visible-xs-inline {\n    display: inline !important;\n  }\n}\n@media (max-width: 767px) {\n  .visible-xs-inline-block {\n    display: inline-block !important;\n  }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n  .visible-sm {\n    display: block !important;\n  }\n  table.visible-sm {\n    display: table;\n  }\n  tr.visible-sm {\n    display: table-row !important;\n  }\n  th.visible-sm,\n  td.visible-sm {\n    display: table-cell !important;\n  }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n  .visible-sm-block {\n    display: block !important;\n  }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n  .visible-sm-inline {\n    display: inline !important;\n  }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n  .visible-sm-inline-block {\n    display: inline-block !important;\n  }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n  .visible-md {\n    display: block !important;\n  }\n  table.visible-md {\n    display: table;\n  }\n  tr.visible-md {\n    display: table-row !important;\n  }\n  th.visible-md,\n  td.visible-md {\n    display: table-cell !important;\n  }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n  .visible-md-block {\n    display: block !important;\n  }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n  .visible-md-inline {\n    display: inline !important;\n  }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n  .visible-md-inline-block {\n    display: inline-block !important;\n  }\n}\n@media (min-width: 1200px) {\n  .visible-lg {\n    display: block !important;\n  }\n  table.visible-lg {\n    display: table;\n  }\n  tr.visible-lg {\n    display: table-row !important;\n  }\n  th.visible-lg,\n  td.visible-lg {\n    display: table-cell !important;\n  }\n}\n@media (min-width: 1200px) {\n  .visible-lg-block {\n    display: block !important;\n  }\n}\n@media (min-width: 1200px) {\n  .visible-lg-inline {\n    display: inline !important;\n  }\n}\n@media (min-width: 1200px) {\n  .visible-lg-inline-block {\n    display: inline-block !important;\n  }\n}\n@media (max-width: 767px) {\n  .hidden-xs {\n    display: none !important;\n  }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n  .hidden-sm {\n    display: none !important;\n  }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n  .hidden-md {\n    display: none !important;\n  }\n}\n@media (min-width: 1200px) {\n  .hidden-lg {\n    display: none !important;\n  }\n}\n.visible-print {\n  display: none !important;\n}\n@media print {\n  .visible-print {\n    display: block !important;\n  }\n  table.visible-print {\n    display: table;\n  }\n  tr.visible-print {\n    display: table-row !important;\n  }\n  th.visible-print,\n  td.visible-print {\n    display: table-cell !important;\n  }\n}\n.visible-print-block {\n  display: none !important;\n}\n@media print {\n  .visible-print-block {\n    display: block !important;\n  }\n}\n.visible-print-inline {\n  display: none !important;\n}\n@media print {\n  .visible-print-inline {\n    display: inline !important;\n  }\n}\n.visible-print-inline-block {\n  display: none !important;\n}\n@media print {\n  .visible-print-inline-block {\n    display: inline-block !important;\n  }\n}\n@media print {\n  .hidden-print {\n    display: none !important;\n  }\n}\n"
  },
  {
    "path": "themes/bootstrap-2/stylesheets/style.css",
    "content": "body {\n  background: #edece3;\n}\n\n/* Page header classes */\n.navbar {\n  border-radius: 0;\n}\n\n#logo {\n  margin-top: 60px;\n  height: 300px;\n  background-image: url('../../images/theme/header.jpg');\n  background-position: center center;\n  -webkit-background-size: cover;\n  -moz-background-size: cover;\n  -o-background-size: cover;\n  background-size: cover;\n}\n\n.vertical-container {\n  display: table;\n}\n\n.vertical {\n  display: table-cell;\n  vertical-align: middle;\n  height: 300px;\n  text-align: center;\n}\n\n.vertical a {\n  color: #fff;\n  font-weight: bold;\n}\n\n.subtitle {\n  color: #999;\n  font-size: 1.2em;\n  font-weight: bold;\n}\n\n/* Main page classes */\n#page {\n  background: #fff;\n  padding-bottom: 20px;\n}\n\n#page img {\n    background: #ddd;\n    border: 1px solid #DDDDDD;\n    border-radius: 6px;\n    line-height: 1;\n    padding: 4px;\n    display: block;\n    max-width: 100%;\n    height: auto;\n}\n\n.status {\n  margin-top: 30px;\n}\n\n#page .gravatar {\n  margin-right: 10px;\n  margin-bottom: 10px;\n}\n\n#commentList {\n  padding-left: 0;\n}\n\n#commentList li .content {\n  margin-left: 76px;\n}\n\n#sidebar {\n  padding-top: 24px;\n}\n"
  },
  {
    "path": "themes/bootstrap-2/views/articles/_article.html.erb",
    "content": "<article id=\"article-<%= article.id %>\" class='h-entry hentry h-as-note'>\n  <h2 class='page-header p-name entry-title'><%= link_to_permalink(article, article.title) %></h2>\n  <div class='e-content entry-content article'>\n    <% if article.password.blank? %>\n      <%= render 'articles/article_excerpt', article: article %>\n    <% else %>\n      <%= render 'articles/password_form', article: article %>\n    <% end %>\n    <%= render 'articles/meta', article: article %>\n  </div>\n  <div class='comments'>\n    <%= render 'articles/comment_counter', article: article %>\n  </div>\n</article>\n"
  },
  {
    "path": "themes/bootstrap-2/views/articles/_comment_counter.html.erb",
    "content": "<%= link_to t('.comments', count: article.published_comments.size), article.permalink_url %>\n"
  },
  {
    "path": "themes/bootstrap-2/views/articles/_comment_form.html.erb",
    "content": "<%= form_tag @article.comment_url do %>\n<div id='commentform'>\n  <h3><%= t('.comment') %> <em><%= @article.title %></em></h3>\n  <div class='form-group'>\n  <%= text_field 'comment', 'author', class: 'form-control', placeholder: t('.your_name') %>\n  </div>\n  <div class='form-group'>\n    <%= text_field 'comment', 'email', class: 'form-control', placeholder: t('.email_address') %>\n  </div>\n  <div class='form-group'>\n  <%= text_field 'comment', 'url', class: 'form-control', placeholder: t('.your_website') %>\n  </div>\n  <div class='form-group'>\n    <%= text_area 'comment', 'body', rows: 8, class: 'form-control' %>\n  </div>\n\n  <% if this_blog.use_recaptcha %>\n  <div class='form-group'><%= raw recaptcha_tags ajax: true %></div>\n  <% end %>\n  <div class='form-actions'>\n    <input type='submit' id='form-submit-button' class='btn btn-info' value=\"<%= t('.comment') %>\" />\n  </div>\n</div>\n<% end %>\n"
  },
  {
    "path": "themes/bootstrap-2/views/articles/_comment_list.html.erb",
    "content": "<ul id=\"commentList\" class=\"unstyled\">\n  <% if @article.published_comments.any? %>\n  <%= render @article.published_comments %>\n  <% end %>\n</ul>\n"
  },
  {
    "path": "themes/bootstrap-2/views/articles/_meta.html.erb",
    "content": "<div class='meta'>\n  <p>\n  <small>\n    <% author_span = content_tag :span, article.user.nickname, class: 'p-author h-card'\n       tags = tag_links(article) unless article.tags.empty? %>\n    <%= t('.published_on_html', publish_date_and_time: display_date_and_time(article.published_at), by: author_span, tags: tags) %>\n  </small>\n  </p>\n</div>\n"
  },
  {
    "path": "themes/bootstrap-2/views/articles/_trackback.html.erb",
    "content": "<li d=\"trackback-<%= trackback.id %>\">\n  <div class=\"author\">\n    <a href=\"<%= trackback.url %>\" rel=\"nofollow\"><%= trackback.title %></a>\n    <abbr><% t('.from') %> <cite><%= trackback.blog_name %></cite></abbr>\n  </div>\n  <div class=\"content\">\n    <%= trackback.excerpt %>\n  </div>\n</li>\n"
  },
  {
    "path": "themes/bootstrap-2/views/articles/index.html.erb",
    "content": "<div class='hfeed'>\n  <%= render @articles %>\n</div>\n<div class='paginate'>\n  <%= paginate(@articles) %>\n</div>\n"
  },
  {
    "path": "themes/bootstrap-2/views/articles/read.html.erb",
    "content": "<div class=\"article\" id=\"article-<%= @article.id %>\">\n  <h1 class='page-header'><%= link_to_permalink(@article, @article.title) %></h1>\n\n  <% if @article.password.blank? %>\n    <%= render 'articles/full_article_content', article: @article %>\n  <% else %>\n    <%= render 'articles/password_form', article: @article %>\n  <% end %>\n  <%= render 'articles/meta', article: @article %>\n\n  <% if @article.user.twitter.present? %>\n  <div class='well'>\n    <%= t('.if_you_liked_this_article_you_can_html', add_twitter: link_to(t('.add_me_to_twitter'), \"http://twitter.com/#{@article.user.twitter}\")) %>\n  </div>\n  <% end %>\n\n  <% if @article.allow_comments? or @article.published_comments.size > 0 %>\n    <h3 class=\"feedback\" id=\"commentaires\">\n      <%= render 'articles/comment_counter', article: @article %>\n      <a href=\"#commentform\" ref=\"nofollow\"> &raquo;</a>\n    </h3>\n    <%= render 'articles/comment_list' %>\n  <% end %>\n\n  <% if @article.allow_comments? %>\n    <%= render 'articles/comment_form' %>\n  <% else %>\n    <div class=\"well well-small\">\n      <%= t('.comments_are_disabled') %>\n    </div>\n  <% end %>\n\n  <% if @article.published_trackbacks.any? %>\n    <h5 class=\"feedback\" id=\"trackbacks\"><%= t('.trackbacks_for') %> <em><%= @article.title %></em></h5>\n    <ol id=\"trackbacks\" class=\"trackbacks\">\n      <%= render partial: 'trackback', collection: @article.published_trackbacks %>\n    </ol>\n  <% end %>\n</div>\n"
  },
  {
    "path": "themes/bootstrap-2/views/articles/search.html.erb",
    "content": "<h1><%= t('.search_results_for', query: params[:q]) %></h1>\n\n<% @articles.each do |article| %>\n<div id=\"article-<%= article.id %>\">\n  <h2><%= link_to_permalink(article, article.title) %></h2>\n  <% if article.password.blank? %>\n    <p><%= article.html(:body).strip_html.slice(0, 300) %> [...]</p>\n  <% end %>\n  <div class='author'>\n    Le <%= l(article.published_at, format: :with_spaces) %>\n  </div>\n  <div class='comments'>\n    <%= render 'articles/comment_counter', article: article %>\n  </div>\n</div>\n\n<% end %>\n\n<div id='paginate'>\n<%= paginate @articles, previous_label: 'Previous', next_label: 'Next' %>\n</div>\n"
  },
  {
    "path": "themes/bootstrap-2/views/articles/view_page.html.erb",
    "content": "<h1 class='page-header'><%= link_to_permalink(@page, @page.title) %></h1>\n<%= @page.html %>\n"
  },
  {
    "path": "themes/bootstrap-2/views/comments/_comment.html.erb",
    "content": "<li class='list-unstyled' id=\"comment-<%= comment.id %>\">\n  <%= avatar_tag(email: comment.email, url: comment.url, class: 'img-circle pull-left gravatar') %>\n  <div class='content'>\n    <h4>\n      <%= t('.by') %> <%= comment.url.blank? ? h(comment.author) : nofollowified_link_to(h(comment.author), comment.url) %>\n      <%= display_date_and_time comment.created_at %>\n    </h4>\n    <%= comment.html %>\n    <%- unless comment.published? %>\n      <div class=\"spamwarning\"><%= t('.this_comment_has_been_flagged_for_moderator_approval') %></div>\n    <%- end %>\n    <hr />\n  </div>\n</li>\n"
  },
  {
    "path": "themes/bootstrap-2/views/layouts/default.html.erb",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n<head profile=\"http://gmpg.org/xfn/11\">\n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n  <title><%= h(page_title) %></title>\n  <%= stylesheet_link_tag '/stylesheets/theme/bootstrap.css', '/stylesheets/theme/style.css', 'user-styles.css', media: 'all' %>\n  <%= render 'shared/page_header' %>\n</head>\n<body>\n  <nav class=\"navbar navbar-default\" role=\"navigation\">\n    <div class=\"container\">\n      <div class='navbar-header'>\n        <%= link_to(content_tag(:span, '', class: 'glyphicon glyphicon-th'), this_blog.base_url, class: 'navbar-brand') %>\n      </div>\n      <ul class='nav navbar-nav pull-right'>\n        <li><%= link_to(t('.statuses'), controller: 'notes') %></li>\n        <li><%= link_to(t('.archives'), controller: 'articles', action: 'archives') %></li>\n        <%- Page.published.each do |page| %>\n        <li><%= link_to_permalink(page, page.title) %></li>\n        <%- end %>\n      </ul>\n    </div>\n  </nav>\n\n  <div id='logo' class='container'>\n    <div class='row'>\n      <div class='col-lg-12 vertical-container'>\n        <div class='vertical'>\n          <h1><%= link_to(this_blog.blog_name, this_blog.base_url) %></h1>\n          <p class='subtitle'><%= this_blog.blog_subtitle %></p>\n        </div>\n      </div>\n    </div>\n  </div>\n  <div class='container' id='page'>\n    <div class='col-sm-8'>\n      <%= yield %>\n    </div>\n    <div class='col-sm-3 col-sm-offset-1' id='sidebar'>\n      <%= render_sidebars %>\n    </div>\n  </div>\n\n  <div id='page' class='container'>\n    <div class='row'>\n      <div class='span1'></div>\n      <div class='span7'></div>\n    </div>\n  </div>\n  <p style='text-align: center'><small>Powered by <a href='http://publify.github.io/'>Publify</a> | Photo <a href='http://startupstockphotos.com/'>Startup stock photos</a></small></p>\n</body>\n</html>\n"
  },
  {
    "path": "themes/bootstrap-2/views/tags/show.html.erb",
    "content": "<div class='hfeed'>\n  <%= render @articles %>\n</div>\n\n<div id='paginate'>\n<%= paginate @articles, previous_label: t('pagination.previous'), next_label: t('pagination.next') %>\n</div>\n"
  },
  {
    "path": "vendor/.keep",
    "content": ""
  }
]